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 :

Accéder à un bean local au lieu d'un bean remote


Sujet :

Java EE

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 242
    Par défaut Accéder à un bean local au lieu d'un bean remote
    Bonjour,

    J'ai dans un EAR : un projet appli cliente, un projet ejb et un projet jpa.

    Voici le main de l'appli cliente :

    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
    public static void main(String[] args) {
            try {
    
                Context context = new InitialContext();
    
                GestionClient gestionClient = (GestionClient) context
                        .lookup("entreprise-ear/GestionClientBean/remote");
    
                Client client = gestionClient.getClientById(1);
                System.out.println(client.getId() + " " + client.getNom());
                
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    Ce main fonctionne.

    Maintenant, je passe le Bean GestionClientBean en @Local et je change la ligne du main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    GestionClient gestionClient = (GestionClient) context
                        .lookup("entreprise-ear/GestionClientBean/local");
    ... mais cela ne fonctionne plus.

    J'ai aussi essayé de réaliser une injection EJB juste avant le main comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @EJB
    private static GestionClientBean gestionClient;
    ... mais cela ne fonctionne pas n'ont plus.

    Pourquoi ?

    Merci d'avance.

  2. #2
    Membre extrêmement actif Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 242
    Par défaut
    Pourtant au démarrage du serveur j'obtiens le log suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    16:55:48,763 INFO  [JndiSessionRegistrarBase] Binding the following Entries in Global JNDI:
     
        entreprise-ear/GestionClientBean/local - EJB3.x Default Local Business Interface
        entreprise-ear/GestionClientBean/local-com.GestionClient - EJB3.x Local Business Interface
    A+

  3. #3
    Membre expérimenté Avatar de sewatech
    Inscrit en
    Février 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Février 2007
    Messages : 141
    Par défaut
    En lançant le main, tu le lance dans un processus indépendant de ton serveur. Dans ces conditions, tu ne peux pas accéder aux EJB locaux.

    Les EJB locaux ne sont accessibles que depuis d'autres EJB ou une application Web.

    Alexis

  4. #4
    Rédacteur
    Avatar de longbeach
    Profil pro
    Architecte de système d’information
    Inscrit en
    Avril 2003
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Avril 2003
    Messages : 943
    Par défaut
    Citation Envoyé par sewatech Voir le message
    En lançant le main, tu le lance dans un processus indépendant de ton serveur. Dans ces conditions, tu ne peux pas accéder aux EJB locaux.

    Les EJB locaux ne sont accessibles que depuis d'autres EJB ou une application Web.

    Alexis
    Non, tu peux accéder à des EJB locaux depuis une méthode main() .

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Quand on parle de local, c'est par rapport à la JVM pas à la machine, donc le main d'une classe qui essaie d'accéder à un EJB déployé sur un serveur d'application doit faire un accès remote comme l'a dit sewatech.

  6. #6
    Membre extrêmement actif Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 242
    Par défaut
    Citation Envoyé par fr1man Voir le message
    Quand on parle de local, c'est par rapport à la JVM pas à la machine, donc le main d'une classe qui essaie d'accéder à un EJB déployé sur un serveur d'application doit faire un accès remote comme l'a dit sewatech.
    Mais j'ai un ear qui contient l'application, les ejb et les jpa.

    Quand on lance l'application elle devrait faire partie de la même JVM que les ejb et les jpa ?

    A moins qu'il y a une nuance que je n'ai pas compris.

    A+

  7. #7
    Rédacteur
    Avatar de longbeach
    Profil pro
    Architecte de système d’information
    Inscrit en
    Avril 2003
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Avril 2003
    Messages : 943
    Par défaut
    Quelle erreur est affichée ?
    Fais voir les logs d'erreur.

    Quel serveur d'application tu utilises ?

  8. #8
    Membre extrêmement actif Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 242
    Par défaut
    Citation Envoyé par longbeach Voir le message
    Quelle erreur est affichée ?
    Fais voir les logs d'erreur.

    Quel serveur d'application tu utilises ?
    J'utilise JBoss et en effet il y a plein d'exceptions dans le boot.log de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    17:37:46,076 DEBUG [BeanMetaDataICF] Failed to get property value for bean: org.jboss.beans.metadata.plugins.AbstractBeanMetaData, property: properties
    java.lang.IllegalArgumentException: Property is not readable: propertyReplace for org.jboss.beans.metadata.plugins.AbstractPropertyMetaData
        at org.jboss.beans.info.plugins.DefaultPropertyInfo.get(DefaultPropertyInfo.java:131)
        at ............................................... SUITE ....................................................
    org.jboss.bootstrap.AbstractServerImpl.start(AbstractServerImpl.java:405)
        at org.jboss.Main.boot(Main.java:209)
        at org.jboss.Main$1.run(Main.java:547)
        at java.lang.Thread.run(Unknown Source)
    ... et comme celle-là :

    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
    17:37:46,124 DEBUG [BeanMetaDataICF] Failed to get property value for bean: org.jboss.beans.metadata.plugins.AbstractBeanMetaData, property: properties
    java.lang.IllegalArgumentException: Property is not readable: propertyReplace for org.jboss.beans.metadata.plugins.AbstractPropertyMetaData
        at org.jboss.beans.info.plugins.DefaultPropertyInfo.get(DefaultPropertyInfo.java:131)
        at .......................................... SUITE ..........................................
    org.jboss.bootstrap.AbstractServerImpl.start(AbstractServerImpl.java:405)
        at org.jboss.Main.boot(Main.java:209)
        at org.jboss.Main$1.run(Main.java:547)
        at java.lang.Thread.run(Unknown Source)
     
    17:37:46,125 DEBUG [ProfileServiceBootstrap] Created ManagedObject: ManagedObject{bindings-classloader:0.0.0$MODULE} for bean: bindings-classloader:0.0.0$MODULE
    17:37:46,125 DEBUG [ProfileServiceBootstrap] Created ManagedComponent of type: ComponentType{type=MCBean, subtype=*} for bean: bindings-classloader:0.0.0$MODULE
    17:37:46,125 DEBUG [BeanMetaDataICF] Using bean class:, class org.jboss.services.binding.impl.PojoServiceBindingStore for bean: AbstractBeanMetaData@1f2412a{name=ServiceBindingStore bean=org.jboss.services.binding.impl.PojoServiceBindingStore properties=[standardBindings, serviceBindingSets] classLoader=AbstractClassLoaderMetaData@1eea7f0{classloader=AbstractDependencyValueMetaData@16a8823{value=bindings-classloader:0.0.0}} constructor=null autowireCandidate=true}
    17:37:46,126 DEBUG [AbstractManagedObjectFactory] ManagedObject(PojoServiceBindingStore) is ManagedComponent type: @org.jboss.managed.api.annotation.ManagementComponent(type=MCBean, subtype=ServiceBindingStore)
    17:37:46,128 DEBUG [AbstractManagedObjectFactory] Created skeleton ManagedObject: ManagedObject{PojoServiceBindingStore}
    17:37:46,129 DEBUG [BeanMetaDataICF] Using bean class:, class org.jboss.services.binding.impl.PojoServiceBindingStore for bean: AbstractBeanMetaData@1f2412a{name=ServiceBindingStore bean=org.jboss.services.binding.impl.PojoServiceBindingStore properties=[standardBindings, serviceBindingSets] classLoader=AbstractClassLoaderMetaData@1eea7f0{classloader=AbstractDependencyValueMetaData@16a8823{value=bindings-classloader:0.0.0}} constructor=null autowireCandidate=true}
    17:37:46,138 DEBUG [ProfileServiceBootstrap] Created ManagedObject: ManagedObject{ServiceBindingStore} for bean: ServiceBindingStore
    17:37:46,139 DEBUG [ProfileServiceBootstrap] Created ManagedComponent of type: ComponentType{type=MCBean, subtype=ServiceBindingStore} for bean: ServiceBindingStore
    17:37:46,139 DEBUG [BeanMetaDataICF] Using bean class:, class org.jboss.services.binding.ServiceBindingManager for bean: AbstractBeanMetaData@19b7c62{name=ServiceBindingManager bean=org.jboss.services.binding.ServiceBindingManager properties= classLoader=AbstractClassLoaderMetaData@1eea7f0{classloader=AbstractDependencyValueMetaData@16a8823{value=bindings-classloader:0.0.0}} constructor=AbstractConstructorMetaData@c65fb1{parameters=[null, null]} autowireCandidate=true annotations=[AbstractAnnotationMetaData@13d5f21{expr={exposedInterface=interface org.jboss.services.binding.ServiceBindingManagerMBean, name=jboss.system:service=ServiceBindingManager, registerDirectly=true}}]}
    17:37:46,139 DEBUG [AbstractManagedObjectFactory] ManagedObject(org.jboss.services.binding.ServiceBindingManager) is ManagedComponent type: @org.jboss.managed.api.annotation.ManagementComponent(type=MCBean, subtype=ServiceBindingManager)
    17:37:46,139 DEBUG [AbstractManagedObjectFactory] Created skeleton ManagedObject: ManagedObject{org.jboss.services.binding.ServiceBindingManager}
    17:37:46,140 DEBUG [BeanMetaDataICF] Using bean class:, class org.jboss.services.binding.ServiceBindingManager for bean: AbstractBeanMetaData@19b7c62{name=ServiceBindingManager bean=org.jboss.services.binding.ServiceBindingManager properties= classLoader=AbstractClassLoaderMetaData@1eea7f0{classloader=AbstractDependencyValueMetaData@16a8823{value=bindings-classloader:0.0.0}} constructor=AbstractConstructorMetaData@c65fb1{parameters=[null, null]} autowireCandidate=true annotations=[AbstractAnnotationMetaData@13d5f21{expr={exposedInterface=interface org.jboss.services.binding.ServiceBindingManagerMBean, name=jboss.system:service=ServiceBindingManager, registerDirectly=true}}]}
    17:37:46,140 DEBUG [BeanMetaDataICF] Failed to get property value for bean: org.jboss.services.binding.ServiceBindingManager, property: serviceBindings
    java.lang.ClassCastException: org.jboss.metatype.api.values.ArrayValueSupport cannot be cast to [Ljava.lang.Object;
        at org.jboss.metatype.api.types.ArrayMetaType.isValue(ArrayMetaType.java:356)
        at org.jboss.metatype.api.values.CompositeValueSupport.set(CompositeValueSupport.java:164)
        at ................................................... SUITE ...............................................
    org.jboss.bootstrap.AbstractServerImpl.start(AbstractServerImpl.java:405)
        at org.jboss.Main.boot(Main.java:209)
        at org.jboss.Main$1.run(Main.java:547)
        at java.lang.Thread.run(Unknown Source)
    A+

Discussions similaires

  1. [EJB3] [JSF] Impossible d'accéder à mon EJB local..
    Par petrone dans le forum Java EE
    Réponses: 8
    Dernier message: 10/02/2009, 10h53
  2. plugin local au lieu de plugin distant
    Par Rambler dans le forum Maven
    Réponses: 14
    Dernier message: 14/05/2008, 12h12
  3. [CSV] Accéder à un fichier local
    Par boteha dans le forum Langage
    Réponses: 4
    Dernier message: 09/02/2008, 12h43
  4. accéder aux ressources locales
    Par Pol63 dans le forum VB.NET
    Réponses: 5
    Dernier message: 20/07/2007, 11h31
  5. [EJB2.1 Entity] enlever de ma facade distante les méthodes addXX/getXX.. de mes entity beans locales
    Par cyrilforever dans le forum Java EE
    Réponses: 9
    Dernier message: 04/01/2007, 18h37

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