我正在使用Eclipse Juno,Glassfish 3.1.2和MySQL 5.1。
我正在构建一个简单的EJB& JSF应用程序。我创建了以下eclipse项目:
现在它只是一个骨架,但我可以部署应用程序并查看index.jsp
接下来,我尝试将以下内容添加到UserDAO ...
@PersistenceContext
EntityManager em;
但是当应用尝试重新发布时,它会给我错误:
'Publishing to GlassFish 3.1.2 at localhost...' has encountered a problem. cannot Deploy appEar
没有其他细节。
当我删除两行@PersistenceContent代码时,应用程序再次部署。
此外,appJPA项目中的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="appJPA">
<class>app.model.User</class>
</persistence-unit>
</persistence>
请帮忙......我错过了什么?我很困惑。
答案 0 :(得分:2)
你的persistence.xml不完整,你需要提供Connection属性来指定提供者,连接哪个DB等等
下面是使用hibernate作为JPA提供的示例
<persistence-unit name="educationPU"
transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.coe.jpa.StudentProfile</class>
<properties>
<property name="hibernate.connection.driver_class"
value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.url"
value="jdbc:mysql://localhost:3306/COE" />
<property name="hibernate.connection.username" value="root" />
<property name="show_sql" value="true" />
<property name="dialect" value="org.hibernate.dialect.MySQLDialect" />
</properties>
</persistence-unit>
并且还有一个更通用的
我对glassfish,JPA等都很陌生,我在设置它时遇到了很多问题。我打算做的是一个带有持久后端的简单RESTful服务。我使用glassfish3作为应用程序服务器,并已使用jersey-library部署了一个简单的REST服务。现在我想通过JPA提供对数据库的访问。 Glassfish附带JavaDB / derby和EclipseLink,是吗?所以,我想用它: - )
我在META-INF中创建了一个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="myPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDataSource" /> <!-- org.apache.derby.jdbc.EmbeddedDriver -->
<property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/sample;create=true" />
<property name="javax.persistence.jdbc.user" value="APP" />
<property name="javax.persistence.jdbc.password" value="APP" />
<property name="eclipselink.ddl-generation" value="create-tables" />
</properties>
</persistence-unit>
</persistence>
答案 1 :(得分:1)
我不使用玻璃鱼。但我认为原因是你没有在persistence.xml中指定任何数据源。你应该用它来做,你可以使用jndi或其他方式。第二,你应该在spring context xml文件中定义entityManagerFactory bean。
答案 2 :(得分:1)
您是否在glasfish中添加了数据源?您还需要添加mysql jdbc驱动程序。在Java EE中,它是持久性容器(在服务器内部),它将为您创建和管理数据源。