Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Injeção Service em um WS Rest

Bom dia,

Estou criando um projeto com a seguinte estrutura:

Um WS rest (resource) que nele injeto um EJB (service) e o service eu chamado o DAO (EJB).

Porém, o service no rest não está sendo injetado, sempre fica null. O que estou fazendo de errado? rsrs.

Estou usando a seguinte configuração: JBoss 7.1.1 Maven 3.3.9

Uso o maven para gerar o WAR (mvn package)

Segue os códigos principais (alguns imports foram omitidos):

RESOURCE

import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;

@Path("/helloWorld")
public class HelloWorldResource {

    @Inject
    private HelloWorldService service;

    @GET
    @Path("/findAll")
    public Response findAll() {
        List<HelloWorld> list = this.service.findAll();
        return Response.status(200).entity(list.toString()).build();
    }

}

SERVICE

import javax.ejb.Stateless;
import javax.inject.Inject;

@Stateless
public class HelloWorldService {

    @Inject
    HelloWorldDAO dao;

    public List<HelloWorld> findAll() {
        return this.dao.findAll();
    }

}

DAO

import javax.annotation.PostConstruct;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless
public class HelloWorldDAO {

    @PersistenceContext
    private EntityManager manager;

    @PostConstruct
    void afterCreate() {
        System.out.println("HelloWorldDAO criado com sucesso");
    }

    public List<HelloWorld> findAll() {
        return this.manager.createQuery("select hw from HelloWorld hw", HelloWorld.class).getResultList();
    }

}

POM.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>br.com.helloworld.service</groupId>
  <artifactId>helloworld-service</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>helloworld-service Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.0-api</artifactId>
        <version>1.0.1.Final</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.jboss.spec.javax.ejb</groupId>
        <artifactId>jboss-ejb-api_3.1_spec</artifactId>
        <version>1.0.2.Final</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>1</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-server</artifactId>
      <version>1.8</version>
    </dependency>

  </dependencies>
  <build>
    <finalName>helloworld-service</finalName>
  </build>
</project>
7 respostas

Ola, brunomartins.sc !

Esse @Inject é do CDI, certo ?

Você colocou o beans.xml na pasta WEB-INF ?

Abraço!

Olá Cristiano,

Realmente estava faltando o beans.xml. Adicionei ele, porém o erro continua, o service ainda está nulo. No log do JBoss aparece que o CDI está ativado:

[com.sun.jersey.server.impl.cdi.CDIComponentProviderFactoryInitializer] (MSC service thread 1-5) CDI support is enabled

Mais algum detalhe que eu posso estar esquecendo?

Obrigado.

Opa, consegui aqui.

Anotei com @Model o HelloWorldResource e deu certo. Não ficou bem claro ainda isso pra mim, sabe me dizer o porquê?

Bruno,

Poderia fazer um teste:

Mudar de @Model para @ApplicationPath("/helloWorld").

Testei aqui e não deu certo. Ficou assim:

@Path("/helloWorld")
@ApplicationPath("/helloWorld")
public class HelloWorldResource

O service fica nulo.

solução!

Ola Bruno!

Passei a anotation errada.

Testa assim por gentileza:

@Path("/helloWorld")
@ApplicationScoped

Dessa forma funcionou também