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 :

Passage d'une implémentation JPA sur le client aux accès EJB


Sujet :

Java EE

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Points : 50
    Points
    50
    Par défaut Passage d'une implémentation JPA sur le client aux accès EJB
    Bonjour,

    J'ai développer une application MDI utilisant JPA (architecture 2-tiers). Vu que le fait d'avoir une implémentation JPA pour chaque client n'est pas top (beaucoup d'utilisateurs), je suis passé sur une architecture 3-tiers avec Glasssifsh V3.
    Mes EJB sont créés et sont fonctionnels, le problème vient du fait que je n'arrive pas à y accéder avec mon client.
    J'ai quelques petites questions:

    1- Les lib à importer dans le client sont-elles bien le j2ee.jar et gf-client.jar de Glassfish?
    2- En quoi faire un client J2EE serait mieux qu'un stand alone à part pour le déploiement web start?
    3- En initialisant le contexte avec les propriétés adéquates, je n'arrive toujours pas à acceder aux EJB avec un ServiceLocator. J'ai également ajouter le projet EJB en tant qu'import pour le client (je bosse sur NetBeans).

    Voici l'initialisation dans le constructeur du ServiceLocator:
    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
     
    private ServiceLocator() throws NamingException {
     
            Properties props = new Properties();
     
            props.setProperty("java.naming.factory.initial",
                    "com.sun.enterprise.naming.SerialInitContextFactory");
     
            props.setProperty("java.naming.factory.url.pkgs",
                    "com.sun.enterprise.naming");
     
            props.setProperty("java.naming.factory.state",
                    "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
     
     
            // optional.  Defaults to localhost.  Only needed if web server is running
            // on a different host than the appserver
            props.setProperty("org.omg.CORBA.ORBInitialHost", "192.168.1.4");
     
            // optional.  Defaults to 3700.  Only needed if target orb port is not 3700.
            props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
     
            ic = new InitialContext(props);
            cache = Collections.synchronizedMap(new HashMap<String, Object>());
        }
    Voici un petit main pour tester:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public static void main(String[] args) throws NamingException {
            // TODO code application logic here
            IDaoReportingRemote dao = (IDaoReportingRemote)vision20.dao.ServiceLocator.getInstance().getEJB("ejb.daoreporting");
            Personne p = dao.getPersonne("john.smith", "pass");
            System.out.println("personne: "+p);
        }
    Voici mon exception:
    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
     
    Exception in thread "main" java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/ejb/RemoveException
            at java.lang.ClassLoader.defineClass1(Native Method)
            at java.lang.ClassLoader.defineClass(ClassLoader.java:698)
            at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
            at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
            at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:315)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:330)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:250)
            at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:398)
            at java.lang.Class.getDeclaredMethods0(Native Method)
            at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
            at java.lang.Class.privateGetPublicMethods(Class.java:2547)
            at java.lang.Class.privateGetPublicMethods(Class.java:2557)
            at java.lang.Class.privateGetPublicMethods(Class.java:2557)
            at java.lang.Class.getMethods(Class.java:1410)
            at com.sun.corba.ee.impl.presentation.rmi.IDLTypesUtil.validateRemoteInterface(IDLTypesUtil.java:92)
            at com.sun.corba.ee.impl.presentation.rmi.IDLNameTranslatorImpl.<init>(IDLNameTranslatorImpl.java:234)
            at com.sun.corba.ee.impl.presentation.rmi.IDLNameTranslatorImpl.<init>(IDLNameTranslatorImpl.java:67)
            at com.sun.corba.ee.impl.presentation.rmi.IDLNameTranslatorImpl$2.run(IDLNameTranslatorImpl.java:177)
            at com.sun.corba.ee.impl.presentation.rmi.IDLNameTranslatorImpl$2.run(IDLNameTranslatorImpl.java:175)
            at java.security.AccessController.doPrivileged(Native Method)
            at com.sun.corba.ee.impl.presentation.rmi.IDLNameTranslatorImpl.get(IDLNameTranslatorImpl.java:174)
            at com.sun.corba.ee.impl.presentation.rmi.PresentationManagerImpl$ClassDataImpl.<init>(PresentationManagerImpl.java:153)
            at com.sun.corba.ee.impl.presentation.rmi.PresentationManagerImpl.getClassData(PresentationManagerImpl.java:125)
            at com.sun.corba.ee.impl.presentation.rmi.StubFactoryFactoryDynamicBase.createStubFactory(StubFactoryFactoryDynamicBase.java:93)
            at com.sun.corba.ee.impl.util.Utility.loadStub(Utility.java:827)
            at com.sun.corba.ee.impl.javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:248)
            at javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:137)
            at com.sun.ejb.EJBUtils.lookupRemote30BusinessObject(EJBUtils.java:402)
            at com.sun.ejb.containers.RemoteBusinessObjectFactory.getObjectInstance(RemoteBusinessObjectFactory.java:70)
            at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
            at com.sun.enterprise.naming.impl.SerialContext.getObjectInstance(SerialContext.java:472)
            at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:437)
            at javax.naming.InitialContext.lookup(InitialContext.java:392)
            at vision20.dao.ServiceLocator.lookup(ServiceLocator.java:73)
            at vision20.dao.ServiceLocator.getEJB(ServiceLocator.java:80)
            at vision20.Main.main(Main.java:23)
    Si quelqu'un peut m'aider à résoudre cette énigme, cela m'enlèverait une grosse épine du pied! ^^
    Merci

  2. #2
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Points : 50
    Points
    50
    Par défaut
    Apparemment en consultant correctement l'exception, j'ai noté qu'il y avait un problème de recherche d'implémentation pour les appels EJB, j'ai donc testé avec d'autre API de Glassfish: remplacer la bibliothèque J2EE de Netbeans par javax.ejb.jar de Glassfish et ça fonctionne.
    Il ne me reste plus qu'à trouver la bibliothèque pour JMS et les Session JavaMail.

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Points : 50
    Points
    50
    Par défaut
    J'arrive à faire marcher mon projet sous NetBeans mais pas quand je lance le jar avec java -jar bien que le dossier lib contienne toutes les librairies que j'utilise dans NetBeans.
    Apparemment, l'implementation du SerialInitContextFactory n'est pas accessible:
    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
     
    Exception in thread "main" java.lang.ExceptionInInitializerError
    	at vision20.Main.main(Main.java:25)
    Caused by: java.lang.RuntimeException: javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.enterprise.naming.SerialInitContextFactory [Root exception is java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory]
    	at vision20.dao.ServiceLocator.<clinit>(ServiceLocator.java:37)
    	... 1 more
    Caused by: javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.enterprise.naming.SerialInitContextFactory [Root exception is java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory]
    	at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:657)
    	at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
    	at javax.naming.InitialContext.init(InitialContext.java:223)
    	at javax.naming.InitialContext.<init>(InitialContext.java:197)
    	at vision20.dao.ServiceLocator.<init>(ServiceLocator.java:63)
    	at vision20.dao.ServiceLocator.<clinit>(ServiceLocator.java:35)
    	... 1 more
    Caused by: java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory
    	at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:315)
    	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:330)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:250)
    	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:398)
    	at java.lang.Class.forName0(Native Method)
    	at java.lang.Class.forName(Class.java:247)
    	at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:46)
    	at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:654)
    	... 6 more
    Please... Help...

  4. #4
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Citation Envoyé par saveriu Voir le message
    Apparemment en consultant correctement l'exception, j'ai noté qu'il y avait un problème de recherche d'implémentation pour les appels EJB, j'ai donc testé avec d'autre API de Glassfish: remplacer la bibliothèque J2EE de Netbeans par javax.ejb.jar de Glassfish et ça fonctionne.
    Tu viens de me sauver la vie
    J'essaie de trouver une solution depuis 3 jours sans succes, alors que la solution est juste là.
    Merci

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Points : 50
    Points
    50
    Par défaut
    Ce fut un plaisir ^^.

  6. #6
    Membre habitué Avatar de zolive
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 152
    Points : 137
    Points
    137
    Par défaut
    Citation Envoyé par darrylsite Voir le message
    Tu viens de me sauver la vie
    J'essaie de trouver une solution depuis 3 jours sans succes, alors que la solution est juste là.
    Merci
    Est ce que vous utilisez maven et si oui pouvez vous poster votre pom.xml
    Je ne comprends pas bien ce que vous entendez par
    "remplacer la bibliothèque J2EE de Netbeans par javax.ejb.jar de Glassfish et ça fonctionne. "
    Netbeans ne devrait pas intervenir dans la compil non ?

  7. #7
    Membre éclairé Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Points : 718
    Points
    718
    Par défaut
    Je ne sais pas si ça a changé pour glassfish v3 mais sur la v2 (et 2.1)

    Il fallait également importer certaine des librairies appserv-*.jar

  8. #8
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Citation Envoyé par Heimdal Voir le message
    Je ne sais pas si ça a changé pour glassfish v3 mais sur la v2 (et 2.1)

    Il fallait également importer certaine des librairies appserv-*.jar
    ça n'a pas changé.

  9. #9
    Membre éclairé Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Points : 718
    Points
    718
    Par défaut
    Le truc reste de parcourir les jar de glassfish a la recherche de la classe:

    com.sun.enterprise.naming.SerialInitContextFactory.

    Une fois le jar identifié, ajoute le au classpath

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par saveriu Voir le message
    Apparemment en consultant correctement l'exception, j'ai noté qu'il y avait un problème de recherche d'implémentation pour les appels EJB, j'ai donc testé avec d'autre API de Glassfish: remplacer la bibliothèque J2EE de Netbeans par javax.ejb.jar de Glassfish et ça fonctionne.
    Il ne me reste plus qu'à trouver la bibliothèque pour JMS et les Session JavaMail.

    A moi aussi tu viens de me sauver la vie...ok pas la vie mais qqe heures de sommeils quand-même

  11. #11
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Points : 50
    Points
    50
    Par défaut
    Et bien tant mieux , un forum est fait pour ça.

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/06/2015, 14h38
  2. Déployer une application Swing sur poste client
    Par patnership dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 18/03/2015, 19h46
  3. Installer une distrib linux sur un client léger
    Par kinect dans le forum Linux
    Réponses: 3
    Dernier message: 17/04/2013, 08h58
  4. Installer une distrib linux sur un client léger
    Par kinect dans le forum Embarqué
    Réponses: 0
    Dernier message: 15/04/2013, 20h46
  5. Ouvrir une page web sur un client à partir d'un serveur
    Par Maestro57 dans le forum Langage
    Réponses: 6
    Dernier message: 04/04/2008, 08h24

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