2013-08-02 81 views
1

我有一個由許多模塊組成的Java EE應用程序。我試圖能夠進行間接JNDI查找。服務器找不到java:comp/env/jdbc/my_db數據源...在上下文中未找到名稱comp/env/jdbc「java:」

我按照這些步驟:

ejb-jar.xml中:在每個模塊中。我定義了一個企業bean。該模塊中的所有的DAO從該DAO繼承(MyDataAccessObject)


<enterprise-beans> 
     <session> 
      <ejb-name>DataAccessObject</ejb-name> 
      <ejb-class>com.mycompany.dao.MyDataAccessObject</ejb-class> 
      <session-type>Stateless</session-type> 
      <transaction-type>Container</transaction-type> 
      <resource-ref id="MyRef"> 
       <description /> 
       <res-ref-name>jdbc/My_db</res-ref-name> 
       <res-type>javax.sql.DataSource</res-type> 
       <res-auth>Container</res-auth> 
       <res-sharing-scope>Shareable</res-sharing-scope> 
      </resource-ref> 
     </session> 
</enterprise-beans> 

的persistence.xml:我在每個persistence.xml中定義(在每一個模塊)


<jta-data-source>java:comp/env/jdbc/My_db</jta-data-source> 

ibm-application-bnd.xml


<resRefBindings xmi:id="MyRef" jndiName="jdbc/My_db"> 

    ?????? Should I use resRefBindings. If yes, how? 
</resRefBindings> 

什麼我應該添加到這個文件,Websphere知道java:comp/env/jdbc/My_db?

我已經做了足夠/正確的事嗎?

目前,如果我想啓動應用程序,我得到這個錯誤:

The server cannot locate the java:comp/env/jdbc/my_db data source for the My_Modul persistence unit because it has encountered the following exception: 
Name comp/env/jdbc not found in context "java:". 

編輯:我也發現了這個錯誤的事件文件:

Caused by: <openjpa-2.1.2-SNAPSHOT-r422266:1384519 fatal user error> org.apache.openjpa.persistence.ArgumentException: A JDBC Driver or DataSource class name must be specified in the ConnectionDriverName property. 
    at org.apache.openjpa.jdbc.schema.DataSourceFactory.newDataSource(DataSourceFactory.java:76) 
    at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.createConnectionFactory(JDBCConfigurationImpl.java:844) 
    at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDBDictionaryInstance(JDBCConfigurationImpl.java:602) 
    at org.apache.openjpa.jdbc.meta.MappingRepository.endConfiguration(MappingRepository.java:1510) 
+0

您是否嘗試在jta-data-source中使用'jdbc/My_db'?我承認我沒有完全做到這一點,但我認爲無論你如何映射它,你引用它的方式將通過'res-ref-name'。 (我們總是在部署時通過WebSphere控制檯映射引用,而不是通過創建綁定文件。) – dbreaux

+1

WebSphere確實支持persistence.xml中的java:comp名稱,儘管我不相信這是由spec定義的。請顯示完整的例外情況(對於「目前我在部署時出現此錯誤」),這可能會提供額外提示,說明查找失敗的原因。 –

+0

@bkail我在事件文件中添加了一個錯誤。它對你說了什麼嗎? – Kayser

回答

1

您使用XAS綁定(resRefBindings)在WAS 7.0中受支持但被認爲已過時。建議使用XML綁定。在META-INF應該有一個名爲ibm-ejb-jar-bnd.xml與內容這樣的文件:

<ejb-jar-bnd xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://websphere.ibm.com/xml/ns/javaee" 
    xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_0.xsd" version="1.0"> 
    <session name="DataAccessObject"> 
    <resource-ref name="**datasource_ref_in_your_EJB**" binding-name="jdbc/My_db"/> 
    </session> 
</ejb-jar-bnd> 

我還以爲你已經有了一個JNDI名稱爲「jdbc/MY_DB」配置中WAS數據源。

相關問題