Jakarta ee 带有独立客户端的EJB忽略persistence.xml(?)
请帮帮我,这快把我逼疯了。我已经研究了好几个小时了,但找不到一个符合我的情况的例子 我正在编写一个非常简单的JavaEE应用程序,它可以从一个独立的客户端对用户进行身份验证。 在Netbeans 7.3中,我有一个Java EE应用程序项目,其中包含一个EJB模块、一个应用程序客户机项目和一个单独的Java类库,用于bean的远程接口和实体 EJB模块有一个bean(AccountsBean.java),类库项目有bean的远程接口(AccountsBeanRemote.java)、实体(Account.java)和persistence.xml文件。以下是项目布局的图片,您可以清楚地看到: 我想将帐户实例传递给客户端 我正在使用GlassFish3.1和JavaDB(Derby) 我有3个数据库:AccountsTest(我想在这里使用)、sample和sun appserv samples(这两个数据库是在Glassfish安装期间创建的) 问题在于,不管我在persistence.xml中指定了什么数据库连接,表总是在示例数据库sun appserv samples中创建的。在我看来,bean忽略了persistence.xml文件。可能问题在于persistence.xml与bean位于一个单独的项目中,但如果我想将帐户实例传递给远程客户端,这是IDE允许我这样做的唯一方式 以下是我的persistence.xml:Jakarta ee 带有独立客户端的EJB忽略persistence.xml(?),jakarta-ee,jpa,entity,jpa-2.0,persistence.xml,Jakarta Ee,Jpa,Entity,Jpa 2.0,Persistence.xml,请帮帮我,这快把我逼疯了。我已经研究了好几个小时了,但找不到一个符合我的情况的例子 我正在编写一个非常简单的JavaEE应用程序,它可以从一个独立的客户端对用户进行身份验证。 在Netbeans 7.3中,我有一个Java EE应用程序项目,其中包含一个EJB模块、一个应用程序客户机项目和一个单独的Java类库,用于bean的远程接口和实体 EJB模块有一个bean(AccountsBean.java),类库项目有bean的远程接口(AccountsBeanRemote.java)、实体(Acc
<?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>
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模块中,客户端将无法访问它们
提前谢谢 首先让我说明,我不清楚您看到这种行为的确切原因,因为考虑到您在Glassfish/JavaEE运行时所做的工作,我不熟悉预期的行为:您正在设置直接连接。相反,在JavaEE环境中,您需要“容器管理的持久性单元”[这里有一个猜测:容器将jta数据源默认为“sun appserv samples]” 因此,让Java EE为您管理连接:
networkProtocol=jdbc\\:derby
serverName=localhost
port=1527 [OR portNumber=1527; I use port, some docs say portNumber]
databaseName=AccountsTest
user=app
password=app
<?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">
<jta-data-source>jdbc/TestAccountData</jta-data-source>
<class>logintest.lib.Account</class>
<properties>
<property name="eclipselink.ddl-generation" value="create-tables"/>
</properties>
</persistence-unit>
</persistence>
jdbc/TestAccountData
logintest.lib.Account
支持JavaSE客户端 如果您还希望在Java SE中使用您的实体,那么:
将>编码到persistence.xml文件中
哦,这是有道理的。persistence.xml是由netbeans生成的,因为它位于一个单独的类库中,所以它将其视为一个JavaSE环境。因此,它建立了一个直接连接,而不是使用容器。但我还是不能让它工作。现在我在调用persist()时遇到了这个错误:
java.lang.IllegalArgumentException:Object:logintest.ejb.Account[id=0]不是一个已知的实体类型
,那么我应该把persistence.xml放在哪里呢?1.在教室里?2.在ejb模块中?3.在ejb模块中,以及在类库中使用不同的持久化单元名称?
<?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">
<jta-data-source>jdbc/TestAccountData</jta-data-source>
<class>logintest.lib.Account</class>
<properties>
<property name="eclipselink.ddl-generation" value="create-tables"/>
</properties>
</persistence-unit>
</persistence>