必须在ConnectionDriverName属性“如何解决它?”中指定JDBC驱动程序或DataSource类名。

时间:2011-06-04 14:31:55

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

概述:这是我的第一篇Websphere 7 Server& amp; JPA 1.0& EJB&德比数据库。

  

首先:我的数据源名称是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驱动程序或DataSource类名。 如何解决这个问题?

7 个答案:

答案 0 :(得分:9)

如果您通过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

答案 1 :(得分:3)

jpa消息

  

必须在中指定JDBC驱动程序或DataSource类名   ConnectionDriverName属性

是一种误导性的消息。没有帮助理解这个问题。这样会更好:

  

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

因为它正在发生的事情。也许你已经在web或ejb项目中包含了一个jpa项目(或者可能没有,你可以将jpa facets直接添加到这种项目之一)但是,一旦你在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中添加:

  4. <resource-ref name="jdbc/EJB3BAN" binding-name="jdbc/EJB3BAN">

    希望得到这个帮助。

答案 2 :(得分:2)

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

答案 3 :(得分:2)

只是添加到eis的答案(道歉,没有足够的代表评论):

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

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

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

答案 4 :(得分:1)

在应用程序服务器中添加datasoruce之后,无法在persistence.xml中使用数据源名称的错误。 但是,如果您在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"/>

答案 5 :(得分:0)

我认为,您要做的是通过在persistence.xml中声明它并且缺少像<property name="openjpa.ConnectionDriverName" value="org.apache.derby.jdbc.EmbeddedDriver" />

这样的属性来定义新的数据源。

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

答案 6 :(得分:0)

试试这个男人:

 <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它适用于我的