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 :

Commnication EJB Jboss 7.1/Jboss 4.2


Sujet :

Wildfly/JBoss Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 26
    Points : 15
    Points
    15
    Par défaut Commnication EJB Jboss 7.1/Jboss 4.2
    Bonjour

    Je dois faire un EJB du côté de l'ancien Jboss pour récupérer des données depuis le 7.1, mais voilà, ça fait plusieurs jours que je stagne sur ce problème...

    Jboss 4.2: Interface
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import java.util.List;
    import java.util.Set;
     
    import javax.ejb.Remote;
     
    @Remote
    //@EJB(name="Ejb", beanInterface=Bean.class)
    public interface Ejb {
     
    	// Pour les tests
    	public List<String> getListe();
    }
    Jboss 4.2: Bean
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import java.util.List;
     
    import javax.ejb.Stateless;
     
    //@Stateless
    //@Remote(Ejb.class)
    @Stateless (name="Ejb")
    public class Bean implements Ejb {
    	@Override
    	public List<String> getListeServices() {
    		return Constantes.getListe();
    	}
    }
    Jboss 7.1: 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
    import java.util.Hashtable;
    import java.util.List;
     
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
     
    public class Client {
    	private static InitialContext context;
     
    	public static final String RemoteJNDIName =  "ejb:Ejb/Ejb//Bean!com.monpackage.ejb.Ejb";
     
    	public Client() {		
    		if (context == null) {
    			try {
     
    				final Hashtable<String, Object> jndiProperties = new Hashtable<String, Object>();
    				jndiProperties.put( javax.naming.Context.INITIAL_CONTEXT_FACTORY, "org.jboss.as.naming.InitialContextFactory" );  
    				jndiProperties.put( javax.naming.Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces" );  
    				jndiProperties.put( javax.naming.Context.PROVIDER_URL, "ejb://192.168.0.156:1099/Bean!com.monpackage.ejb.Bean" );
    				jndiProperties.put("jboss.naming.client.ejb.context", true);
     
    				context = new InitialContext(jndiProperties);
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    		}
     
    		Ejb ejb = null;
    		try {
    			ejb = ((Ejb)context.lookup(RemoteJNDIName));
    		} catch (NamingException e) {
    			e.printStackTrace();
    		}
     
    		if(ejb != null){
    			List<String> liste = ejb.getListe();
    		}
     
    	}
    }
    Résultat dans les logs 7.1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (http--0.0.0.0-180-1) : java.lang.IllegalStateException: No EJB receiver available for handling [appName:Ejb,modulename:Ejb,distinctname:] combination for invocation context org.jboss.ejb.client.EJBClientInvocationContext@5d7ccd
    ...
    Toute aide est la bienvenue, j'ai suivi une centaine de tutos et toujours rien, ou pire certaines fois...

    Merci d'avance

  2. #2
    Membre éprouvé
    Avatar de hasalex
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 879
    Points : 1 269
    Points
    1 269
    Par défaut
    Je commencerai par quelques commentaires sur ton code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Hashtable<String, Object> jndiProperties = new Hashtable<String, Object>();
    jndiProperties.put( javax.naming.Context.INITIAL_CONTEXT_FACTORY, "org.jboss.as.naming.InitialContextFactory" );  
    jndiProperties.put( javax.naming.Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces" );  
    jndiProperties.put( javax.naming.Context.PROVIDER_URL, "ejb://192.168.0.156:1099/Bean!com.monpackage.ejb.Bean" );
    jndiProperties.put("jboss.naming.client.ejb.context", true);
     
    context = new InitialContext(jndiProperties);
    Cette façon de faire permet d'accéder à distance à un EJB déployé sur un JBoss AS 7. Pour un accès distant à un EJB sur un JBoss 4, ce serait plutôt ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Hashtable<String, Object> jndiProperties = new Hashtable<String, Object>();
    jndiProperties.put( javax.naming.Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory" );
    jndiProperties.put( javax.naming.Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces" );
    jndiProperties.put( javax.naming.Context.PROVIDER_URL, "jnp://192.168.0.156:1099" );
     
    context = new InitialContext(jndiProperties);
    Explication : le protocole d'accès distant n'est pas le même entre les deux versions, et le factory + le préfixe de l'URL permettent de choisir le protocole.

    Le problème associé à cette différence, c'est que l'ancien protocole n'est pas supporté en standard dans JBoss AS 7. Tu as une chance que ça fonctionne en intégrant les librairies clientes de JBoss 4 dans ton application, ou en module de JBoss AS 7, mais pas sûr du tout que ça fonctionne.

    Pour info, il me semble que les utilisateurs (payants) de JBoss EAP on dû attendre la version 6.3 pour avoir une telle fonctionnalité.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Salut,

    Merci pour ta réponse, j'ai enfin un message d'erreur différent.
    J'ai donc apporté les modifications que tu m'as suggéré, et ai mis jnp-client-4.2.2.GA.jar en librairie de mon client, résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    09:15:21,099 ERROR [stderr] (http--0.0.0.0-180-2) javax.naming.NameNotFoundException: ejb:Ejb not bound
    Je pense que l'erreur vient de mon RemoteJNDIName:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static final String RemoteJNDIName =  "ejb:Ejb/Ejb//Bean!com.monpackage.ejb.Ejb";
    Je continue à investiguer mais j'accepte toujours les suggestions, et encore merci

  4. #4
    Membre éprouvé
    Avatar de hasalex
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 879
    Points : 1 269
    Points
    1 269
    Par défaut
    Je te conseille de diviser le problème : fait un accès distant à ton EJB depuis une petit programme en ligne de commande (un main). Dans un deuxième temps, tu pourra intégrer ça dans JBoss AS 7. Comme ça tu sépare le problème d'accès distant et le problème d'appel depuis un autre JBoss.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    J'ai peur de ne pas comprendre, peux-tu détailler STP?

  6. #6
    Membre éprouvé
    Avatar de hasalex
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 879
    Points : 1 269
    Points
    1 269
    Par défaut
    Dans un premier temps, fait fonctionner ta classe client dans un programme autonome, en dehors de tout serveur d'application. Ainsi tu valideras qu'elle utilise les bons paramètres et bon noms. Ensuite, déploie la dans JBoss AS 7, pour tester l'ensemble.

  7. #7
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Shirase_Akira Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public static final String RemoteJNDIName =  "ejb:Ejb/Ejb//Bean!com.monpackage.ejb.Ejb";
    Il y a un "/" de trop là
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Je n'ai pas encore fais les tests d'un client standalone, mais ai testé d'autres choses:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ejb:Ejb/Ejb//Bean!com.monpackage.ejb.Ejb
    ejb:Ejb/Ejb/Bean!com.monpackage.ejb.Ejb
    java:Ejb/Ejb/Bean!com.monpackage.ejb.Ejb
    Ejb
    Ejb/remote
    java:Ejb/remote
    ejb:Ejb
    ejb:Ejb/remote
    Toujours le même message, côté serveur j'ai aussi vérifié via JMX console si mon ejb s'affichait bien dans jndiview.list(), c'est bien le cas, c'est vraiment un problème de client il semblerait

  9. #9
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    En faisant une petite recherche, j'ai trouvé ceci
    La solution serait d'ajouter
    jndiProps.put("jboss.naming.client.ejb.context", true);

    jndiProps.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Toujours la même erreur, j'ai aussi tenté encore d'autres valeurs pour mon RemoteJNDIName, encore et toujours la même erreur

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Juste pour faire le point avant d'investiguer d'avantage:
    - Mon RemoteJndiName a finalement l'air correct, étant donné qu'il me donne "Ejb" not bound avec pas mal d'écritures différentes
    - Mon Jboss 4 semble correctement être écouteur, j'ai fais pointer mon client sur une autre machine avec un Jboss mais sans cet Ejb, et sur un autre workspace sans cet Ejb: timeout
    - J'ai actuellement dans ma hashtable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    jndiProperties.put( javax.naming.Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory" );
    jndiProperties.put(javax.naming.Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces" );
    jndiProperties.put( javax.naming.Context.PROVIDER_URL, "jnp://192.168.0.234:1099" );
    - Et comme jndiname
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static final String RemoteJNDIName = "ejb:Ejb/Ejb/Ejb!com.monpackage.Ejb";
    - Le nom du jar est "Ejb.jar", l'interface est "Ejb", le bean est "Bean", le packagename ci-dessus est correct.

    Qu'est-ce que j'ai pu oublier?

  12. #12
    Membre éprouvé
    Avatar de hasalex
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 879
    Points : 1 269
    Points
    1 269
    Par défaut
    JBoss 4 n'utilisait pas le préfixe ejb. A mon avis, le bon nom JNDI est Ejb/remote.

    J'ai testé avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class Client {
        public static void main(String[] args) throws NamingException {
            Hashtable<String, String> jndiProperties = new Hashtable<String, String>();
            jndiProperties.put( javax.naming.Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory" );
            jndiProperties.put(javax.naming.Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces" );
            jndiProperties.put( javax.naming.Context.PROVIDER_URL, "jnp://localhost:1099" );
     
            InitialContext context = new InitialContext(jndiProperties);
            Ejb ejb = (Ejb) context.lookup("Ejb/remote");
            System.out.println("Done : " + ejb.getService());
        }
    }

Discussions similaires

  1. Hot deploy EJB avec Spring dans JBoss
    Par Fladnag dans le forum Wildfly/JBoss
    Réponses: 7
    Dernier message: 10/08/2010, 17h08
  2. problème avec le ejb-jar.xml entre JBoss et OpenEJB
    Par mid491 dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 11/02/2010, 14h09
  3. Comment désactiver le service ejb et mail sous jboss
    Par DevServlet dans le forum Wildfly/JBoss
    Réponses: 0
    Dernier message: 27/01/2010, 11h31
  4. dépolyer une application EJB; JSF sans redémarrer JBOSS
    Par hawaa dans le forum Wildfly/JBoss
    Réponses: 0
    Dernier message: 08/08/2009, 10h16
  5. [hibernate][ejb] integrer hibernate a Jboss
    Par apoca dans le forum Wildfly/JBoss
    Réponses: 4
    Dernier message: 09/05/2007, 17h07

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