У меня проблема с веб-приложением, разработанным с использованием 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, потому что проект - это приложение, разработанное некоторое время назад.