【问题标题】:A JDBC Driver or DataSource class name must be specified in the ConnectionDriverName property "How to solve it?"必须在 ConnectionDriverName 属性“如何解决它?”中指定 JDBC 驱动程序或数据源类名称。
【发布时间】:2011-09-08 09:38:29
【问题描述】:

概述:这是我的第一篇由 Websphere 7 Server & JPA 1.0 & EJB & Derby Database 编写的教程。

首先:我的数据源名称是 EJB3BANK,我的目标数据库是 SHOP。

第二:这是 persistence.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="ShopJPA" transaction-type="JTA">
    <jta-data-source>jdbc/EJB3BANK</jta-data-source>
    <non-jta-data-source>jdbc/EJB3BANK</non-jta-data-source>
    <properties>
        <property name="openjpa.jdbc.Schema" value="SHOP" />
    </properties>
</persistence-unit>
</persistence> 

第三:Item实体类

的部分代码
@Entity
@Table(schema = "SHOP", name = "ITEM")
@NamedQuery(name = "getItem", query = "SELECT i FROM Item i")
public class Item{...}

第四:这里是业务类 CartBean 这里是问题的开始

@Stateful
CartBean implements Cart{
....
....
public List<Item> getItems() {      
javax.persistence.Query query = em.createNamedQuery("getItem");//the problem here
return query.getResultList();
}
}

这是错误消息:必须在 ConnectionDriverName 属性中指定 JDBC 驱动程序或数据源类名。 如何解决这个问题?

【问题讨论】:

  • 显示的错误信息表明数据源不可用或在WebSphere 7中没有正确配置。您验证了吗?
  • @Vineet 我在 RAD 中创建了名为 EJB3BANK 的数据源,它工作正常……但如果我理解正确,你的意思是在 WebSphere 的管理控制台中配置 EJB3BANK 数据源吗??
  • 是的,我就是这个意思。它在运行时可用吗?见this related question at the developerWorks forum
  • 显示完整的堆栈跟踪可能对某些人有用。

标签: jpa jakarta-ee ejb-3.0 websphere-7


【解决方案1】:

jpa 消息

必须在 ConnectionDriverName 属性

是一个误导性消息。无助于理解问题。最好是这样的:

jta-data-source 是 jdbc/EJB3BANK 不可用/无法访问

因为这就是正在发生的事情。也许您已经在 web 或 ejb 项目中包含了 jpa 项目(或者可能没有,您可以将 jpa 方面直接添加到此类项目之一)但是,一旦您在 webshpere 控制台上创建了 jdbc 连接,这是最好的方法使用它是:

  1. 更改您的 persistence.xml (AnyJpaProject/src/META-INF/persistence.xml)

    <jta-data-source>java:comp/env/jdbc/EJB3BANK</jta-data-source>
    
  2. 确保您的 web.xml/ejb-jar.xml 具有以下内容:

    <resource-ref>
        <description></description>
        <res-ref-name>jdbc/EJB3BANK</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref> 
    
  3. 添加 ibm-ejb-jar-bnd.xml/ibm-web-bnd.xml:

&lt;resource-ref name="jdbc/EJB3BAN" binding-name="jdbc/EJB3BAN"&gt;

希望对您有所帮助。

【讨论】:

  • 也许@MineIsMine 可以将此答案标记为正确,这似乎是它。
【解决方案2】:

在应用服务器中添加datasoruce后无法使用persistence.xml中的datasource名称是一个bug。 但是,如果您在 persistence.xml 中添加如下属性,它将起作用。

    <property name="openjpa.ConnectionURL" value="DB URL"/>
    <property name="openjpa.ConnectionDriverName" value="Driver Name"/>
    <property name="openjpa.ConnectionUserName" value="userid"/>
    <property name="openjpa.ConnectionPassword" value="password"/>

【讨论】:

    【解决方案3】:

    试试这个男人:

     <persistence-unit name="ShopJPA" transaction-type="JTA">
         <jta-data-source>jdbc/EJB3BANK</jta-data-source>
         <non-jta-data-source>jdbc/EJB3BANK</non-jta-data-source>
         <class>jdbc/EJB3BANK</class>
         <properties>
             <property name="openjpa.jdbc.Schema" value="SHOP" />
         </properties>
     </persistence-unit>
     </persistence> 
    

    我不知道节点类中是否必须是“jdbc/EJB3BANK”还是只有“EJB3BANK”,试试这两个选项。 =D 它适用于我的

    【讨论】:

      【解决方案4】:

      只是为了补充 eis 的答案(抱歉,没有足够的代表发表评论):

      使用 Eclipse,我的 persistence.xml 最初位于根 src 文件夹中 src/persistence.xml

      将其移至 src/META-INF/persistence.xml 修复了我的问题,因为 Eclipse 现在自动将其移动到构建目录。

      虽然不是所有的 ORM(对象关系映射)API 都这样工作,但我很确定使用 Hibernate 我的 hibernate.cfg.xml (persistence.xml) 总是直接在“src”文件夹中。

      【讨论】:

        【解决方案5】:

        我认为这是 JPA 提供程序实现的一个错误。我遇到了类似的错误,但在我的情况下,我实际上没有输入数据源名称。原因是标准允许默认数据源的概念。不幸的是,它不适用于 WebSphere Application Server 8.0.0.1 或 RSA 8.0。也不确定是否已提交 PMR。

        【讨论】:

          【解决方案6】:

          如果您通过 JNDI 名称引用数据源,则不需要使用 openjpa.ConnectionDriverName 属性。

          此问题的一个可能原因是persistence.xml 位于错误的位置。该文件必须位于 [类上下文的根目录]/META-INF。对于 .war 文件,内容应类似于:

          (foo.war)
          WEB-INF/classes/META-INF/persistence.xml
          WEB-INF/classes/com/foo123/jpa/Project.class
          WEB-INF/web.xml
          index.jsp
          

          对于打包在 .war 文件中的库 .jar 文件:

          (foo.war)
          WEB-INF/lib/my-library.jar
          WEB-INF/web.xml
          index.jsp
          
          (my-library.jar)
          META-INF/persistence.xml
          com/foo123/jpa/Project.class
          

          【讨论】:

          • 这是我的问题。谢谢@eis!
          【解决方案7】:

          我认为,您要做的是通过在 persistence.xml 中声明来定义一个新的数据源,并且它缺少像 &lt;property name="openjpa.ConnectionDriverName" value="org.apache.derby.jdbc.EmbeddedDriver" /&gt; 这样的属性

          但是,当您使用 Websphere 时,我建议您通过 Webspheres 管理控制台(Web 界面)创建数据源。在 Resources->JDBC 下,您将首先创建一个 JDBC Provider 并告诉它使用 Derby 驱动程序。之后,您将使用此提供程序创建一个新数据源。在那里您可以定义 JNDI 绑定。将其设置为 jdbc/EJB3BANK。你当前的 persistence.xml 应该可以正常工作。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-04-24
            • 2021-05-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-05-10
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多