概述:这是我的第一篇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类名。 如何解决这个问题?
答案 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连接,最好的办法使用它是:
更改你的persistence.xml(AnyJpaProject / src / META-INF / persistence.xml)
<jta-data-source>java:comp/env/jdbc/EJB3BANK</jta-data-source>
确保您的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>
在ibm-ejb-jar-bnd.xml / ibm-web-bnd.xml中添加:
<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它适用于我的