2010-04-13 4 views
0

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:

http://img11.imageshack.us/img11/8607/screenshot0p.jpg http://img11.imageshack.us/img11/8607/screenshot0p.jpg

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.

+0

-t-il voir "OrquestratorBean" dans la console> Serveur> JNDI vue Tree? – JoseK

+0

@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

Répondre

0

ressemble à votre nom mappé dans ejb-jar.xml "Orquestrator" peut remplacer le paramètre mappedName = OrquestratorBean du bean. Avez-vous essayé ic.lookup pour "Orquestrator"?

+0

@Shreeni Merci pour votre réponse. J'ai changé le descripteur « OrquestratorBean » (pour se conformer à la dénomination utilisée dans l'annotation), mais il ne change rien: je suis arrivé comme avant la même exception d'exécution. J'ai mis à jour le message original avec ce changement. – XpiritO

3

Votre EJB se lie sous le nom suivant JNDI (lorsqu'il est déployé en tant que module EJB):

Object obj = ic.lookup("OrquestratorBean#orquestrator.OrquestratorRemote"); 

Notez que votre code je déployé (sans weblogic-ejb-jar.xml) comme EJB module, pas comme une bibliothèque partagée.

+0

Merci! Cela a fonctionné pour moi! – DaniCE

Questions connexes