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

Java EE Discussion :

Communication à partir d'une Servlet


Sujet :

Java EE

  1. #1
    Membre habitué Avatar de obitskater
    Profil pro
    Développeur .NET
    Inscrit en
    Février 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2008
    Messages : 163
    Points : 132
    Points
    132
    Par défaut Communication à partir d'une Servlet
    Bonjour à tous, voici mon premier Post ici.
    Enfin bref, je suis en train de faire un projet de site commercial en ligne.

    J'ai décidé d'organiser mon appli comme ceci:
    _ Une machine serveur avec mon conteneur EJB3 (Jonas+EasyBeans) ainsi que ma BDD mysql
    _ une machine avec mon serveur Tomcat contenant les servlets appelées par les JSP, et devant appeler des méthodes de mes EJB distantes.

    Le soucis est que je n'arrive à connecté ma servlet aux EJB distantes.

    Je ne sais pas trop comment procéder, donc je tripatouille un peu comme je peux à partir diffèrentes sources rencontrées.

    Voici comment je procéde:

    dans ma servlet voici le bout de code censé faire la connexion à mon serveur Jonas (obit est le nom de ma machine sur lequel est mon serveur Jonas):
    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
    Properties ppt = null;
    		    Context ctx = null;
    		    EcomAdminRemote remote = null;
    
    		    try {
    		      ppt = new Properties();
    		      ppt.put(Context.INITIAL_CONTEXT_FACTORY, "org.objectweb.carol.jndi.spi.MultiOrbInitialContextFactory");
    		      ppt.put(Context.PROVIDER_URL, "rmi://obit:1099");
    		      ctx = new InitialContext(ppt);      
    		      ctx.lookup("javax.transaction.UserTransaction");
    		      remote = (EcomAdminRemote) ctx
    						.lookup("ecom.beans.EcomAdminBean_" + EcomAdminRemote.class.getName() + "@Remote");
    		      remote.createAccount( "Lulu", 100.00);
    		    }
    		    catch (Exception e) {
    		       e.printStackTrace();
    		    }
    Ca bug au niveau de la ligne verte...

    Voici l'interface de mon bean présent sur les 2 machines:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    package ecom.beans;
     
    import java.rmi.Remote;
     
     
    public interface EcomAdminRemote extends Remote{
     
    	void createAccount( String accountOwner, double balance);
    	void createProductStore(int productStoreId, String city, int productStoreAccountId, String productStoreName);
    	void createProduct(int productId, String productName, double productPrice, int productStoreId, String city);
        //	 to be completed as needed
    }
    Mais quand j'exècute ma servlet j'ai une exception que je ne comprends pas du tout:
    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
    java.lang.ClassCastException: javax.naming.Reference cannot be cast to ecom.beans.EcomAdminRemote
            at ecom.compte.ServletInscription.doPost(ServletInscription.java:52)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.j
    ava:290)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
     
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
            at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
            at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.ja
    va:584)
            at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
            at java.lang.Thread.run(Unknown Source)
    Par ailleurs, est ce que je dois définir quelquechose dans le web.xml??

    Je me doute que c'est vraiment mal fait, donc j'espère que vous pourriez me remettre sur la bonne voie!
    Merci d'avance.

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 52
    Points : 61
    Points
    61
    Par défaut
    Bonjour essaie ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Properties properties = new Properties();
    		properties.put("java.naming.factory.initial",
    		"org.jnp.interfaces.NamingContextFactory");
    		properties.put("java.naming.factory.url.pkgs",
    		"org.jboss.naming:org.jnp.interfaces");
    		properties.put("java.naming.provider.url", "jnp://127.0.0.1:1099");
     
    InitialContext namingContext = null;
    		try {
    			namingContext = new InitialContext(properties);
    			ecomAdminRemote= (EcomAdminRemote) namingContext.lookup("EcomAdminRemote/remote");  // n'oublie pas l'annotation @Remote ds ton ejb
    		} catch (NamingException e) {  
    			System.err.println("Impossible d'acceder au contexte JNDI : " + e);
    		}

  3. #3
    Membre habitué Avatar de obitskater
    Profil pro
    Développeur .NET
    Inscrit en
    Février 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2008
    Messages : 163
    Points : 132
    Points
    132
    Par défaut
    Merci pour ta réponse.

    Mais j'ai peur qu'il y ai un petit soucis. En effet, tu me met dans les propriétés des élèments JBOSS, enfin il me semble, or je tourne sous Jonas.

    Si tu as la meme chose version Jonas, je suis preneur, car je ne vois vraiment pas quoi mettre dans le :
    properties.put("java.naming.factory.url.pkgs","???????");

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 52
    Points : 61
    Points
    61

  5. #5
    Membre habitué Avatar de obitskater
    Profil pro
    Développeur .NET
    Inscrit en
    Février 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2008
    Messages : 163
    Points : 132
    Points
    132
    Par défaut
    Bon je galère vraiment...

    Après m'être retourné le crâne dans tout les sens sur mon code, voici la partie du code qui ai vraiment bizarre, je m'explique après :

    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
     
    Properties ppt = null;
    	    Context ctx = null;
    	    EcomAdminRemote remote = null;
     
    	  try {
    	    	ppt = new Properties();
                    ppt.put(Context.INITIAL_CONTEXT_FACTORY, "org.objectweb.carol.jndi.spi.MultiOrbInitialContextFactory");
                    ppt.put(Context.PROVIDER_URL, "rmi://obit:1099");
    	        ctx = new InitialContext(ppt);
    	      System.out.println(ctx.lookup("ecom.beans.EcomAdminBean_" + EcomAdminRemote.class.getName() + "@Remote").toString());
    	      remote = (EcomAdminRemote) ctx
    			.lookup("ecom.beans.EcomAdminBean_" + EcomAdminRemote.class.getName() + "@Remote");
     
    	      remote.createAccount( "Lulu", 100.00);
    	    }
    	    catch (Exception e) {
    	       e.printStackTrace();
    	    }  
    	    EcomAdminRemote ecomAdminBean = remote;
    Quand j'exècute ce code avec un client lourd (en console) tout marche, pas d'erreur.
    Mais dès que j'exècute ce code dans une servlet sous tomcat j'ai l'exception suivante:

    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    Reference Class Name: ecom.beans.EcomAdminRemote
    Type: containerID
    Content: 28558855
    Type: factoryName
    Content: ecom.beans.EcomAdminBean
    Type: interfaceClassName
    Content: ecom.beans.EcomAdminRemote
    Type: useID
    Content: true
     
    java.lang.ClassCastException: javax.naming.Reference cannot be cast to ecom.bean
    s.EcomAdminRemote
            at ecom.compte.ServletInscription.doPost(ServletInscription.java:64)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
    icationFilterChain.java:290)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
    ilterChain.java:206)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
    alve.java:233)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
    alve.java:175)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
    ava:128)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
    ava:102)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
    ve.java:109)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
    a:263)
            at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
    :844)
            at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proce
    ss(Http11Protocol.java:584)
            at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:44
    7)
            at java.lang.Thread.run(Unknown Source)
    java.util.logging.ErrorManager: 1
    java.lang.NullPointerException
            at org.apache.juli.FileHandler.publish(FileHandler.java:137)
            at java.util.logging.Logger.log(Unknown Source)
            at java.util.logging.Logger.doLog(Unknown Source)
            at java.util.logging.Logger.logp(Unknown Source)
            at org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:165)
            at org.apache.juli.logging.DirectJDKLog.info(DirectJDKLog.java:115)
            at org.apache.coyote.http11.Http11Protocol.pause(Http11Protocol.java:221
    )
            at org.apache.catalina.connector.Connector.pause(Connector.java:1074)
            at org.apache.catalina.core.StandardService.stop(StandardService.java:56
    3)
            at org.apache.catalina.core.StandardServer.stop(StandardServer.java:744)
     
            at org.apache.catalina.startup.Catalina.stop(Catalina.java:616)
            at org.apache.catalina.startup.Catalina$CatalinaShutdownHook.run(Catalin
    a.java:659)
    Je suis perdu, je comprends pas pourquoi ça marche avec mon client lourd, mais plus avec ma servlet. La communication entre tomcat et jonas déconne mais je ne sais pas pourquoi

  6. #6
    Membre habitué Avatar de obitskater
    Profil pro
    Développeur .NET
    Inscrit en
    Février 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2008
    Messages : 163
    Points : 132
    Points
    132
    Par défaut
    je viens de me rendre compte d'un petit message apparaîssant dans mon log tomcat que je ne vous ai pas mis, peut être ya t'il un rapport avec mon erreur, merci d'avance pour l'aide apporté:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    log4j:WARN No appenders could be found for logger (org.objectweb.carol.util.conf
    iguration.ConfigurationRepository).
    log4j:WARN Please initialize the log4j system properly.

  7. #7
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    je rencontre actuellement le meme probleme mais avec un client j2ee pas une servlet, as-tu pu trouver une solution ?

  8. #8
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 18
    Points : 20
    Points
    20
    Par défaut
    Salut
    une interface ejb devrait normalement etendre "javax.ejb.Remote" au lieu de "java.rmi.Remote"
    A+

  9. #9
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 49
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par levieux Voir le message
    Salut
    une interface ejb devrait normalement etendre "javax.ejb.Remote" au lieu de "java.rmi.Remote"
    A+
    Le soucis survient ici à mon avis. Sous netbeans en tout cas si tu souhaites inclure le package remote alors que tes EJB sont sur un autre projet il va t'inclure par défaut "java.rmi.remote". Pour résoudre cela il faut que tu ajoutes dans tes librairies de ton projet implémentant les interfaces de tes EJB le package "javaee.jar" qui sous glassfish se trouve dans le répertoire de librairie du serveur.

    En espérant que cela résoudra ton problème.

Discussions similaires

  1. Java/XML generer un fichier XML a partir d'une Servlet
    Par fabricew59 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 03/04/2007, 11h43
  2. Arrêter à la Webapp à partir d'une servlet
    Par Coulon Arnaud dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 30/06/2006, 09h45
  3. Réponses: 2
    Dernier message: 12/05/2006, 18h49
  4. [SERVLET]Appel d'un fichier à partir d'une servlet
    Par fchafia dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 17/03/2005, 12h21
  5. [POI] Usage à partir d'une Servlet
    Par fredmorvant29 dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 19/07/2004, 15h35

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