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 :

Standalone Client et la bonne configuration côté client [EJB3]


Sujet :

Java EE

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 231
    Par défaut Standalone Client et la bonne configuration côté client
    BOnjour,

    J'ai déployé un module Ejb sur mon serveur GLASSFISH.

    Via une ligne de commande j'essai de lancer mon client qui appele via un Businness delegate et service locator mon EJB.

    Cependant quand j'execute mon client (via java - jar mon.jar), il me dit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Exception in thread "main" java.lang.NoClassDefFoundError: fr/hh/com/pers
    /Utilisateurs
            at hygienehospitaliere.Main.main(Main.java:49)
    Caused by: java.lang.ClassNotFoundException: fr.hh.com.persistence.Utilis
            at java.net.URLClassLoader$1.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClassInternal(Unknown Source)
            ... 1 more
    Alors la question se pose est ce que dans le jar de mon client je dois également mettre les remotes interfaces, les pojos et/ou les beans?

    Voici la classe de mon client:

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    package hygienehospitaliere;
     
    import fr.hh.com.delegate.InterlocuteursDelegate;
    import fr.hh.com.delegate.PrelevementDelegate;
    import fr.hh.com.delegate.PreleveurDelegate;
    import fr.hh.com.delegate.SiteDelegate;
    import fr.hh.com.delegate.UtilisateursDelegate;
    import fr.hh.com.persistence.Adresse;
    import fr.hh.com.persistence.CodeDr;
    import fr.hh.com.persistence.Commune;
    import fr.hh.com.persistence.Echantillon;
    import fr.hh.com.persistence.Etat;
    import fr.hh.com.persistence.Interlocuteurs;
    import fr.hh.com.persistence.Lot;
    import fr.hh.com.persistence.Pays;
    import fr.hh.com.persistence.Prelevement;
    import fr.hh.com.persistence.Preleveur;
    import fr.hh.com.persistence.Prestation;
    import fr.hh.com.persistence.Role;
    import fr.hh.com.persistence.Site;
    import fr.hh.com.persistence.Test;
    import fr.hh.com.persistence.TypeEchantillon;
    import fr.hh.com.persistence.TypeEtablissement;
    import fr.hh.com.persistence.TypePersonnel;
    import fr.hh.com.persistence.Utilisateurs;
    import java.util.ArrayList;
    import java.util.List;
    import util.Date;
     
    /**
     *
     * @author Benjamin
     */
    public class Main {
     
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
     
                // TODO code application logic here
                System.out.println("ok");
     
                Utilisateurs user = new Utilisateurs("coucou", "ererfdfdfdf");
                Utilisateurs user2 = new Utilisateurs("ere", "dfdfdfddfdf");
                System.out.println("ok");
                Adresse a = new Adresse("peupliers", "bat e", "appt 701");
                Pays pays = new Pays("France");
                Commune commune = new Commune("59000", "Lille");
                System.out.println("ok");
                Role role = new Role("Administrateur");
     
                a.setPays(pays);
                a.setMCommune(commune);
     
                user.setNom("david");
                user.setTelephone("343434");
                user.setFax("3434");
                user.setMail("sfdsd@sds.fr");
                user.setFonction("admin");
                user.setPortable("ererer");
                user.setPrenom("azerty");
                user.setAdresse(a);
                user.setMRole(role);
                UtilisateursDelegate.createPreleveur(user, a, role);
     
                user2.setNom("benj");
                user2.setTelephone("343434");
                user2.setFax("3434");
                user2.setMail("sfdsd@sds.fr");
                user2.setFonction("admin");
                user2.setPortable("ererer");
                user2.setPrenom("azerty");
                user2.setAdresse(a);
                user2.setMRole(role);
                UtilisateursDelegate.createPreleveur(user2, a, role);
     
                Interlocuteurs i = new Interlocuteurs();
                i.setNom("benj");
                i.setTelephone("343434");
                i.setFax("3434");
                i.setMail("sfdsd@sds.fr");
                i.setFonction("admin");
                i.setPortable("ererer");
                i.setPrenom("azerty");
                i.setAdresse(a);
                InterlocuteursDelegate.createInterlocuteurs(i, a);
     
                Site s = new Site();
                CodeDr code = new CodeDr("libell");
                TypeEtablissement type = new TypeEtablissement("li");
                TypePersonnel tp = new TypePersonnel("er");
                Prestation p = new Prestation("e");
                s.setNom("benj");
                s.setTelephone("343434");
                s.setFax("3434");
                s.setMail("sfdsd@sds.fr");
                s.setCodeApe("rrer");
                s.setSiret("er");
                s.setTypeClient(true);
                s.setCodeClient(45);
                s.setTypeEtablissement(type);
                s.setTypePersonnel(tp);
                s.setPrestation(p);
                SiteDelegate.createSite(s, a, code, type, tp, p);
     
                Preleveur preleveur = new Preleveur();
                preleveur.setNom("benj");
                preleveur.setTelephone("343434");
                preleveur.setFax("3434");
                preleveur.setMail("sfdsd@sds.fr");
                preleveur.setCodeApe("rrer");
                preleveur.setSiret("er");
                preleveur.setTypeClient(true);
                preleveur.setCodeClient(45);
                PreleveurDelegate.createPreleveur(preleveur, a);
     
                /*on initialise la date*/
                new util.Date();
                Prelevement prelevement = new Prelevement("EXH", new java.util.Date(Date.getDate()));
                prelevement.setSite(s);
                prelevement.setPreleveur(preleveur);
                TypeEchantillon typeEch = new TypeEchantillon("4N");
                Test test = new Test("YCG");
                List<Echantillon> liste = new ArrayList<Echantillon>();
                prelevement.setEchantillon(liste);
                Echantillon ech = new Echantillon();
     
                ech.setPrelevement(prelevement);
                //ech2.setPrelevement(prelevement);
                ech.setTypeEchantillon(typeEch);
     
                ech.setTest(test);
                //ech2.setTest(test);
                ech.setEtat(Etat.getEtat("Enregistré"));
                //ech2.setEtat(Etat.getEtat("Validé"));
                prelevement.getEchantillon().add(ech);
                //prelevement.getEchantillon().add(ech2);
                List<Lot> liste2 = new ArrayList<Lot>();
                ech.setLot(liste2);
                Lot lot = new Lot(23, 3, new java.util.Date(Date.getDate()));
                Lot lot2 = new Lot(233, 3, new java.util.Date(Date.getDate()));
                lot.setEchantillon(ech);
                lot2.setEchantillon(ech);
                ech.getLot().add(lot);
                ech.getLot().add(lot2);
     
                PrelevementDelegate.createPrelevement(prelevement, s, preleveur);
     
        }
     
    }

    Merci d'avance.

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    bonjour,

    je crois que oui, enfin moi je procède de cette façon.
    mon client possède toutes les interfaces remote

    maintenant je ne sais pas si dans la pratique cela se fait.
    Mais logiquement tu es obligé car ton client va récupérer via un lookup une référence à une interface distante. Si il ne la possède pas lui même comment peut il connaitre le type ?

    il faut savoir (corrigez moi si je me trompe) que l'appel distant est différent de l'appel local, en effet par appel distant, tu récupère une référence de l'interface et non une copie (notion de passage par valeur ou par référence cela diffère en fonction du mode d'appel)

    je ne suis pas sur de la justesse de mes propos, cela n'est qu'un avis car j'en ai déjà entendu parler, mais si ça peut te permettre d'avancer en attendant un autre avis

    donc à mon sens je dirai que oui (pour le interfaces que tu récupère par le biais d'un look up).

    bon courrage

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 231
    Par défaut
    OK je précise mon business interface et mon service locator

    Business Delegate

    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
    58
    59
    60
    61
    package fr.hh.com.delegate;
     
     
    import fr.hh.com.locator.ServiceLocator;
    import fr.hh.com.persistence.Adresse;
    import fr.hh.com.persistence.Commune;
    import fr.hh.com.persistence.Pays;
    import fr.hh.com.persistence.Role;
    import fr.hh.com.persistence.Utilisateurs;
    import fr.hh.com.session.utilisateurs.UtilisateursRemote;
     
     
     
     
    /**
     * This class follows the Delegate design pattern. It's a one to one method
     * with the CustomerBean class. Each method delegates the call to the
     * CustomerBean class
     */
    public final class UtilisateursDelegate {
     
     
        public static Utilisateurs createPreleveur(Utilisateurs u,Adresse a,Role r) {
            return getUtilisateursRemote().createUtilisateurs(u, r, a);
        }
     
            public static Boolean paysExisteB(Pays pays){
            return getUtilisateursRemote().paysExisteB(pays);
        }
     
        public static Pays findPays(Long id){
            return getUtilisateursRemote().findPays(id);
        }
     
        public static Long paysExiste(Pays pays){
            return getUtilisateursRemote().paysExiste(pays);
        }
     
        public static Boolean communeExisteB(Commune commune){
            return getUtilisateursRemote().communeExisteB(commune);
        }
     
        public static Commune findCommune(Long id){
            return getUtilisateursRemote().findCommune(id);
        }
     
        public static Long communeExiste(Commune commune){
            return getUtilisateursRemote().communeExiste(commune);
        }
     
     
     
        // ======================================
        // =            Private methods         =
        // ======================================
        private static UtilisateursRemote getUtilisateursRemote() {
            UtilisateursRemote utilisateursRemote;
           utilisateursRemote = (UtilisateursRemote) ServiceLocator.getInstance().getRemoteInterface("ejb/stateless/Utilisateurs");
            return utilisateursRemote;
        }
    }
    mon Service Locator
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package fr.hh.com.locator;
     
    import fr.hh.com.exception.ServiceLocatorException;
    import java.util.HashMap;
    import java.util.Map;
    import javax.jms.ConnectionFactory;
    import javax.jms.Destination;
    import javax.naming.Context;
    import javax.naming.InitialContext;
     
    /**
     *
     * @author Benjamin
     */
    public class ServiceLocator {
     
        private final String cname = this.getClass().getName();
        private Context initalContext;
        private Map<String, Object> cache;
        // ======================================
        // =             Singleton              =
        // ======================================
        private static final ServiceLocator instance = new ServiceLocator();
     
        public static ServiceLocator getInstance() {
            return instance;
        }
     
        private ServiceLocator() throws ServiceLocatorException {
            try {
                initalContext = new InitialContext();
                cache = new HashMap<String, Object>();
            } catch (Exception e) {
                throw new ServiceLocatorException(e);
            }
        }
     
        /* @param jndiName JNDI name of the EJB that we are looking for
         * @return the EJB Home corresponding to the homeName
         * @throws ServiceLocatorException thrown if lookup problems
         */
        public Object getRemoteInterface(String jndiName) throws ServiceLocatorException {
            String methodName = "getRemoteInterface";
     
            Object remoteInterface = getRemoteObject(jndiName);
            return remoteInterface;
        }
     
        private synchronized Object getRemoteObject(String jndiName) throws ServiceLocatorException {
            String methodName = "getObject";
     
     
            Object remoteObject = cache.get(jndiName);
            if (remoteObject == null) {
                try {
                    remoteObject = initalContext.lookup(jndiName);
                    cache.put(jndiName, remoteObject);
                } catch (Exception e) {
                    throw new ServiceLocatorException(e);
                }
            }
            return remoteObject;
        }
     
        public ConnectionFactory getConnectionFactory(String connFactoryName) throws ServiceLocatorException {
            String methodName = "getConnectionFactory";
     
            ConnectionFactory factory = (ConnectionFactory) getRemoteObject(connFactoryName);
            return factory;
        }
     
        public Destination getDestination(String destinationName) {
            String methodName = "getDestination";
     
            Destination destination = (Destination) getRemoteObject(destinationName);
            return destination;
        }
     
    }

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 156
    Par défaut
    Il Il semblerait qu'en plus, les classes de tes entités ne soit pas intégrés à ton Jar car c'est d'abord la classe Utilisateur qui n'est pas trouvé.
    De plus je doute q'un java -jar LeJAR.jar soit suffisant pour faire fonctionner le client, car il faut coté client quelques classes J2EE et/ou spécifiques à ton serveur d'appli.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 231
    Par défaut
    Citation Envoyé par phantomass Voir le message
    Il Il semblerait qu'en plus, les classes de tes entités ne soit pas intégrés à ton Jar car c'est d'abord la classe Utilisateur qui n'est pas trouvé.
    Effectivement , Alors je dois egalement mettre mes pojos (ici utilisateurs) dans le client?
    ALors quel est l interet de faire un module ejb? si il ne met pas les pojos a disposition. La j'ai du louper un principe. Je vais vérifier.
    Citation Envoyé par phantomass Voir le message
    De plus je doute q'un java -jar LeJAR.jar soit suffisant pour faire fonctionner le client, car il faut coté client quelques classes J2EE et/ou spécifiques à ton serveur d'appli.
    Oui tout a fait j'inclu pas mal de librairies dans mon client comme appserver-rt.jar ou j2ee.jar, pas mal d'autres qui font références à glassfish.

    A savoir que sous netbeans le run de l application client fonctionne à merveille.

    Par ailleurs dans mon jar du client , il comprend également le jar du module ejb. N'est ce pas suffisant pour les entity?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 231
    Par défaut
    BOn j'ai ajouté à mon client les pojos et les remote.

    Je run à nouveau.

    Et j'ai a nouveau une erreur. A savoir que dans netbeans cela marche parfaitement.

    Erreur:

    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
    Exception in thread "main" fr.hh.com.exception.ServiceLocatorException: javax.
    ming.NoInitialContextException: Need to specify class name in environment or s
    tem property, or as an applet parameter, or in an application resource file:
    va.naming.factory.initial
            at fr.hh.com.locator.ServiceLocator.getRemoteObject(ServiceLocator.jav
    63)
            at fr.hh.com.locator.ServiceLocator.getRemoteInterface(ServiceLocator.
    va:49)
            at fr.hh.com.delegate.UtilisateursDelegate.getUtilisateursRemote(Utili
    teursDelegate.java:58)
            at fr.hh.com.delegate.UtilisateursDelegate.createPreleveur(Utilisateur
    elegate.java:24)
            at hygienehospitaliere.Main.main(Main.java:80)
    Caused by: javax.naming.NoInitialContextException: Need to specify class name
     environment or system property, or as an applet parameter, or in an applicati
     resource file:  java.naming.factory.initial
            at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
            at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
            at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
            at javax.naming.InitialContext.lookup(Unknown Source)
            at fr.hh.com.locator.ServiceLocator.getRemoteObject(ServiceLocator.jav
    60)
            ... 4 more
    Mon main reste le meme. Apparemment c est dans mon serviceLocator qu il foire.

    Ca doit etre un probleme de jndi. J'ai crée un fichier jndi.properties.

    Alors que dans mon serviceLocator, il crée le initialContext.

  7. #7
    Invité(e)
    Invité(e)
    Par défaut
    il y'a deux façon de définir le context:

    soit par un fichier de configuration:
    tu cré un fichier appelé jndi.properties qui contiendra ces lignes(à configuré en fonction de toi)

    moi j'utilise Jboss mais le principe reste le même je pense

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
    java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
    java.naming.provider.url=localhost:1199  //port à paramétrer
    ou alors tu définis un environnement pour ton context:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Hashtable<String, Object> env = new Hashtable<String, Object>();
    env.put("jndi","org.jnp.interfaces.NamingContextFactory");
     
    try {
     
    	Context oContext = new InitialContext(env);
    	TonInterface oCatalogue_int=(TonInterface )oContext.lookup("le nom donné à ton ejb");
    }
    catch(Exception e){
    }
    j'espère avoir répondu à ta question

    bon courrage

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 231
    Par défaut
    je précise que j'ai le appserv-rt.jar dans les librairies de l'appli cliente

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 156
    Par défaut
    Citation Envoyé par skyangel Voir le message
    Effectivement , Alors je dois egalement mettre mes pojos (ici utilisateurs) dans le client?
    ALors quel est l interet de faire un module ejb? si il ne met pas les pojos a disposition. La j'ai du louper un principe. Je vais vérifier.
    Si tu utilises concretement tes entités coté client il est normal quel soit disponibles dans le classpath du client.
    Tout simplement, déjà toute les classes neccessaires à la compilation de ton projet sont neccessaire à l'execution de ton projet.

    L'interet d'utliser les EJB sont :
    - Utilisation d'objet distant.
    - Integration des services JEE (support transactionnel, support de la sécurité etc ..)
    Effectivement si tu n'utilise ni accès distant, ni démarcation transationnelle, ni sécurité au niveau d'appel de méthodes etc .. (et j'en oublie) il est fort probable que les EJB ne soient pas neccessaire et qu'un framework à la Spring soit amplement suffisant.

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 156
    Par défaut
    Comme te l'as dit Amazoone il y a une petite étape de configration ou de programmation pour "parametrer" ton accès à l'annu JNDI.
    Regarde la documentation de ton serveur d'appli sur ce sujet.

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

Discussions similaires

  1. Configuration ORACLE CLIENT 11
    Par BI2020 dans le forum Oracle
    Réponses: 10
    Dernier message: 23/06/2011, 15h40
  2. [WS 2003] dhcp configuration du client et du serveur ?
    Par delphino7 dans le forum Windows Serveur
    Réponses: 7
    Dernier message: 20/04/2009, 17h25
  3. Configuration du client OpenLDAP Solaris 10
    Par photorelief dans le forum Solaris
    Réponses: 2
    Dernier message: 19/03/2009, 15h04
  4. comment configurer des clients linux avec un controleur de domaine linux
    Par assousoft dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 19/11/2008, 15h55
  5. Problème configuration dhcp3-client
    Par ibtisss dans le forum Administration système
    Réponses: 2
    Dernier message: 25/09/2006, 17h10

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