How to use TomEE with Hibernate

前端 未结 3 1777
鱼传尺愫
鱼传尺愫 2020-12-01 11:36

I have created very simple app with persistence context (hibernate as provider) to read some value from database. I use Eclipse with Maven.

First, I get



        
相关标签:
3条回答
  • 2020-12-01 11:55

    1. Copy the required Hibernate .jars to <tomee-home>/lib

    According to the documentation ( http://tomee.apache.org/tomee-and-hibernate.html ), the following ones are sufficient and in fact they worked for me:

    <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
    

    All these .jars are contained in the Hibernate ORM 4.2.x download ( http://hibernate.org/orm/ ), except for the Hibernate Validator, which is a separate download ( http://hibernate.org/validator/ ).

    2. Edit your pom.xml

    Using the javaee-api maven artifact with a scope of provided you can now use the JPA specification in your project. However, if you have been using some Hibernate specific features, classes or annotations before, you can still refer to Hibernate in your pom.xml to match those dependencies:

    <!-- 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. Define your database connection

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

    You can also put the above <Resource>...</Resource> definition into WEB-INF/resources.xml and ship it with your application instead:

    <?xml version="1.0" encoding="UTF-8"?>
    <resources>
        <!-- Put <Resource> elements here -->
    <resources>
    

    4. JTA Datasource

    Now that you told TomEE how to establish a connection, define a JTA datasource in /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. Start using JPA

    Obtain an EntityManager in a CDI bean or EJB like this:

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

    Final Notes

    Hibernate versions 4.3+

    I am using Hibernate 4.2.21 (JPA 2.0, Java EE 6) along with TomEE 1.7.2. Any TomEE 1.7.x, 1.6.x and 1.5.x will work. However, you cannot use Hibernate 4.3+ (JPA 2.1 / Java EE 7), as TomEE 1.7.x and below only support Java EE 6. If you really want to use Java EE 7 features along with TomEE, this blog post might be helpful: 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 already includes a javassist-<version>.jar, so you don't have to copy one.

    0 讨论(0)
  • 2020-12-01 12:01

    Try this:

    Add:

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

    The ehcache jars might be optional, but haven't tried without them.

    Remove (optional):

    • <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
    0 讨论(0)
  • 2020-12-01 12:04

    yes just dropping the hibernate-jpa-2.1-api-1.0.0.Final.jar into the TomEE lib folder worked for me.

    0 讨论(0)
提交回复
热议问题