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

JOnAS Java Discussion :

[DEBUTANT][JONAS] Communication Client et Bean


Sujet :

JOnAS Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 15
    Points : 8
    Points
    8
    Par défaut [DEBUTANT][JONAS] Communication Client et Bean
    Bonjour,

    J'ai suivi le tutorial "Création d'un premier EJB avec Eclipse et JOnAS", très bien fait soit dis en passant.
    J'arrive sans problème à utiliser mon bean HelloWorld avec un client applicatif et un client applet en les exécutant directement d'Eclipse.

    Cependant, je ne sais pas comment faire pour les exporter pour qu'il soit exécutable sans Ecplise.
    J'ai fait exporter en Jar avec Eclipse, j'ai ajouté les classes manquantes de l'ejb-2_1-api.jar de Jonas directement dans le Jar crée par Eclipse.

    Les programmes s'exécutent correctement mais dès que j'essaye de me connecter au bean, j'ai la même erreur qui ressort :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Impossible de trouver HelloWorldHome
    javax.naming.CommunicationException [Root exception is java.rmi.UnmarshalExcepti
    on: error unmarshalling return; nested exception is:
            java.io.StreamCorruptedException]
            at com.sun.jndi.rmi.registry.RegistryContext.lookup(Unknown Source)
            at com.sun.jndi.rmi.registry.RegistryContext.lookup(Unknown Source)
            at javax.naming.InitialContext.lookup(Unknown Source)
            at helloWorld.HelloWorldClient$AL1.actionPerformed(HelloWorldClient.java
    Voici le code de mon bouton qui appelle le bean :
    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
       class AL1 implements ActionListener {
            public void actionPerformed(ActionEvent e) {
            	// Get InitialContext
        		try {
        		    ctx = getInitialContext();
        		} catch (NamingException ex) {
        			System.out.println("Impossible de trouver le JNDI");
        		    ex.printStackTrace();
        		    System.exit(2);
        		}
     
        		// Lookup bean home 
        		String bName = "HelloWorldHome";
        		try {
        		    home = (HelloWorldHome) PortableRemoteObject.narrow(ctx.lookup(bName), HelloWorldHome.class);
        		    HelloWorld bean = home.create();
        	        message.setText(bean.hello());
        		} catch(Exception ex) {
        			System.out.println("Impossible de trouver HelloWorldHome");
        		    ex.printStackTrace();
        		    System.exit(2);
        		}
            }
          }    
     
        static private Context getInitialContext()throws NamingException
    	{
            String url = "rmi://localhost:1099";
     
      	 // Get an InitialContext
      		Properties h = new Properties();
      		h.put(Context.INITIAL_CONTEXT_FACTORY,
      		  "com.sun.jndi.rmi.registry.RegistryContextFactory");
      		h.put(Context.PROVIDER_URL, url);
      		return new InitialContext(h);
    	}
    Ce qui est ennuyeux, ce que les 2 clients (applet ou application) marchent sans problème sous Eclipse.
    Merci d'avance.

  2. #2
    Membre actif

    Inscrit en
    Novembre 2003
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 168
    Points : 232
    Points
    232
    Par défaut
    Salut,

    Vérifie tout d'abord ça :
    - que ton bean est bien déployé
    - que le jar de ton bean contient les stub et skeleton générés pas GenIC

    Mais je pense que ton erreur vient du fait que les fichiers .class des interface Home et Remote ne sont pas accessibles à ton programme. Vérifie bien qu'elles se trouvent dans le classpath, car ces deux fichiers sont nécessaire côté client, par exemple si tu as des servlet qui utilisent l'EJB ces deux fichiers doivent être stockés dans ton fichier .war

    raconte moi ce que cela donne
    à tte

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    J'ai vérifié dans mon bean, j'ai bien les stubs et les skeletons crées par GenIC. Il est bien déployé aussi, j'ai vérifié dans la console admin de Jonas et j'arrive à faire marche mon client d'Eclipse.

    Dans le .jar de mon client, j'ai inclus les les fichiers .class des interface Home et Remote (HelloWorldHome.class et HelloWorld.class).

    Pour mon client, je n'utilise pas des servlets mais un applet se connectant directement au bean. Ceci est bien réalisable, non ?

    Mon problème doit surement venir de la construction de mon jar, il doit lui manquer qq . Pour le créer, je le fais par la méthode export d'Eclipse.
    Il me met les fichiers suivants :
    • build.xml
      HelloWorld.class
      HelloWorld.xml
      HelloWorldClient.class
      HelloWorldEJB.class
      HelloWorldHome.class
      jonas-HelloWorld.xml
      MANIFEST.MF


    Merci de bien vouloir m'aider

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Ca y est !! j'ai trouvé

    Le problème venait du fait que je n'incluais pas les libs de jonas dans mon classpath, celles-ci sont automatiquement mises lors de la création d'un projet sous Eclipse.

    Mon problème maintenant est que je voulais que cette applet puisse être utilisé sur un réseau et je ne peux pas ajouter dans le .jar de mon client les libs de Jonas (qui font plus de 8 mo !! ).

    Quelqu'un aurait-il une petite idée pour limiter ces libs ? Ou suis-je obligé de les fournir aux utilisateurs et leur faire un programme d'installation?

    Merci d'avance.

    PS : j'ai crée un .bat de lancer une application sans avoir à ajouter les libs de jonas au CLASSPATH.
    Pour ceux que ça intéresse :
    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
    @echo off
     
    set cp=.
    set cp=%cp%;JONAS_ROOT/lib/commons/j2ee/mail.jar
    set cp=%cp%;JONAS_ROOT/lib/commons/j2ee/jts-spec1_0.jar
    set cp=%cp%;JONAS_ROOT/lib/commons/j2ee/jta-spec1_0_1.jar
    set cp=%cp%;JONAS_ROOT/lib/commons/j2ee/jms.jar
    set cp=%cp%;JONAS_ROOT/lib/commons/j2ee/jacc-1_0.jar
    set cp=%cp%;JONAS_ROOT/lib/commons/j2ee/javax77.jar
    set cp=%cp%;JONAS_ROOT/lib/commons/j2ee/ejb-2_1-api.jar
    set cp=%cp%;JONAS_ROOT/lib/commons/j2ee/connector-1_5.jar
    set cp=%cp%;JONAS_ROOT/lib/commons/j2ee/activation.jar
    set cp=%cp%;JONAS_ROOT/lib/commons/jonas/axis/axis.jar
    set cp=%cp%;JONAS_ROOT/lib/commons/j2ee/jaxrpc.jar
    set cp=%cp%;JONAS_ROOT/lib/commons/j2ee/jaxrpc.jar
    set cp=%cp%;JONAS_ROOT/lib/commons/j2ee/saaj.jar
    set cp=%cp%;JONAS_ROOT/lib/commons/jonas/jakarta-commons/commons-logging-api.jar
    set cp=%cp%;JONAS_ROOT/lib/commons/jonas/ow_jonas.jar
    set cp=%cp%;JONAS_ROOT/lib/commons/jonas/jotm.jar
    set cp=%cp%;JONAS_ROOT/lib/commons/jonas/carol/ow_carol_core.jar
    set cp=%cp%;JONAS_ROOT/lib/commons/j2ee/jsp-2_0.jar
    set cp=%cp%;JONAS_ROOT/lib/commons/j2ee/servlet-2_4.jar
    set cp=%cp%;JONAS_ROOT/ejbjars/helloWorld.jar
    set cp=%cp%;LIEN_VERS_LE_JAR_DU_CLIENT
     
    java -cp %cp% %1
    Il vous suffit de remplacer JONAS_ROOT par le dossier d'installation de Jonas. Vous lancez par ex : ->Appli.bat HelloWorldClient

  5. #5
    Membre actif

    Inscrit en
    Novembre 2003
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 168
    Points : 232
    Points
    232
    Par défaut
    J'ai eu le même problème quand je développais une Applet accédant à une base de données SQL Server. Heureusement, le pilote JDBC de SQL Server ne pesait que qlq 44 ko.

    Pour toi mnt sache que t'as pas besoin de tous ces jars pour ton applet !!!
    je pense que au max t'aura besoin de :

    set cp=%cp%;JONAS_ROOT/lib/commons/j2ee/ejb-2_1-api.jar
    set cp=%cp%;JONAS_ROOT/lib/commons/jonas/ow_jonas.jar

    tu les met dans le jar de ton applet avc (les .class des interfaces Home et Remote)

    et bien sur dis moi ce que cela donne (mon cobbaye)

    @++

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    J'ai fait un dossier avec mon applet et toutes les libs decompresses, ca marchait.
    Je les ai enleve une à une pour limiter au maximum les fichiers nécessaires.

    Je n'ai pas fait de jar (pas le temps et un peu la flemme ^^). C'est juste pour un test.

    Au final, je me suis retrouvé avec :
    • javax/ejb
      javax/ressource
      javax/transaction
      javax/xml
      org/objectweb

    Je pense qu'on peut encore plus limiter mais je n'ai plus trop le tps.
    Citation Envoyé par Benzeghiba
    set cp=%cp%;JONAS_ROOT/lib/commons/j2ee/ejb-2_1-api.jar
    set cp=%cp%;JONAS_ROOT/lib/commons/jonas/ow_jonas.jar
    J'ai essaye avec ces 2 libs seulement, ce n'est pas suffisant.
    Lorsque j'aurais fini complètement mon applet, je posterai les différentes libs en détails qu'il faut garder.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant][PS2] Communication avec lecteur code-barre
    Par FreeCake dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 24/02/2006, 15h14
  2. [Architecture] communication client/serveur client/client
    Par daed dans le forum Général Java
    Réponses: 4
    Dernier message: 28/01/2006, 23h23
  3. [Réseau][Débutant]Application Serveur/Client par TCP/IP
    Par Belegkarnil dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 13/11/2005, 13h39
  4. [Eclipse / Jonas] Erreur "jonas-entity missing for bean"
    Par citygirl dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 16/05/2005, 11h59
  5. [DEBUTANT] [STRUTS]Creation d'un bean init
    Par grizzz dans le forum Struts 1
    Réponses: 3
    Dernier message: 25/02/2005, 09h54

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