GlassFishV3 Hibernate库问题

时间:2010-07-01 16:19:54

标签: hibernate glassfish glassfish-3

我正在尝试在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吗?

3 个答案:

答案 0 :(得分:4)

如果您想将Hibernate用作JPA提供程序,我的建议是通过GlassFish v3 Update Center安装 Hibernate JPA 模块:

alt text http://a.yfrog.com/img80/5218/screenshot009z.png

另一种方法是将Hibernate EntityManager 打包到您的应用程序中。虽然没有试验这个。

答案 1 :(得分:2)

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

bin/pkg install hibernate

答案 2 :(得分: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>

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

EntityManagerFactory emf = Persistence.createEntityManagerFactory(&#34; omidashouriPU&#34;);         EntityManager em = emf.createEntityManager();     em = emf.createEntityManager();     em.getTransaction()()开始。     em.persist(YourEntityObject);     em.getTransaction()结束();

如您所知,当您使用“transaction-type =&#34; Resource_Local&#34;”时,您必须自己管理交易,这意味着,管理开启和关闭交易是我们的责任。

2- Hibernate-JPA-JTA-EJB-Gla​​ssFish-MySql: 本指南适用于在NetBeans.8.0 IDE中集成hibernate.4.3.5和EJB以及JTA和GlassFish.4.0。在net bean中创建一个web项目(注意:不要使用maven制作web项目因为Netbeans.8.0 IDE中存在错误)并将hibernate jar文件添加到项目中,其他与配置MySql和glassfish相关的设置非常简单(Just在参考资料中定义连接池和JDBC&gt; JDBC:JDBC连接池和JDBC资源,如果你搜索它,可以在网上找到指导)(注意:为了定义一个正确的JNDI,首先创建一个依赖于JNDI的临时项目在glassfish中的JPA项目,然后复制Glassfish中为此项目创建的设置,因为如果您在创建第一个连接池时,如果您在glassfish中自己创建第一个连接池,那么在glassfish中会出现一个错误。所以我在本文中没有描述然后创建persistence.xml文件,如下所示:

<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>

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

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

如您所知,当您使用“transaction-type =&#34; JTA&#34 ;,交易管理不在您手中时,意味着,管理开启和关闭交易是应用服务器(Here GlassFish)的责任。实际上,如果你在模式设计中检查你的persistence.xml,在持久性提供程序下拉框前面你可以看到现在添加了hibernate。

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