5

我正在尝试在 GlassFishv3 服务器中部署 JAR 文件。这会导致错误:

com.sun.enterprise.admin.cli.CommandException: 
remote failure: 
Exception while preparing the app : 
java.lang.RuntimeException:
java.lang.ClassNotFoundException: 
org.hibernate.ejb.HibernatePersistence

我认为缺少类“org.hibernate.ejb.HibernatePersistence”并尝试将包含它的库添加到文件夹“glassfish\domains\domain1\lib”中。我从我的 NetBeans 文件夹“NetBeans 6.9\java\modules\ext\hibernate”中取出它们。结果是,玻璃鱼不再开始了。它会超时。最后的日志条目是

INFO|glassfish3.0.1|javax.enterprise.system.std.com.sun.enterprise.v3.services.impl|_ThreadID=21;_ThreadName=Thread-1;|{felix.fileinstall.poll (ms) = 5000, felix.fileinstall.dir = C:\glassfishv301\glassfish\domains\domain1\autodeploy\bundles, felix.fileinstall.debug = 1, felix.fileinstall.bundles.new.start = true, felix.fileinstall.tmpdir = C:\DOKUME~1\me\LOKALE~1\Temp\fileinstall-8074722487477598658, felix.fileinstall.filter = null}|#]

该条目中提到的 autodeploy\bundles 文件夹是空的。

知道如何移动formard吗?

4

3 回答 3

4

如果您想使用 Hibernate 作为 JPA 提供程序,我的建议是通过GlassFish v3 更新中心安装Hibernate JPA模块:

替代文字 http://a.yfrog.com/img80/5218/screenshot009z.png

另一种方法是将 Hibernate EntityManager 打包您的应用程序中。不过没试过这个。

于 2010-07-01T18:35:51.227 回答
2

为了记录,添加 Hibernate 包的命令行版本是:

bin/pkg install hibernate
于 2010-07-03T08:38:51.900 回答
0

集成 Hibernate-JTA-JPA-EJB-Gla​​ssFish-MySQL:1- Hibernate-JPA-EJB-Gla​​ssFish-MySql:本指南用于在 NetBeans.8.0 IDE 中集成 hibernate.4.3.5 和 EJB 和 GlassFish.4.0。在net beans中创建一个web项目,并在项目中添加hibernate jar文件,其他配置MySql和glassfish相关的设置非常简单,本文不再赘述,然后创建persistence.xml文件如下:

<persistence-unit name="omidashouriPU" transaction-type="Resource_Local">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
            <property name="hibernate.archive.autodetection" value="class"/>
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/YourSchemaName"/>
            <property name="hibernate.connection.username" value="root"/>
            <property name="hibernate.connection.password" value="yourpassword"/>
            <property name="hibernate.show_sql" value="true"/>
    </properties>
</persistence-unit>

在用于创建 EntityManager 的 EJB 类(使用 @Stateless 注释的类)中,使用以下语法:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("omidashouriPU"); EntityManager em = emf.createEntityManager(); em = emf.createEntityManager(); em.getTransaction().begin(); em.persist(YourEntityObject); em.getTransaction().end();

如您所知,当您使用“transaction-type="Resource_Local" 时,您必须自己管理事务,也就是说,管理事务的打开和关闭是我们的责任。

2- Hibernate-JPA-JTA-EJB-Gla​​ssFish-MySql:本指南用于在 NetBeans.8.0 IDE 中集成 hibernate.4.3.5 和 EJB 以及 JTA 和 GlassFish.4.0。在net beans中创建一个web项目(注意:不要用maven做web项目,因为Netbeans.8.0 IDE有bug)并在项目中添加hibernate jar文件,其他与配置MySql和glassfish相关的设置很简单(只需在 Resources>JDBC:JDBC Connection Pools & JDBC Resources 中定义 Connection Pool 和 JDBC,如果您搜索它,相关指南在 Web 中)(注意:要定义正确的 JNDI,首先创建一个依赖 JNDI 的临时项目,如 JPA glassfish项目,

<persistence-unit name="omidashouriPU" transaction-type="JTA">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>jdbc/yourJNDI (which you defined in glassfish) </jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
            <property name="hibernate.archive.autodetection" value="class"/>
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.SunOneJtaPlatform"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/YourSchemaName"/>
            <property name="hibernate.connection.username" value="root"/>
            <property name="hibernate.connection.password" value="yourpassword"/>
            <property name="hibernate.show_sql" value="true"/>
    </properties>
  </persistence-unit>

在用于创建 EntityManager 的 EJB 类(使用 @Stateless 注释的类)中,使用以下语法:

@PersistenceContext(unitName = " omidashouriPU ")
EntityManager em;
em.persist(YourEntityObject);

正如您所知道的,当您使用“transaction-type="JTA" 时,事务管理不在您身上,也就是说,管理打开和关闭事务是应用程序服务器(此处为 GlassFish)的责任。事实上,如果您在模式设计中检查您的 persistence.xml,在持久性提供程序下拉框前面,您可以看到现在添加了休眠。

亲爱的读者,我花了 3 天的时间来解决这个问题,请将您的经验添加到本文中以完成它,如有任何问题,您可以发送电子邮件至 omidashouri@gmail.com 给我。

于 2014-07-13T09:17:08.140 回答