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

Wildfly/JBoss Java Discussion :

[EJB + Swing] Mais comment?


Sujet :

Wildfly/JBoss Java

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 102
    Points : 58
    Points
    58
    Par défaut [EJB + Swing] Mais comment?
    J'essaye depuis un certain moment, de faire un EJB que l'on invoquerait depuis un client Swing deployé par Java Web Start par exemple.
    En vain...

    Est-ce possible? Comment?
    Avec Glassfish, j'ai vu qu'il existait un Client Container?
    Faut-il démarrer l'application swing de façon particulière (appclient ?)

    A l'"école", on m'a expliqué que c'était super de mettre un middleware sur lequel des applications web ou client riche pouvait se connecter et invoquer les mêmes objets metiers! Or dans le concret, ça à l'air d'être surtout théorique!!
    Personne d'autre n'a jamais eu besoin de faire ça?
    Ne ferais-je pas mieux de laisser tomber et de faire du client serveur avec la base de données?

    et avec J2EE 1.5 ...

  2. #2
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 102
    Points : 58
    Points
    58
    Par défaut
    tout ce qu'on trouve sur internet, c'est ce genre de réponse:
    Although i never done, you only need to place some jars in your client classpath (your apps jars and server specific jars), then you`ll get a InitialContext() and make a lookup() like any other j2ee app.

    Typically, you need a client jar file from your app server vendor. JBoss for e.g. has jboss-client.jar. Next in your swing app you will have provide a Properties setup with all your JNDI specifics. Application servers are different in this regard so you will have to consult your documentation. You then will feed your Properties into an InitialContext.

    e.g.
    Properties props = new Properties();
    props.put("NamingContextFactory", "com.bob.MyAppServer"); //props are vendor specific.
    InitialContext ic = new InitialContext(props);

    ic.lookup ("your EJB HOME");

    This is oversimplification, they don't standardize this stuff, so what you put in your properties is very vendor specific but thar you go.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Points : 495
    Points
    495
    Par défaut
    A l'"école", on m'a expliqué que c'était super de mettre un middleware sur lequel des applications web ou client riche pouvait se connecter et invoquer les mêmes objets metiers! Or dans le concret, ça à l'air d'être surtout théorique!!
    Personne d'autre n'a jamais eu besoin de faire ça?
    Ne ferais-je pas mieux de laisser tomber et de faire du client serveur avec la base de données?
    Bien sûr que tu peux développer un client swing qui se connecte à un EJB de la même manière que tu le ferais pour tout type de client à un EJB (web ou console). Si tu nous disais plutôt quels sont les problèmes que tu rencontres, on aurait plus d'éléments pour t'aider. Mais si j'en juge par ce que tu as posté en anglais, ton problème serait certainement au niveau des appels JNDI.

    Although i never done, you only need to place some jars in your client classpath (your apps jars and server specific jars), then you`ll get a InitialContext() and make a lookup() like any other j2ee app.

    Typically, you need a client jar file from your app server vendor. JBoss for e.g. has jboss-client.jar. Next in your swing app you will have provide a Properties setup with all your JNDI specifics. Application servers are different in this regard so you will have to consult your documentation. You then will feed your Properties into an InitialContext.
    La manière de faire des appels JNDI sur un EJB dépend du serveur d'application sur lequel l'EJB est déployé, d'où consultation de la doc du serveur, et cette dépendance implique naturellement que des jars spécifiques au serveur soient déployés au niveau du client. Dans le cas de JBoss, il s'agit donc de jboss-client.jar
    Par contre tu voudrais aussi déployer ton client swing avec Java WebStart. Je ne suis pas certain que cela soit utile, d'autant qu'une application déployée avec WebStart est soumise à un certain nombre de restrictions, comme pour une Applet, vis-à-vis de la machine locale. En plus, un client d'EJB ne devrait être déployé qu'en réseau local, une installtion classique suffirait bien, à mon avis.
    SCJP 5 / SCBCD 1.3 Certified

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 102
    Points : 58
    Points
    58
    Par défaut
    en effet, mon problème est au niveau des appels JNDI!!
    Alors comme on est dans le forum JBoss, quelqu'un pourrait-il justement me donner les spécificités d'appel pour JBOSS 4.0.x!??

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Points : 495
    Points
    495
    Par défaut
    Pour appeler un EJB déployé sous JBoss depuis un client distant, le code ressemble à ceci :
    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
     
         Properties props = new Properties();
         props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
         props.setProperty("java.naming.provider.url", "jnp://localhost:1099");
         props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
     
         try{
           Context ctx = new InitialContext(props);
           Object obj = ctx.lookup("MyBean");
     
           MyBeanHome home = (MyBeanHome)PortableRemoteObject.narrow(obj, MyBeanHome.class);
           MyBean mb = home.create();
        }
       catch(NamingException e){
         .....
       }
    Et bien sûr, <localhost> doit être modifié si le serveur est sur une autre machine, et "jboss-client.jar" doit figurer dans le classpath coté client.
    SCJP 5 / SCBCD 1.3 Certified

  6. #6
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 102
    Points : 58
    Points
    58
    Par défaut
    ok et à la place de "MyBean", on mets le nom de la classe de l'interface ou un identifiant défini dans un fichier de deploiement XML?

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 102
    Points : 58
    Points
    58
    Par défaut
    t'es sur que ton boyt de code est valable avec la spec EJB3?

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Points : 495
    Points
    495
    Par défaut
    ok et à la place de "MyBean", on mets le nom de la classe de l'interface ou un identifiant défini dans un fichier de deploiement XML?
    On met le nom sous lequel le bean a été déployé, généralement c'est le nom figurant dans <ejb-name> du descripteur de déploiement, mais le déployeur peut en donner un autre.

    t'es sur que ton boyt de code est valable avec la spec EJB3?
    Non, ce code est valable pour EJB 2.x Je ne sais pas ce qu'il en est de EJB3, la spec n'étant pas encore stabilisée, ma boite n'est pas encore prête à changer de serveur d'application et donc moi aussi je prend encore un peu de mon temps avant de passer aux EJB3 Quelqu'un d'autre pourrait nous renseigner peut-être ?
    SCJP 5 / SCBCD 1.3 Certified

  9. #9
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 102
    Points : 58
    Points
    58
    Par défaut
    du coup, le narrow, je crois qu'il n'y est plus!! et je bloque toujours!!
    personne n'a testé avec les EJB3 encore??

  10. #10
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 102
    Points : 58
    Points
    58
    Par défaut
    apparement le narrow est encore d'actualité

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Context ctx = new InitialContext(props);
     
    Object o = ctx.lookup("AddIncBean");            
     
    AddIncRemote addIncBean = (AddIncRemote)PortableRemoteObject.narrow(o,AddIncRemote.class);
    mais j'ai ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Exception in thread "main" java.lang.ClassCastException
    	at com.sun.corba.se.impl.javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:229)
    	at javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:137)
    	at caprioclient.CaprioClient.run(CaprioClient.java:76)
    	at caprioclient.CaprioClient.<init>(CaprioClient.java:52)
    	at caprioclient.CaprioClient.main(CaprioClient.java:104)
    Caused by: java.lang.ClassCastException: org.jnp.interfaces.NamingContext cannot be cast to org.omg.CORBA.Object
    	at com.sun.corba.se.impl.javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:212)
    	... 4 more

  11. #11
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 102
    Points : 58
    Points
    58
    Par défaut
    et quels sont les paramètre JNDI pour le Sun App Server (Glassfish?)

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Points : 495
    Points
    495
    Par défaut
    Faudrait peut-être reposer la question sur un forum approprié, le forum EJB par exemple. Il y aurait sûrement du monde pour y répondre.
    SCJP 5 / SCBCD 1.3 Certified

  13. #13
    Futur Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Bonjour, je tombe sur ce post au hasard de mes recherches sur la combinaison JavaWebStart + EJB3, et j'en profite pour indiquer que c'est bel et bien possible de faire une appli délivrée par JavaWebStart et pratiquant de l'EJB3 (stateless/stateful) dans un contexte JBoss 4.2 (pas essayé en Glassfish).

    Côté client, il faut prendre soin de définir les propriétés JNDI "habituelles" (cf un des posts ci-dessus).

    Côté JNLP; on fait comme d'habitude: jar signés + inclusion jboss-allclient.jar (c'est peut être excessif, je débute en JBoss; on doit pouvoir faire plus précis en termes de jars).

    A mon avis; c'est quand même bien pratique, même en réseau local de déployer (re-déployer etc ...) ses applis Swing par JavaWebStart, qu'elles soient EJBisées ou non. Avec des jars signés, un <all-permissions/> et un SecurityManager à null, on lève sans encombre les restrictions de sécurité.

  14. #14
    Membre éclairé Avatar de XmasRock
    Inscrit en
    Janvier 2007
    Messages
    729
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 729
    Points : 821
    Points
    821
    Par défaut
    Lances une recherche sur ce forum avec les mots clés "ejb3 jndi jboss" et l'affaire est dans le sac

Discussions similaires

  1. bannière en rotation, mais comment indiquer le lien ?
    Par JAVA Good dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/03/2006, 19h41
  2. [XSLT] - Modèle réutilisable... mais comment l'utiliser.
    Par jacquesh dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 17/02/2006, 12h07
  3. un simple break; mais comment ??
    Par kmaniche dans le forum C++
    Réponses: 2
    Dernier message: 14/02/2006, 23h33
  4. Réponses: 4
    Dernier message: 13/12/2005, 19h14
  5. HomeDB, oui mais comment ?
    Par Gregouz dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 27/10/2004, 16h27

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