EntityManager всегда равен NULL в REST-сервисе, используя библиотеку resteasy, jboss seam 2.1.1 и JBoss AS 4.2.2 - PullRequest
0 голосов
/ 23 января 2019

У меня проблема с веб-приложением, разработанным с использованием jboss seam 2.1.1 и использующим JBoss AS 4.2.2 в качестве сервера приложений.Я пытаюсь предоставить REST-сервис, используя библиотеку resteasy-jaxrs-2.1.0.GA, jboss-seam-resteasy-2.3.1.Final и jaxrs-api-2.1.0.GA, и получается, что каждый раз, когда япри использовании сервиса, entityManager имеет значение NULL, ниже я добавлю каждую из конфигураций и классов:

Я создал beans.xml в WEB-INF, моя конфигурация в web.xml в WEB-INF:

<!-- Auto scan REST service -->
<context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>true</param-value>
</context-param>

<!-- this need same with resteasy servlet url-pattern -->
<context-param>
    <param-name>resteasy.servlet.mapping.prefix</param-name>
    <param-value>/rest</param-value>
</context-param>

<context-param>
    <param-name>resteasy.resources</param-name>
    <param-value>paquetea.paqueteb.ClaseA</param-value>
</context-param>

<listener>
     <listener-class>
         org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
     </listener-class>
</listener>

<servlet>
    <servlet-name>resteasy-servlet</servlet-name>
    <servlet-class>
        org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
    </servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>paquetea.JaxRsActivator</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>resteasy-servlet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

Класс JaxRsActivator следующий:

package paquetea;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/rest")
public class JaxRsActivator extends Application {



}

Это класс со службой, в которой находятся конечные точки, с именами, измененными, потому что я могуне выставлять реальный класс:

package paquetea.paqueteb;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.jboss.seam.annotations.Name;



@Name("claseA")
@ApplicationPath("/rest")
@Path("/clasea")
@Stateless
public class ClaseA {


    @PersistenceContext(unitName = "contexto")  
    EntityManager entityManager;




    @GET
    @Path("/ejemplo/{fecha}")
    @Produces(MediaType.APPLICATION_JSON)
    public String test(@PathParam("fecha") String fecha)
    {       
        try {
            DateFormat formatter = new SimpleDateFormat("yyyy-MM-d");
            Date date = formatter.parse(fecha);

            EntityManager em = this.entityManager; //Esto es para comprobar si el entityManager no está null, y siempre que se accede está NULL.
            /*Aqui se consulta una logica en otra clase que tambien tiene un entityManage inyectado y siempre es NULL*/
        } catch (Exception e) {

        }

        return "la respuesta";
    }




 }

Это конфигурация в component.xml в WEB-INF контекста постоянства, так что entityManager создается автоматически при запуске приложения, в остальных случаях это работает правильновеб-приложения проблема возникает только в службе REST:

<persistence:managed-persistence-context name="entityManager"
                                 auto-create="true"
                  persistence-unit-jndi-name="java:/ejemploEntityManagerFactory"/>

И это конфигурация моего модуля PersistenceUnit:

<persistence-unit name="contexto">
  <provider>org.hibernate.ejb.HibernatePersistence</provider>
  <jta-data-source>java:/ejemploDatasource</jta-data-source>
  <properties>
     <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
     <property name="hibernate.hbm2ddl.auto" value="validate" />
     <property name="hibernate.show_sql" value="true"/>
     <property name="hibernate.format_sql" value="true"/>

     <property name="hibernate.cache.use_second_level_cache" value="true"/>
     <property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.EhCacheProvider"/>

     <property name="jboss.entity.manager.factory.jndi.name" value="java:/ejemploEntityManagerFactory"/>

     <property name="hibernate.ejb.interceptor" value="paquetex.TimerInterceptor" />
  </properties>

надеюсь на вашу помощь, потому что я перепробовал все, я искал на всех форумах все, что связано с этой проблемой, и это не работает для меня.JVM, которую мы используем, - 1.6_24, потому что проект - это приложение, разработанное некоторое время назад.

...