Bonjour,

un peu novice sous Glassfish et les EJB3, je rencontre un problème lorsque j'essaie de récupérer des informations de mon application en EJB3 déployée sur Glassfish v2.1, en utilisant une sonde JMX (via MBean).
Je vous explique ce que j'ai fait :

Mon application est composée :

d'une interface :

package com.polop.application;
import javax.ejb.Remote;
@Remote
public interface CoreApplicationRemote {
String getDescription();
}

de son implémentation :

package com.polop.application;
import javax.ejb.Stateless;
@Stateless(mappedName="MyApplication")
public class CoreApplicationBean implements CoreApplicationRemote {

public String getDescription() {
return "This is my application";
}

}

Mon application se déploie correctement sur Glassfish.
Si j'exécute la commande :
asadmin list-jndi-entities
j'obtiens le résultat :
com.polop.application.CoreApplicationRemote : javax.naming.Reference

Sous Eclipse, je crée un projet java pour mon Mbean :

interface du MBean :

package com.polop.utils;
public interface MyAppMgtMBean {
String getDescription();
}

et son implémentation :

package com.polop.utils;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import com.polop.utils.CoreApplicationRemote;
public class MyAppMgt implements MyAppMgtMBean {

public String getDescription() {
try {
InitialContext ctx = new InitialContext();
return (CoreApplicationRemote) ctx.lookup("MyApplication");
} catch (NamingException e) {
return "Error !!!";
}
}

}

et la même interface CoreApplicationRemote que dans mon appli (mais sans le @Remote), nécessaire pour récupérer le résultat du lookup :

package com.polop.application;
public interface CoreApplicationRemote {
String getDescription();
}

Si j'ajoute un test Junit à MyAppMgt, qui appelle gestDescription(), ca marche (le lookup fonctionne et j'obtiens le résultat de getDescription()).

Je copie alors les fichiers MyAppMgt.class, MyAppMgtMBean.class et CoreApplicationRemote.class du projet java dans :
/glassfish/domains/domain1/applications/mbeans/
et j'exécute la commande :
asadmin create-mbean com.polop.utils.MyAppMgt
Cette commande s'exécute correctement.
Je lance alors la Jconsole de java. Je peux voir une nouvelle entrée :
user > com.polop.utils.MyAppMgt > com.polop.utils.MyAppMgt > server > Attributes : Description
Mais la valeur de 'Description' est "Error !!!"

J'ai alors regardé dans serveur.log de Glassfish et je trouve d'erreur suivante :

javax.naming.NamingException: ejb ref resolution error for remote business interface com.polop.application.CoreApplicationRemote [Root exception is java.lang.ClassNotFoundException: com.polop.application.CoreApplicationRemote]
at com.sun.ejb.EJBUtils.lookupRemote30BusinessObject(EJBUtils.java:425)
at com.sun.ejb.containers.RemoteBusinessObjectFactory.getObjectInstance(RemoteBusinessObjectFactory.java:74)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
...


J'ai essayé d'ajouter les jars suivants à /glassfish/domains/domain1/lib :
appserv-deployment-client.jar
appserv-ext.jar
appserv-rt.jar
javaee.jar
puis redémarrage de Glassfish, désenregistrement et réengistrement du MBean, mais sans plus de succès.
J'ai passé beaucoup de temps à parcourir les forums à la recherche de cas similaire mais je ne trouve pas de solution.

Je me demande s'il ne s'agit pas d'un problème de classpath, étant donné que l'attaque de l'application par un programme standalone fonctionne (cf. test avec JUnit plus haut).
Si quelqu'un a une idée...
Merci d'avance.