服务器找不到 java:comp/env/jdbc/my_db 数据源...在上下文“java:”中找不到名称 comp/env/jdbc

Posted

技术标签:

【中文标题】服务器找不到 java:comp/env/jdbc/my_db 数据源...在上下文“java:”中找不到名称 comp/env/jdbc【英文标题】:The server cannot locate the java:comp/env/jdbc/my_db data source ... Name comp/env/jdbc not found in context "java:" 【发布时间】:2013-08-02 09:36:12 【问题描述】:

我有一个包含许多模块的 Java EE 应用程序。我试图能够进行间接 JNDI 查找。

我遵循了这些步骤:

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)

【问题讨论】:

您是否尝试在 jta-data-source 中仅使用 jdbc/My_db?我承认我并没有完全做到这一点,但我认为无论你映射它,你引用它的方式都是通过res-ref-name。 (我们总是在部署时通过 WebSphere 控制台而不是通过创建绑定文件来映射我们的引用。) WebSphere 确实支持persistence.xml 中的java:comp 名称,尽管我不相信规范中有定义。请显示完整的异常(对于“当前我在部署时遇到此错误”),这可能会提供有关查找失败原因的其他提示。 @bkail 我在事件文件中添加了一个错误。它对你说了什么吗? @dbreaux 你能提供一个样本如何工作 @Kayser 是的,错误信息通常意味着 DataSource 查找失败;该错误应以 CWWJP0013E 开头。 【参考方案1】:

您使用在 WAS 7.0 中受支持但被认为已过时的 XMI 绑定 (resRefBindings)。建议使用 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>

我还假设您已经在 WAS 中配置了 JNDI 名称为“jdbc/My_db”的数据源。

【讨论】:

以上是关于服务器找不到 java:comp/env/jdbc/my_db 数据源...在上下文“java:”中找不到名称 comp/env/jdbc的主要内容,如果未能解决你的问题,请参考以下文章

理解JNDI中 java comp/env/jdbc/datasource 与 jdbc/datasource 的不同之

JNDI在Tomcat中的配置

WebSphere中配置的数据源在Web应用中引用的写法

启动独立 JNDI 服务器(并注册一些资源)的简单方法

JNDI数据源的使用

@Resource 注解在 Tomcat 10.0.10 中不起作用