Problema com Injeção de EJB

2 respostas
Jedi_FeniX

Estou tendo um problema ao tentar injetar um EJB em um serviço, segue um exemplo de como estou fazendo:

UserService.java
@Path(value="/user")
public class UserService{
   
   @EJB
   private UserDAO dao;

   @POST
   public Response create(@FormParam("name") String name) {
      User user = new User(name);
      dao.create(user);
      Response.ok.build();
   }
}
UserDAO.java
@Stateless
public class UserDAO{

   @PersistenceContext
   private EntityManager entityManager;

   public void create(User user){
      this.entityManager.persist(user);
   }
}
O meu web.xml ficou assim:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

  	<servlet>
		<servlet-name>Jersey REST Service</servlet-name>
		<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
		<init-param>
			<param-name>com.sun.jersey.config.property.packages</param-name>
			<param-value>br.com.test.services</param-value>
		</init-param>
	</servlet>

	<servlet-mapping>
		<servlet-name>Jersey REST Service</servlet-name>
		<url-pattern>/services/*</url-pattern>
	</servlet-mapping>
	
</web-app>

Na UserService quando tento usar a minha dao, que teoricamente o container deveria injetar, dá um NullPointerException. Indo atrás do problema dei um "print" no objeto "dao" e o mesmo estava nulo.

Já tentei usar outra anotação que era a @Resource, mas também não funciona.

Estou esquecendo de algo? Ou não tem como injetar esse objeto neste serviço?

Estou usando o Glassfish v3.1 com a JDK 6.

Desde já agradeço a ajuda.

2 Respostas

E

nao tenho certeza, mas acho que

@EJB private UserDAO dao;

só funciona dentro de outro ejb…

Tenta

Context ctx = new InitialContext(); TesteEJBLocal t = (TesteEJBLocal) ctx.lookup("TesteEJB/local"); t.metododoejb();

Jedi_FeniX

Eu sei que @EJB funciona dentro de uma servlet.

Da outra maneira que vocë sugeriu eu consigo. Eu queria achar uma maneira de usar com annotations, igual na servlet.

Criado 13 de janeiro de 2012
Ultima resposta 25 de jan. de 2012
Respostas 2
Participantes 2