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 :

Invocation à partir d'un client lourd


Sujet :

Java EE

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut Invocation à partir d'un client lourd
    Salut,
    j'ai une erreur en essayant d'invoquer un EJB à partir d'un client lourd et je ne comprends pas pourquoi.
    Voici le code que j'utilise :
    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
     
         Application app = new Application();
                //établissement de la connection
                System.out.println("Contexte JNDI : "+ args[0] + "\n Host : "+ args[1]+"\n Port : " + args[2]+"\n");
                app.connectionSA(args[0], args[1], args[2]);
     
                //liste des ejb présents sur le serveur d'application
                app.afficherListEjb();
     
               // récupération de la référence JNDI de l'EJB
                Object objRef = app.getJndiRef();
     
    [b]           ConverterRemoteHome home =
                            (ConverterRemoteHome)PortableRemoteObject.narrow(
                    objRef, ConverterRemoteHome.class);[/b]
    Avec pour les méthodes appelées :
    1- pour le contexte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     m_props.put(Context.INITIAL_CONTEXT_FACTORY, com.sun.jndi.cosnaming.CNCtxFactory);
            m_props.put(Context.PROVIDER_URL, "iiop://localhost:3700");
           // init the jndi context
            try 
            {
                this.m_jndiContext = new InitialContext(m_props);
            }
            catch (Exception e) 
            {
                System.out.println("Erreur de connection au serveur : " + e);
            }
    2- pour la référence JNDI de l'EJB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Object objRef = ctx.lookup(EjbJndiName);
    avec EjbJndiName = ejb/ConverterBean

    L'erreur que j'ai est :
    Exception : java.lang.ClassCastException
    En sachant que j'ai mon jar ConverterApp-EJBModule.jar dans mon classpath et tous les import associé...
    Quelqu'un serait-il m'éclairer sur ce point?
    merci

  2. #2
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    Personne ne sait d'où peut venir mon erreur??
    Je me demandais si cela ne venait pas du contexte JNDI que j'avais initialié : j'utilise com.sun.jndi.cosnaming.CNCtxFactory c'esty à dire je fais :
    m_props.put(Context.INITIAL_CONTEXT_FACTORY, com.sun.jndi.cosnaming.CNCtxFactory);
    afin que ce soit générique.... j'arrive bien a voir les EJBs présent mais l'invocation la ne fonctionne pas...

    merci merci!!

  3. #3
    Membre habitué
    Inscrit en
    Décembre 2002
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 186
    Points : 130
    Points
    130
    Par défaut
    tu es sous SunAS?

  4. #4
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    oui... mais j'ai besoin que mon prototype fonctionne de manière générique avec n'importe quel AS...

  5. #5
    Membre habitué
    Inscrit en
    Décembre 2002
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 186
    Points : 130
    Points
    130
    Par défaut
    utile donc le support de spring

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    pardon? désolée mais je ne comprends pas bien? tu peux m'expliquer stp?

    merci de l'aide

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Tu ajoute com.sun.jndi.cosnaming.CNCtxFactory ou "com.sun.jndi.cosnaming.CNCtxFactory" (entre cotes) :
    Clic me...
    CV en ligne

    Il y a 10 types de personnes, celui qui connait le binaire, et l'autre...

    Pas de réponse en MP...Merci

  8. #8
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    En fait je le passe en arguments a mon main...
    Mais vraiment ce que je ne comprends pas c'est que j'arrive a lister tous les ejbs présents sur le SA avec ces paramètres là, mais je n'arrive pas a instancier un EJB...

  9. #9
    NoP
    NoP est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 35
    Points : 44
    Points
    44
    Par défaut
    J'ai exactement le meme problème avec JBoss 4.0.3. Ma petite appli fibo se deploye correctement et fonctionne sur un serveur sous windows XP mais pas sur un serveur sous Linux Fedora Core 4.

    Le 2 serveurs sont fraîchement installés donc je pense que le problème viens de l'installation, j'ai vu sur le site de sun qu'il venait de publier JBoss 4.0.3SP1 donc je vais essayer de l'installer vois si ça resoud quelquechose...

    Je vais également essayer de passer sur une JVM 1.4.1 au lieu de 1.5

  10. #10
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Quelle instruction lève le "Exception : java.lang.ClassCastException" ?
    Clic me...
    CV en ligne

    Il y a 10 types de personnes, celui qui connait le binaire, et l'autre...

    Pas de réponse en MP...Merci

  11. #11
    NoP
    NoP est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 35
    Points : 44
    Points
    44
    Par défaut
    Moi c'est :

    home = (FiboHome) PortableRemoteObject.narrow(ref, FiboHome.class);
    et la stack trace :
    2005-10-27 13:54:33,457 INFO [STDOUT] java.lang.ClassCastException
    2005-10-27 13:54:33,457 INFO [STDOUT] at com.sun.corba.se.impl.javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:229)
    2005-10-27 13:54:33,457 INFO [STDOUT] at javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:137)
    2005-10-27 13:54:33,457 INFO [STDOUT] at tutorial.web.ComputeServlet.init(ComputeServlet.java:58)
    2005-10-27 13:54:33,457 INFO [STDOUT] at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1091)
    2005-10-27 13:54:33,458 INFO [STDOUT] at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:750)
    2005-10-27 13:54:33,458 INFO [STDOUT] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:130)
    2005-10-27 13:54:33,458 INFO [STDOUT] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    2005-10-27 13:54:33,458 INFO [STDOUT] at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:39)
    2005-10-27 13:54:33,458 INFO [STDOUT] at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:159)
    2005-10-27 13:54:33,458 INFO [STDOUT] at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:59)
    2005-10-27 13:54:33,458 INFO [STDOUT] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    2005-10-27 13:54:33,458 INFO [STDOUT] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    2005-10-27 13:54:33,458 INFO [STDOUT] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    2005-10-27 13:54:33,458 INFO [STDOUT] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    2005-10-27 13:54:33,458 INFO [STDOUT] at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
    2005-10-27 13:54:33,459 INFO [STDOUT] at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
    2005-10-27 13:54:33,459 INFO [STDOUT] at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    2005-10-27 13:54:33,459 INFO [STDOUT] at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
    2005-10-27 13:54:33,459 INFO [STDOUT] at java.lang.Thread.run(Thread.java:595)
    2005-10-27 13:54:33,459 INFO [STDOUT] Caused by: java.lang.ClassCastException: $Proxy51
    2005-10-27 13:54:33,459 INFO [STDOUT] at com.sun.corba.se.impl.javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:212)
    2005-10-27 13:54:33,459 INFO [STDOUT] ... 18 more
    2005-10-27 13:54:33,460 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/fibo].[Compute]] Allocate exception for servlet Compute
    et tout le code est là : http://docs.jboss.com/jbosside/tutorial/build/en/html/index.html

  12. #12
    NoP
    NoP est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 35
    Points : 44
    Points
    44
    Par défaut
    meme problème avec jboss 4.0.3SP1, c'est quand meme dingue qu'un meme .ear fonctionne sur un serveur installé en standard sous windows et pas sur un autre installé aussi de façon standard sous linux :'(

  13. #13
    NoP
    NoP est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 35
    Points : 44
    Points
    44
    Par défaut
    Pour moi c'est résolu en utilisant une autre version de JBoss sur mon serveur sous fedora core 4

    ça fonctionne sur jboss 4.0.0 et 4.0.1sp1 ainsi que sur jboss4.0.3 sous winXP

    ça CastException sous jboss 4.0.2 et plus sous linux.

    Bon courage nana1

  14. #14
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    ben moi ce n'est tjrs pas résolu... je ne comprends pas comment : voila mon erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Exception : java.lang.ClassCastException
    java.lang.ClassCastException
            at com.sun.corba.se.internal.javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:293)
            at javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:134)
            at com.orsyp.ejbmanagerapp.Application.main(Application.java:146)

  15. #15
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Tu est sure d'avoir les bons stubs client correspondant à ton EJB ?
    Clic me...
    CV en ligne

    Il y a 10 types de personnes, celui qui connait le binaire, et l'autre...

    Pas de réponse en MP...Merci

  16. #16
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    La j'avoue je ne comprends pas ta question....

  17. #17
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Bon, pour qu'un client puisse communiquer avec un serveur il faut :

    - une interface commune (2 dans le cas des EJB, une pour le cycle de vie, la home, et une pour les méthodes métier, la remote).
    - Une implémentation de cette interface ( l'EJB )
    - Un client utilisant l'interface.

    Seulement, le client et le serveur doivent communiquer ensemble donc, il faut ajouter à celà :
    - un stub
    - un skeleton

    (marant, on dirais du RMI ... Pfff, c'est du RMI, suis-je bête )

    A quoi servent les stubs et les skeleton ?

    1) à implémenter le protocole de transport (transport du point A au point B des données, transformation des données )
    Implémenté en IIOP (corba) pour les EJB et en JRMP pour RMI Java
    2) à implémenter le protocole d'échange (communication) entre le client et le serveur. Typiquement, comment invoquer les méthodes... (RMI)
    Ce n'est pas le tout de savoir à qui parler, encore faut il se comprendre !

    Voilà, ça, c'est la théorie !

    Maintenant, c'est quoi un narrow ?
    Et bien le narrow, c'est le CAST !
    On récupère une référence sur la home dans le naming, ensuite, en faisant un narrow, on demande l'instanciation des stubs et la création d'une référence home coté serveur.

    A ce moment là, si tu as une ClassCast, plusieurs possibilité

    dans ton appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HomeXxxx xxxx = (HomeXxxx)PortableRemoteObject.narrow(obj, HomeXxxx.class)
    obj n'est pas une instance de la home HomeXxxx
    le stub que le narrow cherche à instancié n'est pas du type HomeXxxx

    Dans le second cas, il me semble que c'est une erreur corba qui est levée

    Tu peu me donner le code situé à la ligne 146 de la classe Application stp ?
    Clic me...
    CV en ligne

    Il y a 10 types de personnes, celui qui connait le binaire, et l'autre...

    Pas de réponse en MP...Merci

  18. #18
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    Merci pour ton explication... j'ai encore une question :
    les stubs et skeleton quand on fait un narrow on demande leur instanciation mais cela reste implicite, c'est bien ça? Je veux dire sur ma machine physique je n'ai pas les stubs ni les skeleton, c'est au moment du deploy que le SA gere?
    pour le code ligne 146 voilà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                    ConverterRemoteHome home =(ConverterRemoteHome)PortableRemoteObject.narrow(
                    objRef, ConverterRemoteHome.class);
    C'est justement le narrow....
    je pense qu'en effet il s'agit d'un problème d'objet de référence quand j'affiche la classe de l'objet de référence jndi :
    Nom de la classe de l'objet JNDI : com.sun.corba.se.internal.iiop.CDRInputStream_1_0$1
    je me trompe dans le les paramètres du SA?

  19. #19
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Elle fait quoi la méthode app.getJndiRef(); ?

    Qu'entend tu par implicite ?
    Le SA étant physiquement coté serveur ne gère que sa partie (skeleton).
    Le client doit avoir les stubs dans son classpath !

    certain SA permettent le chargement dynamique des stubs.
    L'interface Home et Remote restent nécessaire à la compilation (pas de cast dynamique en Java 1.4, pas sur que celà fonctionne en Java 5)
    Clic me...
    CV en ligne

    Il y a 10 types de personnes, celui qui connait le binaire, et l'autre...

    Pas de réponse en MP...Merci

  20. #20
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    ce que je veux dire par implicite, c'est que lorsque je développe des EJB je ne crée pas moi meme mes stubs et skeleton... je me contente de faire comme tous les tutoriaux un deploy de mon EJB....
    sinon la méthode app.getJndiRef() fait le lookup : " Object objRef = ctx.lookup(EjbJndiName);"

    je ne comprends pas vraiment quand tu dis le client doit avoir les stubs dans son classpath, dans les applications clientes standards on met le jar dans le classpath c'est bien ca? ou les classes.
    "L'interface Home et Remote restent nécessaire à la compilation "? c'est a dire? Je ne peux pas les récupérer dynamiquement?
    Puis-je tout de meme les charger a l'aide d'un classLoader? Avec par exemple en paramètre le chemin complet physique des interfaces?

    merci de ton aide

Discussions similaires

  1. Invocation d'un service web à partir d'un client Java
    Par epsilonna dans le forum Services Web
    Réponses: 0
    Dernier message: 21/12/2011, 13h51
  2. Réponses: 1
    Dernier message: 28/02/2007, 17h33
  3. Affichage d'une image à partir d'un client
    Par Aldur dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/01/2006, 10h44
  4. problème d'accèes à firebird sà partir d'un client
    Par vbcasimir dans le forum Connexion aux bases de données
    Réponses: 2
    Dernier message: 10/05/2005, 08h36
  5. Application Intranet ou Application type client lourd
    Par oursbleu dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 03/02/2005, 22h00

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