Bonjour à tous, tout est dans la question...
Cela fait trois jours que mon collègue et moi-même essayons donc désespérément d'accéder à un EJB 3.0 session déployé sur un JBoss en local depuis une servlet déployé sur un Tomcat toujours en local.
La dernière piste (qui aboutit toujours au même message d'erreur) sur laquelle je viens de creuser avant de faire appel à vous lumières est la suivante :
http://devgrok.blogspot.com/2009/06/...eans-into.html
http://devgrok.blogspot.com/2009/07/...al-naming.html
Outils utilisés : jdk 1.6, eclipse galileo SR2, tomcat 6.0.26, jboss-5.1.0.GA
Le contexte :
- Un projet EJB nommé aloneEJB déployé sur JBoss.
- Un Dynamic Web Project nommé clientWeb déployé sur Tomcat.
Place au code :
- La servlet
- La JSP
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 package pack1; import java.io.IOException; import javax.ejb.EJB; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import stateless.TheSpecialOneRemote; public class MyServlet extends HttpServlet { /** * */ private static final long serialVersionUID = -546617990177346660L; @EJB(mappedName="ejb/TheSpecialOne") private TheSpecialOneRemote tso; public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException { doPost(req, resp); } public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException { tso.sysO(); RequestDispatcher dispatch=req.getRequestDispatcher("succes.jsp"); dispatch.forward(req,resp); } }
- L'EJB
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Accès à un EJB déployé sur Jboss depuis une appli Servlet/JSP déployée Tomcat</title> </head> <body> Exécution de la servlet, cliquez <a href="MyServlet">ici</a> </body> </html>
- Le web.xml
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
19
20
21
22
23
24
25
26 package stateless; import javax.ejb.Remote; import javax.ejb.Stateless; /** * Session Bean implementation class TheSpecialOne */ @Stateless(mappedName="aloneEJB/TheSpecialOne") public class TheSpecialOne implements TheSpecialOneRemote { /** * Default constructor. */ public TheSpecialOne() { // TODO Auto-generated constructor stub } public void sysO() { // TODO Auto-generated method stub System.out.println("L'OM CHAMPION !!"); } }
- Le context.xml (collé à la racine de META-INF du dynamic web project)
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
19
20
21 <?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_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>clientWeb</display-name> <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>pack1.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/MyServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>
- Le message d'erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <?xml version="1.0" encoding="UTF-8"?> <Context> 2 <!-- Binds the remote context tree starting at myear to local name java:/comp/env/ejb. --> 3 <Resource name="ejb" type="javax.naming.Context" factory="org.jnp.interfaces.NamingContextFactory" URL="jnp://localhost:1099/aloneEJB"/> 4</Context>
Inutile de vois dire que la littérature faite à ce sujet dit tout et son contraire...
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 type Rapport d'exception message description Le serveur a rencontré une erreur interne () qui l'a empêché de satisfaire la requête. exception javax.servlet.ServletException: Erreur à l'instantiation de la classe servlet pack1.MyServlet org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) java.lang.Thread.run(Thread.java:619) cause mère java.lang.NoClassDefFoundError: Lstateless/TheSpecialOneRemote; java.lang.Class.getDeclaredFields0(Native Method) java.lang.Class.privateGetDeclaredFields(Class.java:2291) java.lang.Class.getDeclaredFields(Class.java:1743) org.apache.catalina.util.DefaultAnnotationProcessor.processAnnotations(DefaultAnnotationProcessor.java:181) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) java.lang.Thread.run(Thread.java:619) cause mère java.lang.ClassNotFoundException: stateless.TheSpecialOneRemote org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1516) org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1361) java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) java.lang.Class.getDeclaredFields0(Native Method) java.lang.Class.privateGetDeclaredFields(Class.java:2291) java.lang.Class.getDeclaredFields(Class.java:1743) org.apache.catalina.util.DefaultAnnotationProcessor.processAnnotations(DefaultAnnotationProcessor.java:181) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) java.lang.Thread.run(Thread.java:619)
Toutes les aides seront donc les bienvenues...
Partager