Warum erhalte ich eine NameNotFoundExcpetion bei der Verwendung von context.lookup ( „java: comp / env / MyBean“)

StackOverflow https://stackoverflow.com/questions/653966

  •  19-08-2019
  •  | 
  •  

Frage

Warum erhalte ich ein NameNotFoundException wenn context.lookup("java:comp/env/MyBean") verwenden, aber nicht, wenn ich verwende context.lookup(MyBean.class.getName())?

Die Fehlermeldungen „kein Objekt für Java gebunden: comp / env / MyBean“ Wie kann ich den Namen binden und warum class.getName() noch? Warum sollte ich java: comp / env

?

Ich benutze Netbeans 6.5, 2.1 Glassfish.

War es hilfreich?

Lösung

Die java: comp / env Präfix wird für einen so genannten Ressource-Referenz verwendet. Es ist eine Abstraktion zwischen der Ressource, die Sie suchen und der tatsächlichen JNDI Namen der Ressource. Es ermöglicht Ihnen, den Standort der zugrunde liegenden Ressource zu ändern (das heißt unterschiedlicher Server und Kontext) ohne Ihren Lookup-Code zu beeinflussen.

Ich habe nur es in ist, aber die Idee ist, dass Sie einen Verweis auf eine bestehende Ressource erstellen (JMS, JDBC, EJB ...) für jedes Modul, das die Ressource zugreifen muss. Es ist Teil Ihrer Deployment-Konfiguration.

Tutorial von Sun hier und Glassfish Beispiel hier.

Andere Tipps

Ich bin nicht sicher, ob dies für Glassfish wahr ist oder nicht, aber im Fall von JBOSS, wenn Sie auf DEBUG drehen, können Sie die JNDI-Namen fest, die verwendet werden würden.

Zum Beispiel bei der Bereitstellung einer Session Bean mit dem Namen DemoBean, werden Sie das folgende Protokoll in der Datei server.log sehen: -

2009-07-24 09: 08: 18.747 DEBUG [org.jboss.ejb3.stateless.StatelessDelegateWrapper] Erstellen jboss.j2ee: jar = SessionBeanDemo.jar, name = DemoBean, service = EJB3 2009-07-24 09: 08: 18.747 DEBUG [org.jboss.ejb3.ProxyDeployer] no erklärt Remote-Anbindung für: DemoBean 2009-07-24 09: 08: 18.747 DEBUG [org.jboss.ejb3.ProxyDeployer] gibt es Remote-Schnittstellen für DemoBean 2009-07-24 09: 08: 18.747 DEBUG [org.jboss.ejb3.ProxyDeployer] Standard-Fern Bindung hat jndiName von DemoBean / remote

Dann in Ihrem Client-Code können Sie es so sehen: -

        InitialContext ctx;
        try {
            ctx = new InitialContext();
            DemoBeanRemote demo = (DemoBeanRemote) ctx.lookup("DemoBean/remote");
            System.out.println(demo.sayHello());
        } catch (NamingException e) {
            e.printStackTrace();
        } 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top