IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tomcat et TomEE Java Discussion :

Accès à un EJB déployé sur JBoss depuis une servlet déployé sur Tomcat


Sujet :

Tomcat et TomEE Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 73
    Points : 61
    Points
    61
    Par défaut Accès à un EJB déployé sur JBoss depuis une servlet déployé sur Tomcat
    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
    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);
    	}
    }
    - 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
     
    <%@ 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>
    - 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
    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 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
     
    <?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 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
     
    <?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>
    - Le message d'erreur
    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)
    Inutile de vois dire que la littérature faite à ce sujet dit tout et son contraire...

    Toutes les aides seront donc les bienvenues...

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    Sans grandes convictions mais je tente quand même :
    Il faut pas générer un .jar du projet EJB et l'importer dans le projet dynamique ?
    Donc en gros avoir un aloneEJB.jar et l'importer dans clientWeb. Il me semblait que ça servait un peu a ce genre de truc les builds Maven tout moche et relou a écrire. (Pas taper c'est le soir )

    Car un fois déployé sur serveur les imports inter-projets (fait dans eclipse) ne fonctionnent pas il me semble (ça serait même logique en fait).

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 73
    Points : 61
    Points
    61
    Par défaut
    Merci Denis...

    Citation Envoyé par denis.j Voir le message
    Car un fois déployé sur serveur les imports inter-projets (fait dans eclipse) ne fonctionnent pas il me semble (ça serait même logique en fait).
    Effectivement, vu comme ça, ça parait logique...

    Citation Envoyé par denis.j Voir le message
    Sans grandes convictions mais je tente quand même :
    Il faut pas générer un .jar du projet EJB et l'importer dans le projet dynamique ?
    Donc en gros avoir un aloneEJB.jar et l'importer dans clientWeb. Il me semblait que ça servait un peu a ce genre de truc les builds Maven tout moche et relou a écrire. (Pas taper c'est le soir )
    Mouais, suis pas super convaincu...(dans convaincu, y a vaincu qui veut dire...)...
    Le but de notre manip est de déployer notre appli sur différents serveurs, embarquer l'EJB dans Tomcat nous ferait perdre en portabilité et puis je doute qu'il puisse être accessible depuis Tomcat...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 73
    Points : 61
    Points
    61
    Par défaut
    Je viens de tester avec GlassFish v3 ainsi que JBoss 6.0.0.M3, même combat...

    Après plusieurs lectures à ce sujet, mes déductions sont les suivantes : Tomcat intègre son propre JNDI et malgré la présence du fichier context.xml où est renseigné l'URI de d'EJB, il écrase ce dernier pour n'en faire qu'à sa tête...

    Please, help...!!

Discussions similaires

  1. Vérifier les droits d'accès sur FTP depuis une applet
    Par darksouljedi dans le forum Applets
    Réponses: 0
    Dernier message: 10/03/2011, 15h34
  2. Réponses: 11
    Dernier message: 09/12/2010, 11h32
  3. appel d'un ejb depuis une classe simple sur jonas
    Par mraniy dans le forum JOnAS
    Réponses: 2
    Dernier message: 16/01/2010, 02h48
  4. [POO] Acces aux attributs d'un objet depuis une methode evenement :s
    Par NikoGJ dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/07/2006, 19h01
  5. [debutant]renvoyer sur une jsp depuis une servlet
    Par omega dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 23/03/2004, 11h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo