助けてください、これは私を夢中にさせています。私はこれを何時間も調査してきましたが、私の状況に一致する例を見つけることができませんでした.
スタンドアロン クライアントからユーザーを認証する非常に単純な Java EE アプリを作成しています。Netbeans 7.3 では、EJB モジュールを含む Java EE アプリケーション プロジェクト、アプリケーション クライアント プロジェクト、および Bean のリモート インターフェイスとエンティティ用の別の Java クラス ライブラリを使用しています。
EJB モジュールには 1 つの Bean (AccountsBean.java) があり、クラス ライブラリ プロジェクトには Bean のリモート インターフェイス (AccountsBeanRemote.java)、エンティティ (Account.java)、および persistence.xml ファイルがあります。これはプロジェクトのレイアウトの写真で、はっきりと見ることができます: http://snag.gy/EoyQa.jpg
Account インスタンスをクライアントに渡したい。
Glassfish 3.1 と Java DB (Derby) を使用しています。
AccountsTest (ここで使用したい)、sample、sun-appserv-samples (これら 2 つは Glassfish のインストール中に作成されます) の 3 つのデータベースがあります。
問題は、persistence.xml で指定したデータベース接続に関係なく、テーブルは常にサンプル データベース sun-appserv-samples に作成されることです。Bean が persistence.xml ファイルを無視しているように思えます。おそらく問題は、persistence.xml が Bean とは別のプロジェクトにあることですが、アカウント インスタンスをリモート クライアントに渡したい場合、これが IDE で実行できる唯一の方法です。
ここに私のpersistence.xmlがあります:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.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_2_0.xsd">
<persistence-unit name="LoginTest-libPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>logintest.lib.Account</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/AccountsTest"/>
<property name="javax.persistence.jdbc.password" value="app"/>
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/>
<property name="javax.persistence.jdbc.user" value="app"/>
<property name="eclipselink.ddl-generation" value="create-tables"/>
</properties>
</persistence-unit>
</persistence>
そして AccountsBean.java:
@Stateless
public class AccountsBean implements AccountsBeanRemote {
@PersistenceContext(unitName = "LoginTest-libPU")
EntityManager em;
@Override
public Account create(String name, String password) {
...
}
@Override
public void remove(int id) {
...
}
@Override
public boolean checkPassword(int id, String password) {
...
}
}
Account.java:
@Entity
@Table(name = "ACCOUNTS")
public class Account implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
private String password;
public Account() {
}
...other methods
EntityManager を正しく構成していないと思いますが、persistence.xml はどこに置くべきですか? それを EJB モジュールに入れると、エンティティーも EJB モジュールに入れる必要があり、クライアントはエンティティーにアクセスできなくなります。
前もって感謝します!