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:
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.
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() { } ... }
Voici l'interface:
Voici la classe implémentant 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(); }
La problématique vient de mon projet Jax-RS qui n'injecte pas correctement mon Bean à l'aide de l'annotation @EJB.
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; } }
Voici un exemple d'injection:
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
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); } }
L'erreur qui pose problème est un simple NullPointer Exception lors de la manipulation de "private StreamServiceRemote streamService;" dans mon projet Jax-RS.
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
Merci de vos réponses
Partager