如何在Hibernate中使用TomEE

我用持久化上下文(hibernate作为提供者)创建了非常简单的app来从数据库中读取一些值。 我将Eclipse与Maven一起使用。

首先,我明白了

Caused by: org.apache.openejb.OpenEJBException: java.lang.ClassCastException: org.hibernate.ejb.HibernatePersistence cannot be cast to javax.persistence.spi.PersistenceProvider: 

并根据这个主题http://openejb.979440.n4.nabble.com/problem-with-hibernate-persistence-provider-td980429.html我排除了hibernate-jpa-2.0-api。 现在,我的依赖项看起来

  postgresql postgresql 9.1-901.jdbc4   org.hibernate hibernate-entitymanager 4.1.3.Final   org.hibernate.javax.persistence hibernate-jpa-2.0-api    

现在,我不知道为什么……

 Caused by: java.lang.ClassNotFoundException: org.hibernate.transaction.TransactionManagerLookup 

但是TransactionManagerLookup处于hibernate核心。 请问,任何人都可以告诉我,在TomEE中如何看待pom.xml使用hibernate?

尝试这个:

加:

  • /lib/antlr-2.7.7.jar
  • /lib/dom4j-1.6.1.jar
  • /lib/ehcache-core-2.5.1.jar
  • /lib/ehcache-terracotta-2.5.1.jar
  • /lib/hibernate-commons-annotations-4.0.1.Final.jar
  • /lib/hibernate-core-4.1.4.Final.jar
  • /lib/hibernate-ehcache-4.1.4.Final.jar
  • /lib/hibernate-entitymanager-4.1.4.Final.jar
  • /lib/hibernate-validator-4.3.0.Final.jar
  • /lib/jboss-logging-3.1.0.GA.jar
  • /lib/terracotta-toolkit-1.4-runtime-4.1.0.jar

ehcache jar可能是可选的,但没有它们就没有尝试过。

删除(可选):

  • /lib/asm-3.2.jar
  • /lib/bval-core-0.4.jar
  • /lib/bval-jsr303-0.4.jar
  • /lib/commons-lang-2.6.jar
  • /lib/openjpa-2.2.0.jar
  • /lib/serp-1.13.1.jar

1.将所需的Hibernate .jars复制到/lib

根据文档( http://tomee.apache.org/tomee-and-hibernate.html ),以下内容就足够了,实际上它们对我有用:

 /lib/antlr-2.7.7.jar /lib/dom4j-1.6.1.jar /lib/hibernate-commons-annotations-4.0.2.Final.jar /lib/hibernate-core-4.2.21.Final.jar /lib/hibernate-entitymanager-4.2.21.Final.jar /lib/hibernate-validator-4.3.2.Final.jar /lib/javassist-3.18.1-GA.jar /lib/jboss-logging-3.1.0.GA.jar 

所有这些.jars都包含在Hibernate ORM 4.2.x下载( http://hibernate.org/orm/ )中,但Hibernate Validator除外,它是一个单独的下载( http://hibernate.org/validator/ ) 。

2.编辑您的pom.xml

使用provided范围的javaee-api maven工件,您现在可以在项目中使用JPA规范。 但是,如果您以前使用过一些特定于Hibernate的特性,类或注释,您仍然可以在pom.xml引用Hibernate来匹配这些依赖项:

    org.apache.openejb javaee-api 6.0-4 provided    org.hibernate hibernate-entitymanager 4.2.21.Final provided  

3.定义数据库连接

编辑/conf/tomee.xml

  JdbcDriver com.mysql.jdbc.Driver JdbcUrl jdbc:mysql://localhost:3306/my_dbname?autoReconnect=true UserName foo Password bar validationQuery = SELECT 1 JtaManaged true  

您还可以将上面的...定义放入WEB-INF/resources.xml并将其与您的应用程序一起发送:

     

4. JTA数据源

既然您告诉TomEE如何建立连接,请在/src/main/java/META-INF/persistence.xml定义JTA数据源:

    org.hibernate.ejb.HibernatePersistence java:openejb/Resource/myJtaDatabase           

5.开始使用JPA

在CDI bean或EJB中获取EntityManager ,如下所示:

 @PersistenceContext(unitName = "my_persistence_unit") private EntityManager em; 

最后的笔记

Hibernate版本4.3+

我正在使用Hibernate 4.2.21(JPA 2.0,Java EE 6)和TomEE 1.7.2。 任何TomEE 1.7.x,1.6.x和1.5.x都可以使用。 但是,您不能使用Hibernate 4.3+(JPA 2.1 / Java EE 7),因为TomEE 1.7.x及更低版本仅支持Java EE 6.如果您确实希望将Java EE 7function与TomEE一起使用,则此博客文章可能会有所帮助: http : //rmannibucau.wordpress.com/2013/07/19/little-tip-to-help-you-to-test-javaee-7-in-tomee-with-tomee-maven-plugin/

TomEE 1.5.x

TomEE 1.5.x已经包含了一个javassist-.jar ,因此您不必复制一个。

是的只是将hibernate-jpa-2.1-api-1.0.0.Final.jar放入为我工作的TomEE lib文件夹中。