Implementing EntityManagerFactory using @PersistenceUnit in Jersey with Wildfly

I am trying to introduce an EntityManagerFactory using @PersistenceUnit, but it is always null.

I think my persistence.xml is fine, as I can get EntityManager with this code:

EntityManager em = Persistence.createEntityManagerFactory("myPersistenceUnit").createEntityManager();

So, I would like to know that I am doing something wrong, or if this is not possible when using Jersey (2.23) and Wildfly 10 (JBoss EAP 7).

Here is what I have done so far:

  • Created jersey-quickstart-webapp maven project on eclipse;
  • The following dependencies have been added to my pom.xml:

    <dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-api</artifactId>
      <version>7.0</version>
    </dependency>
    <dependency>
      <groupId>org.hibernate.javax.persistence</groupId>
      <artifactId>hibernate-jpa-2.1-api</artifactId>
      <version>1.0.0.Final</version>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-entitymanager</artifactId>
      <version>5.2.2.Final</version>
    </dependency>
    <dependency>
      <groupId>com.hynnet</groupId>
      <artifactId>oracle-driver-ojdbc6</artifactId>
      <version>12.1.0.1</version>
    </dependency>
    
  • The persistence.xml file is created:

    <persistence-unit name="myPersistenceUnit"
      transaction-type="RESOURCE_LOCAL">
      <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
      <!-- All persistence classes must be listed -->
      <class>com.mps.classes.TermosPesquisados</class>
      <properties>
        <!-- Provider-specific connection properties -->
        <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver" />
        <property name="javax.persistence.jdbc.url" value="JDBC_URL" />
        <property name="javax.persistence.jdbc.user" value="USER" />
        <property name="javax.persistence.jdbc.password" value="PASSWORD" />
        <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
        <property name="hibernate.show_sql" value="false" />
        <property name="hibernate.connection.release_mode" value="after_transaction" />
        <property name="hibernate.connection.isolation" value="2" />
      </properties>
    </persistence-unit>
    
  • Changed the value of MyResource.java:

    @ManagedBean
    @Path("myresource")
    public class MyResource {
    
      @PersistenceUnit(unitName= "myPersistenceUnit")
      private EntityManagerFactory emf;
    
      @GET
      @Produces(MediaType.TEXT_PLAIN)
      public String getIt() {
        if(emf == null)
          return "emf is null";
        return "emf is not null";
      }
    }
    
  • Added empty beans.xml (not sure if this is necessary);

+4
source share
3

, Resteasy. , 2 :

  • Restaasy JBoss/Wildfly ( , , , );
  • Resteasy;

, , .

, web.xml, :

<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
...
<servlet-mapping>
  <servlet-name>Jersey Web Application</servlet-name>
  <url-pattern>/webapi/*</url-pattern>
</servlet-mapping>

:

<servlet-name>javax.ws.rs.core.Application</servlet-name>
...
<servlet-mapping>
  <servlet-name>javax.ws.rs.core.Application</servlet-name>
  <url-pattern>/webapi/*</url-pattern>
</servlet-mapping>

* - , Application.

* beans.xml .

@Stateless, EntityManager:

@Path("myresource")
@Stateless
public class MyResource {

  @PersistenceContext(unitName="myPersistenceUnit")
  private EntityManager em; 
...

EntityManager , - JBoss h2 in-memmory (ExampleDS). , oracle JBoss (OracleDS) persistence.xml OracleDS JTA "RESOURCE_LOCAL":

<persistence-unit name="myPersistenceUnit" transaction-type="JTA">
  <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
  <jta-data-source>java:jboss/datasources/OracleDS</jta-data-source>
...

EntityManager CRUD.

+1

@ManagedBean, JSF , REST.

, ( , beans.xml , CDI, @Stateless)

+1

, Entity manager :

 @PersistenceUnit(unitName= "myPersistenceUnit")
   private EntityManager em;
0

Source: https://habr.com/ru/post/1653696/


All Articles