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 :

Client distant et communication ejb


Sujet :

Java EE

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 16
    Points : 7
    Points
    7
    Par défaut Client distant et communication ejb
    Bonsoir,

    Je cherche a savoir s'il est possible d'avoir un client en java sur le pc1.(application swing)
    et un serveur d'ejb sur le pc2 ( ejb creer avec eclipse , et jonas)

    nb: les pc1 et pc2 ne sont pas sur le meme reseau ...

    Car pour le moment, j'ai bien mon client et mes ejb, mais pas moyen de faire fonctionner le client a distance, alors qu'en local, pas de soucis ca fonctionne nikel..

    Merci d'avance pour vos reponses ...

    edit: des precisions:

    J'ai bien creer l'ejb en remote .
    j'ai bien configuré le jndi puis qu'en local sa fonctionne .
    dans le client j'utilise bien :
    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
     InitialContext monContext;
            try {
                monContext = new InitialContext();
                Object ref = monContext.lookup("ejb/testSessionBean");
                testSessionRemoteHome TSRH = (testSessionRemoteHome)PortableRemoteObject.narrow(ref,testSessionRemoteHome.class);
                try {
                    testSessionRemote TSR = TSRH.create();
                    int result = TSR.operation(Integer.parseInt(jTextField1.getText()),Integer.parseInt(jTextField2.getText()));
                    jTextField3.setText(String.valueOf(result));
                } catch (RemoteException ex) {
                    ex.printStackTrace();
                } catch (javax.ejb.CreateException ex) {
                    ex.printStackTrace();
                }
            } catch (NamingException ex) {
                ex.printStackTrace();
    mais cela oblige a mettre mon client et ma partie ejb dans le meme package. En local c'est bien, mais pour faire en sorte que le client s'execute a distance, c'est pas vraiment pratique ...

    Surtout que je souhaite que le PC1 n'est que et uniquement le client . et rien des ejb ...

    De plus, j'ai pas mal chercher sur internet, mais en general, il y est presenté comment les faire, mais toujours en local ... ce que je sais faire ...
    mais j'ai a aucun moment trouvé des exemple (exemple de code) d'un client executé a distance ... malgré quelques site qui parle de communication avec rmi ... mais sans donné des exemples .

  2. #2
    Membre régulier
    Inscrit en
    Mars 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 84
    Points : 98
    Points
    98
    Par défaut
    Citation Envoyé par pierrodefrance
    nb: les pc1 et pc2 ne sont pas sur le meme reseau ...
    (
    Pour que cela fonctionne, il faut que pc1 et pc2 soient se voient en LAN ou par internet.

    Pour que cela fonctionne, il faut changer cette instruction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      monContext = new InitialContext();
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
     
     // chargement de propriétés du serveur distant
     
      Properties props = new Properties()
      ...
     
     //création du contexte serveur
     
     
      monContext = new InitialContext(props);
    pour passer les propriétés du serveur distant.

    Evidement les propriétés dépende de l'application server.

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    En effet, Pc1 et pc2 sont reliés par internet .

    j'ai essayer avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Properties props = new Properties()
    props.put(Context.INITIAL_CONTEXT_FACTORY,"org.objectweb.carol.jndi.spi.MultiOrbInitialContextFactory");
    props.put(Context.PROVIDER_URL, rmi://ip_du_pc2:1099);
    mais avec cela, quand je met le client dans un autre package, les lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    testSessionRemoteHome TSRH = (testSessionRemoteHome)PortableRemoteObject.narrow(ref,testSessionRemoteHome.class);
    et:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    testSessionRemote TSR = TSRH.create();
    me demande toujours d'etre dans le meme package que celui contenant les ejb, hors ce package ( appelle serv) n'est pas censé etre sur le Pc1 qui contient le client dans le package client, mais sur le PC2.

  4. #4
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 90
    Points : 53
    Points
    53
    Par défaut
    essaie de voir d'abord si le pc1 communique avec le pc 2
    si c 'est oui regarde si le pare feu ne bloque un port

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Aucun soucis de ce soté la, tout communique bien...

    Le probleme est le fait que dans le code du client je doit faire un import du package du serveur, et dc d'avoir le code du serveur au meme endroit que le client ... alors la oui ca fonctionne ...

    Mais je souhaite que le pc contennant le code client ne contienne pas le code serveur ...

  6. #6
    Membre régulier
    Inscrit en
    Mars 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 84
    Points : 98
    Points
    98
    Par défaut
    Tu travaille avec quels outils?

    Ce ne serait pas un problème de configuration du package client. Celui-ci ne devrait pas contenir le code des EJBs, mais les interfaces (+ éventuellement ceux générés automatiquement) vers ceux-ci.

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Je travaille sous eclipse, et jonas .

    Dans mon package client, j'ai mon client.java
    et dans mon package serveur j'ai mon test.java; testhome.java; testEJB.java.

    Mais dans mon client.java, il veut a tout prix avoir les import de testhome et test du package serveur

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    J'ai un doute la , pour que le serveur et le client soit bien séparé, et que mon ejb doit communiqué avec une bdd en ayant des session/etats . Je fait bien un ejb de type entity cmp ?

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Bon j'ai bien les bon type d'ejb, mais toujours pas moyen de faire tourner le client sur un PC autre que celui contenant le serveur . Ou alors, je suis obligé d'accompagné le client des .class du serveur... ce qui n'est pas logique .

  10. #10
    Membre confirmé Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Points : 554
    Points
    554
    Par défaut
    Je te conseille de structurer ton projet en 3 :

    - le client
    - le serveur
    - le commun


    Ce qui se trouve dans commun sont toutes les interfaces des remote session beans par lequel le client communique avec le serveur. Ensuite, si ton session bean renvoie des objets, il te faudra mettre les classes de ces objets dans la partie commune.

    Ton client importe le projet commun. Ton serveur importe le projet commun. Et voilà, tout devrait fonctionner

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Donc, si je comprend bien, il n'est pas possible de séparer clairement les sources client des sources serveurs .

    Si je suis tes idées, ca donne :

    dans le package client : client.java
    dans le package serveur: serveur.java; serveurEJB.java
    dans le pacakge commun: serveurHome.java; serveur.java

    alors que de base jonas sous eclipse m'as creer serveurHome et serveur dans le package serveur ...

  12. #12
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Dans ton code client, tu fais bien appel à tes classes serveurHome et serveur pour accéder à ton ejb distant, donc tu as besoin des classes dans ton client.

  13. #13
    Membre confirmé Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Points : 554
    Points
    554
    Par défaut
    Ton client n'accède normalement qu'à tes interfaces remote. Donc ces interfaces doivent être importées dans le client. Mais pas la classe d'implémentation du bean !

    Ensuite, je n'utilise ni Jonas, ni Eclipse, donc je ne peux pas te dire... Poste dans le sous forum approprié, peut être que tu auras des réponses plus constructives

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Dans ton code client, tu fais bien appel à tes classes serveurHome et serveur pour accéder à ton ejb distant, donc tu as besoin des classes dans ton client.
    Je chercher a faire sans, histoire de dire que les 2 parties soient bien independantes.

    Je pense que je le probleme vient de ma facon de faire les ejb, et non de eclipse en lui meme ... non ?
    Cependant, je vais quand meme aller faire un tour dans cette partie du forum, histoire de voir si y a des topics a ce sujet ...

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Question, sachant que la, j'essaye de faire ca avec des ejb2, en passant en ejb3 ce serait pas plus simple ? est-ce long a apprehender les ejb3 ? merci

  16. #16
    Membre confirmé Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Points : 554
    Points
    554
    Par défaut
    Les EJB3 te faciliteront grandement ta vie de développeur

    Moi même, j'ai connu le passage des EJB2 aux 3, "finger in the noze"

    Ca change pas mal, mais au fond, tu sens bien que c'est la même chose. Faut faire quelques tuto et le tour est joué

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Merci, j'ai plus qu'a trouver de bon tuto ...

    Sinon, pour cette histoire de distance, si j'intercale entre le client et le serveur une servlet ? ca pourrait le faire ?

Discussions similaires

  1. [EJB] Comment faire référence à un ejb dans un client distant ?
    Par tofke dans le forum Java EE
    Réponses: 5
    Dernier message: 25/01/2008, 09h44
  2. [EJB] communication EJB avec 2 versions différentes java
    Par smiskey dans le forum Java EE
    Réponses: 1
    Dernier message: 27/02/2007, 18h08
  3. [V10/XE] Accepter le Web vers les clients distants
    Par othon_oda dans le forum Oracle
    Réponses: 2
    Dernier message: 24/08/2006, 11h29
  4. [debutant][client distant] droit d'accès
    Par Invité dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 23/02/2006, 11h51
  5. [JNDI] Appel distant d'un EJB
    Par Righetto Dominique dans le forum Java EE
    Réponses: 4
    Dernier message: 27/01/2005, 17h05

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