Tout d'abord, je tiens à souligner que j'ai déjà lu d'autres articles dans StackOverflow (example) avec des questions similaires, mais malheureusement, je n'ai pas réussi à résoudre ce problème avec les réponses que j'ai vu sur ces messages. Je n'ai pas l'intention de republier une question qui a déjà été répondue, donc si c'est le cas, je m'excuse et je serais reconnaissant à qui indique où la solution est postée.NameNotFoundException lors de l'appel d'un EJB dans Weblogic 10.3
Voici ma question:
Je suis en train de déployer un EJB dans WebLogic 10.3.2. Le but est d'utiliser un WorkManager
spécifique pour exécuter le travail produit dans le cadre de ce composant.
Avec cela à l'esprit, je l'ai mis en place un WorkManager
(nommé ResponseTimeReqClass-0
) sur ma configuration WebLogic, en utilisant l'interface Web (Environnement>Gestionnaires de travail>New). Voici une capture d'écran:
Voici ma session définition de haricots et descripteurs:
OrquestratorRemote.java
package orquestrator;
import javax.ejb.Remote;
@Remote
public interface OrquestratorRemote {
public void initOrquestrator();
}
OrquestratorBean.java
package orquestrator;
import javax.ejb.Stateless;
import com.siemens.ecustoms.orchestration.eCustomsOrchestrator;
@Stateless(name = "OrquestratorBean", mappedName = "OrquestratorBean")
public class OrquestratorBean implements OrquestratorRemote {
public void initOrquestrator(){
eCustomsOrchestrator orquestrator = new eCustomsOrchestrator();
orquestrator.run();
}
}
META-INF \ ejb-jar.xml
<?xml version='1.0' encoding='UTF-8'?>
<ejb-jar xmlns='http://java.sun.com/xml/ns/javaee'
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
metadata-complete='true'>
<enterprise-beans>
<session>
<ejb-name>OrquestradorEJB</ejb-name>
<mapped-name>OrquestratorBean</mapped-name>
<business-remote>orquestrator.OrquestratorRemote</business-remote>
<ejb-class>orquestrator.OrquestratorBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
<assembly-descriptor></assembly-descriptor>
</ejb-jar>
META-INF \ weblogic-ejb-jar.xml
(je l'ai placé la configuration du gestionnaire de travail dans ce dossier, comme je l'ai vu sur un tutoriel sur Internet)
<weblogic-ejb-jar xmlns="http://www.bea.com/ns/weblogic/90"
xmlns:j2ee="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/90
http://www.bea.com/ns/weblogic/90/weblogic-ejb-jar.xsd">
<weblogic-enterprise-bean>
<ejb-name>OrquestratorBean</ejb-name>
<jndi-name>OrquestratorBean</jndi-name>
<dispatch-policy>ResponseTimeReqClass-0</dispatch-policy>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
J'ai compilé ceci dans un fichier JAR et déployé sur WebLogic, comme une bibliothèque partagée par serveur d'administration et tous les n de cluster odes sur ma solution (c'est dans l'état "Actif").
Comme je l'ai vu dans plusieurs tutoriels et des exemples, je suis en utilisant ce code sur ma demande, afin d'appeler la fève:
InitialContext ic = null;
try {
Hashtable<String,String> env = new Hashtable<String,String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL, "t3://localhost:7001");
ic = new InitialContext(env);
}
catch(Exception e) {
System.out.println("\n\t Didn't get InitialContext: "+e);
}
//
try {
Object obj = ic.lookup("OrquestratorBean");
OrquestratorRemote remote =(OrquestratorRemote)obj;
System.out.println("\n\n\t++ Remote => "+ remote.getClass());
System.out.println("\n\n\t++ initOrquestrator()");
remote.initOrquestrator();
}
catch(Exception e) {
System.out.println("\n\n\t WorkManager Exception => "+ e);
e.printStackTrace();
}
Malheureusement, cela ne fonctionne pas. Il lance une exception sur l'exécution, comme suit:
WorkManager Exception => javax.naming.NameNotFoundException: Impossible de résoudre 'OrquestratorBean'. Résolu '' [L'exception racine est javax.naming.NameNotFoundException: Impossible de résoudre 'OrquestratorBean'. Résolu '']; restant nom 'OrquestratorBean'
Après avoir vu cela, je l'ai même essayé de changer cette ligne
Object obj = ic.lookup("OrquestratorBean");
à ceci:
Object obj = ic.lookup("OrquestratorBean#orquestrator.OrquestratorBean");
, mais le résultat a été la même exception d'exécution.
Quelqu'un peut-il s'il vous plaît me aider à détecter ce que je fais mal ici? Je suis un mauvais temps de débogage, comme je ne sais pas comment vérifier ce qui peut être à l'origine de cette question ...
Merci d'avance pour votre patience et votre aide.
-t-il voir "OrquestratorBean" dans la console> Serveur> JNDI vue Tree? – JoseK
@josek Si vous faites référence à « Environnement> Serveurs> Serveur Admin> Général> Voir JNDI Tree », je ne remarque pas une entrée, il « OrquestratorBean ». Est-ce le bon endroit? – XpiritO