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

Vue hybride

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

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2008
    Messages : 163
    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 confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 52
    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 confirmé Avatar de obitskater
    Profil pro
    Développeur .NET
    Inscrit en
    Février 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2008
    Messages : 163
    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 confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 52

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

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2008
    Messages : 163
    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 confirmé Avatar de obitskater
    Profil pro
    Développeur .NET
    Inscrit en
    Février 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2008
    Messages : 163
    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.

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