Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 必须在ConnectionDriverName属性“中指定JDBC驱动程序或数据源类名”;如何解决;_Jpa_Jakarta Ee_Ejb 3.0_Websphere 7 - Fatal编程技术网

Jpa 必须在ConnectionDriverName属性“中指定JDBC驱动程序或数据源类名”;如何解决;

Jpa 必须在ConnectionDriverName属性“中指定JDBC驱动程序或数据源类名”;如何解决;,jpa,jakarta-ee,ejb-3.0,websphere-7,Jpa,Jakarta Ee,Ejb 3.0,Websphere 7,概述:这是WebSphere7Server&JPA1.0&EJB&Derby数据库的第一个教程 第一:我的数据源名是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.or

概述:这是WebSphere7Server&JPA1.0&EJB&Derby数据库的第一个教程

第一:我的数据源名是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> 
第四:这是商务类的CartBean,这是问题的开始

@Stateful
CartBean implements Cart{
....
....
public List<Item> getItems() {      
javax.persistence.Query query = em.createNamedQuery("getItem");//the problem here
return query.getResultList();
}
}
@Stateful
CartBean实现了Cart{
....
....
公共列表getItems(){
javax.persistence.Query Query=em.createNamedQuery(“getItem”);//这里的问题
返回query.getResultList();
}
}
这是错误消息:必须在ConnectionDriverName属性中指定JDBC驱动程序或数据源类名。
如何解决这个问题?

我认为,您要做的是通过在persistence.xml中声明一个新的数据源来定义它,而它缺少一个类似


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

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

此问题的一个可能原因是persistence.xml位于错误的位置。该文件必须位于[root of class context]/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文件中的library.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

我认为这是JPA提供者实现中的一个bug。我得到了一个类似的错误,但在我的例子中,我实际上没有输入数据源名称。原因是标准允许默认数据源的概念。不幸的是,它不能很好地与WebSphereApplicationServer8.0.0.1或RSA 8.0配合使用。也不确定是否提交了PMR。

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

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

<jta-data-source>java:comp/env/jdbc/EJB3BANK</jta-data-source>
移动到 src/META-INF/persistence.xml 修复了我的问题,因为Eclipse现在自动将其移动到构建目录

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

试试以下方法:

 <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
jdbc/EJB3BANK
jdbc/EJB3BANK

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

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

jpa消息

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

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

(foo.war)
WEB-INF/classes/META-INF/persistence.xml
WEB-INF/classes/com/foo123/jpa/Project.class
WEB-INF/web.xml
index.jsp
jta数据源为jdbc/EJB3BANK不可用/无法访问

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

  • 更改persistence.xml(AnyJpaProject/src/META-INF/persistence.xml)

    java:comp/env/jdbc/EJB3BANK
    
  • 确保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> 
    
    
    jdbc/EJB3BANK
    javax.sql.DataSource
    容器
    可分享
    
  • 添加到ibm-ejb-jar-bnd.xml/ibm-web-bnd.xml中:


  • 希望获得此帮助。

    显示的错误消息表示数据源不可用或未在WebSphere 7中正确配置。你们验证了吗?@Vinet我在RAD中创建了名为EJB3BANK的数据源,它工作正常。。。但如果我理解正确,您的意思是在WebSphere的管理控制台中配置EJB3BANK数据源吗?是的,这就是我的意思。它在运行时可用吗?请参阅。显示完整堆栈跟踪可能对某些人有用。这是我的问题。谢谢@eis!也许@MineIsMine可以将这个答案标记为正确的,似乎就是这样。