Jak użyć @PersistenceContext?

0

W tej chwili używam i działa:
EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "test" );
EntityManager entitymanager = emfactory.createEntityManager( );

Chciałbym zamiast tego użyć
@PersistenceContext

Ale nie wiem jak. Poniżej pom i bład jaki wyświetla mi się przy użyciu
@PersistenceContext
EntityManager em;

pom

 <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>


        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7.0</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-server</artifactId>
            <version>1.8</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-client</artifactId>
            <version>2.23.1</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.37</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.0-api</artifactId>
            <version>1.0.1.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.1.0.Final</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.2.4.Final</version>
            <scope>provided</scope>
        </dependency>

        <!-- for JPA, use hibernate-entitymanager instead of hibernate-core -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.1.0.Final</version>
            <scope>provided</scope>
        </dependency> 
21:11:02,008 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4) MSC000001: Failed to start service jboss.deployment.unit."test.war".INSTALL: org.jboss.msc.service.StartException in service jboss.deployment.unit."test.war".INSTALL: WFLYSRV0153: Failed to process phase INSTALL of deployment "test.war"
	at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:154)
0

Obiecuje od tej chwili banować każdego kto nie potrafi skopiować CAŁEGO błędu i wycina z niego NAJWAŻNIEJSZĄ część.

0

@Shalom Błąd był dlatego że w pliku persistence.xml tranzakcje miałem ustawione na RESOURCE_LOCAL. Kiedy używać JTA a kiedy RESOURCE_LOCAL i co wtedy @PersistenceContext ?

0

JTA używasz jak masz serwer aplikacyjny JEE (np, GlassFish/Payara). RESOURCE_LOCAL często używa się w Springu, jak używasz np. z transakcji Hibernate (masz innego dostawce na Tomcacie). Spring i Tomcat to najcześciej RESOURCE_LOCAL do ustawienia. Ogólnie JTA ma większe możlwości (np. transakcje rozproszone, z których sam nigdy nie korzystałem), ale nie zawsze jest dostępne.

Jeśli chcesz ręcznie zarządzać transakcjami bez serwera aplikacyjnego: chcesz użyć RESOURCE_LOCAL. Jak masz serwer aplikacyjny to oczywiście nie chcesz ręcznie zarządzać transakcjami.

0

@margor90
Możesz mi napisać jak skonfigurować persistence.xml korzystam z WildFly

    <persistence-unit name="test" transaction-type="JTA" >
        <jta-data-source>java:/datasources/testDB</jta-data-source>
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <class>com.test.model.User</class>

        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/testDB" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="test" />

            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="create-drop" />
        </properties>

    </persistence-unit> 
0

A jak bym chciał użyć persitence.xml?

1 użytkowników online, w tym zalogowanych: 0, gości: 1