7

概要 : これは、Websphere 7 Server & JPA 1.0 & EJB & Derby Database による私の最初のチュートリアルです。

最初: データ ソース名は EJB3BANK で、ターゲット データベースは SHOP です。

2番目:これは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> 

3 番目: Itemエンティティ クラスのこの部分コード

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

4 番目: これがビジネス クラスのCartBeanです ここが問題の始まりです

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

これはエラー メッセージです。JDBC ドライバーまたは DataSource クラス名を ConnectionDriverName プロパティで指定する必要があります。この問題を解決するにはどうすればよいですか?

4

7 に答える 7

10

JNDI 名でデータ ソースを参照している場合は、openjpa.ConnectionDriverName プロパティを使用する必要はありません。

この問題の考えられる原因の 1 つは、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
于 2011-10-12T19:35:57.663 に答える
3

JPAメッセージ

ConnectionDriverName プロパティで JDBC ドライバーまたは DataSource クラス名を指定する必要があります

誤解を招くメッセージです。問題を理解するのに役立ちません。次のような方が良いでしょう:

jta-data-source は jdbc です/EJB3BANK は利用できません/到達できません

それが起こっているからです。Web プロジェクトまたは ejb プロジェクトに jpa プロジェクトを含めた可能性があります (そうでない場合、この種のプロジェクトの 1 つに直接 jpa ファセットを追加することもできます)。それを使用するには:

  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 に追加します。

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

この助けを願っています。

于 2016-04-19T09:48:33.340 に答える
2

これは JPA プロバイダーの実装上のバグだと思います。同様のエラーが発生していますが、私の場合、実際にはデータソース名を入力していません。その理由は、標準がデフォルトのデータソースの概念を許可しているためです。残念ながら、WebSphere Application Server 8.0.0.1 や RSA 8.0 ではうまく動作しません。PMRが提出されたかどうかもわかりません。

于 2011-11-10T05:53:16.727 に答える
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」のみにする必要があるのか​​ わかりません。2つのオプションを試してください。=D それは私のために働く

于 2014-08-18T23:25:36.617 に答える
0

あなたがやろうとしているのは、persistence.xmlで宣言して新しいデータソースを定義することであり、次のようなプロパティが欠落していると思います<property name="openjpa.ConnectionDriverName" value="org.apache.derby.jdbc.EmbeddedDriver" />

ただし、Websphere を使用しているため、Webspheres Administration Console (Webinterface) を介してデータソースを作成することをお勧めします。「リソース」->「JDBC 」の下で、最初にJDBC プロバイダーを作成し、Derby ドライバーを使用するように指示します。その後、このプロバイダーを使用して新しいデータソースを作成します。そこで、JNDI バインディングを定義できます。jdbc/EJB3BANKに設定します。そして、現在のpersistence.xmlは、想定どおりに機能するはずです。

于 2011-06-17T08:39:15.817 に答える