Как использовать TomEE с Hibernate
Я создал очень простое приложение с контекстом персистентности (hibernate как поставщик), чтобы прочитать некоторое значение из базы данных. Я использую 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. Теперь мои зависимости выглядят
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901.jdbc4</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.1.3.Final</version>
<exclusions>
<exclusion>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
</exclusion>
</exclusions>
</dependency>
Теперь я не знаю, почему...
Caused by: java.lang.ClassNotFoundException: org.hibernate.transaction.TransactionManagerLookup
но TransactionManagerLookup находится в спящем режиме. Пожалуйста, кто-нибудь может сказать мне, как должен выглядеть пом.xml для использования hibernate в TomEE?
3 ответов
попробуйте это:
добавить:
<tomee-home>/lib/antlr-2.7.7.jar
<tomee-home>/lib/dom4j-1.6.1.jar
<tomee-home>/lib/ehcache-core-2.5.1.jar
<tomee-home>/lib/ehcache-terracotta-2.5.1.jar
<tomee-home>/lib/hibernate-commons-annotations-4.0.1.Final.jar
<tomee-home>/lib/hibernate-core-4.1.4.Final.jar
<tomee-home>/lib/hibernate-ehcache-4.1.4.Final.jar
<tomee-home>/lib/hibernate-entitymanager-4.1.4.Final.jar
<tomee-home>/lib/hibernate-validator-4.3.0.Final.jar
<tomee-home>/lib/jboss-logging-3.1.0.GA.jar
<tomee-home>/lib/terracotta-toolkit-1.4-runtime-4.1.0.jar
банки ehcache могут быть необязательными, но не пробовали без них.
удалить (необязательно):
<tomee-home>/lib/asm-3.2.jar
<tomee-home>/lib/bval-core-0.4.jar
<tomee-home>/lib/bval-jsr303-0.4.jar
<tomee-home>/lib/commons-lang-2.6.jar
<tomee-home>/lib/openjpa-2.2.0.jar
<tomee-home>/lib/serp-1.13.1.jar
1. Скопируйте необходимый спящий режим .банки <tomee-home>/lib
согласно документации (http://tomee.apache.org/tomee-and-hibernate.html), достаточно следующих, и на самом деле они работали на меня:
<tomee-home>/lib/antlr-2.7.7.jar
<tomee-home>/lib/dom4j-1.6.1.jar
<tomee-home>/lib/hibernate-commons-annotations-4.0.2.Final.jar
<tomee-home>/lib/hibernate-core-4.2.21.Final.jar
<tomee-home>/lib/hibernate-entitymanager-4.2.21.Final.jar
<tomee-home>/lib/hibernate-validator-4.3.2.Final.jar
<tomee-home>/lib/javassist-3.18.1-GA.jar
<tomee-home>/lib/jboss-logging-3.1.0.GA.jar
все эти .jars
содержатся в спящем режиме ORM 4.2.X загрузить (http://hibernate.org/orm/ ), за исключением валидатора Hibernate, который является отдельной загрузкой ( http://hibernate.org/validator/ ).
2. Редактировать пом.в XML
С помощью javaee-api
артефакт maven с областью provided
теперь вы можете использовать спецификацию JPA в своем проекте. Однако, если вы раньше использовали некоторые функции, классы или аннотации Hibernate, вы все равно можете ссылаться на Hibernate в своем pom.xml
чтобы соответствовать этим зависимостям:
<!-- JPA spec (required) -->
<dependencies>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>javaee-api</artifactId>
<version>6.0-4</version>
<scope>provided</scope>
</dependency>
<!-- Hibernate specific features (only if needed) -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.2.21.Final</version>
<scope>provided</scope>
</dependency>
3. Определите подключение к базе данных
изменить <tomee-home>/conf/tomee.xml
:
<Resource id="myJtaDatabase" type="DataSource">
JdbcDriver com.mysql.jdbc.Driver
JdbcUrl jdbc:mysql://localhost:3306/my_dbname?autoReconnect=true
UserName foo
Password bar
validationQuery = SELECT 1
JtaManaged true
</Resource>
вы также можете поставить выше <Resource>...</Resource>
определение WEB-INF/resources.xml
и отправить его с приложением вместо:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<!-- Put <Resource> elements here -->
<resources>
4. Наша источник
теперь, когда вы сказали TomEE, как установить соединение, определите источник данных JTA в /src/main/java/META-INF/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="my_persistence_unit">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:openejb/Resource/myJtaDatabase</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
<!-- As many hibernate properties as you need, some examples: -->
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.format_sql" value="true" />
<!-- Drop and then re-create the database schema (don't do this in production) -->
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
</persistence>
5. Начните использовать JPA
получить EntityManager
в бобе CDI или EJB, как это:
@PersistenceContext(unitName = "my_persistence_unit")
private EntityManager em;
Конечные Ноты
спящий версии 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.х будет работать. Однако вы не можете использовать Hibernate 4.3+ (JPA 2.1 / Java EE 7), как TomEE 1.7.x и ниже поддерживают только Java EE 6. Если вы действительно хотите использовать функции Java EE 7 вместе с 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-<version>.jar
, так что вам не нужно копировать один.
да просто отбрасывая hibernate-jpa-2.1-api-1.0.0.Окончательный.банка в папке TomEE lib работала для меня.