0

我正在使用 Eclipse Juno、Glassfish 3.1.2 和 MySQL 5.1。

我正在构建一个简单的 EJB & JSF 应用程序。我创建了以下 Eclipse 项目:

  • appEAR <-- EAR 文件
  • appEJB <-- 包含 UserService.java EJB
  • appJPA <-- 包含 UserDAO.java EJB 和 User.java 对象
  • appWeb <-- 包含 index.jsp

它现在只是一个骨架,但我可以部署应用程序并查看 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>

请帮助......我错过了什么?我比较卡。

4

3 回答 3

1

您的 persistence.xml 不完整,您需要提供 Connection 属性来指定提供者、连接哪个 DB 等

这是一个使用休眠作为 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>
于 2013-03-05T08:48:29.153 回答
0

我不使用玻璃鱼。但我认为原因是您没有在persistence.xml 中指定任何数据源。您应该在其中执行此操作,您可以使用 jndi 或其他方式。其次,您应该在 spring 上下文 xml 文件中定义 entityManagerFactory bean。

于 2013-03-05T06:44:04.123 回答
0

您是否在 glasfish 中添加了数据源?您还需要添加 mysql jdbc 驱动程序。在 Java EE 中,持久化容器(在服务器内部)将为您创建和管理数据源。

http://www.albeesonline.com/blog/2008/08/06/creating-and-configuring-a-mysql-datasource-in-glassfish-application-server/

于 2013-03-05T08:28:17.710 回答