Bonjour à tous,

J'ai décidé de faire une petite application en archi n-tiers et je rencontre un problème qui est récurrent sur le web. Malgré un bon nombre de posts existant sur le web, je crois ne pas encore avoir trouvé la solution... Pour info, j'utilise JBOSS AS 7.1.1 et JAVA 1.7.

L'application se divise en 3 projets: projet jpa, projet business et projet web.

Voici un exemple de classe JPA que j'utilise:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Entity
@NamedQuery(name="Stream.findAll", query="SELECT s FROM Stream s")
public class Stream implements Serializable {
	private static final long serialVersionUID = 1L;
 
	@Id
	@Column(name="id_stream")
	private int idStream;
 
	private String description;
 
	private String name;
 
	public Stream() {
	}
 
        ...
}
J'ai mes classes dite business qui s'occupe du traitement métier. Ce sont des Beans qui manipule Les classes JPA par le biais du fameux Entity Manager.
Voici l'interface:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
@Remote
public interface StreamServiceRemote {
 
	public List<Stream> getHomeStreams();
}
Voici la classe implémentant l'interface:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Stateless(name="StreamService")
public class StreamService implements StreamServiceRemote {
 
	@PersistenceContext(unitName="jpa")
	EntityManager em;
 
    public StreamService() {
 
    }
 
	public List<Stream> getHomeStreams() {
 
		Query q = em.createQuery("SELECT s FROM "+Stream.class.getName()+" s");
		List<Stream> results = (List<Stream>) q.getResultList();
		return results;
	}
 
}
La problématique vient de mon projet Jax-RS qui n'injecte pas correctement mon Bean à l'aide de l'annotation @EJB.
Voici un exemple d'injection:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Stateless
@Path("home")
public class HomeController {
 
	@EJB
	private StreamServiceRemote streamService;
 
	@GET
	@Path("")
	public Viewable index(@Context HttpServletRequest request, @Context HttpServletResponse response) {
 
		List<Stream> listStream = streamService.getHomeStreams();
		request.setAttribute("listStream", listStream);
		return new Viewable("/home", null);
	}
 
}
A savoir que quand je lance mon serveur jboss, je n'ai pas d'erreur apparente et les EJB sont bien pris en compte:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
11:29:06,431 INFO  [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-4) JNDI bindings for session bean named StreamService in deployment unit subdeployment "business.jar" of deployment "ear.ear" are as follows:
 
	java:global/ear/business/StreamService!com.popme.business.remote.StreamServiceRemote
	java:app/business/StreamService!com.popme.business.remote.StreamServiceRemote
	java:module/StreamService!com.popme.business.remote.StreamServiceRemote
	java:jboss/exported/ear/business/StreamService!com.popme.business.remote.StreamServiceRemote
	java:global/ear/business/StreamService
	java:app/business/StreamService
	java:module/StreamService
L'erreur qui pose problème est un simple NullPointer Exception lors de la manipulation de "private StreamServiceRemote streamService;" dans mon projet Jax-RS.

Merci de vos réponses