2010-12-28 2 views
1

I-Code haben, der als JNDI.The Code-Schnipsel verwendet wie folgt:Problem mit JNDI

EntityManager createEM(String JNDI){ 

    EntityManager em = null; 
    try{ 
    InitialContext ic = new InitialContext(); 
    em = (EntityManager) ic.lookup(JNDI); 
    return em; 
    } 
catch (Exception ex){ 
    LOG.Error("error in creating em"); 
    ex.printStackTrace(); 

} 

} 

Jetzt bekomme ich Fehler .Der Kontrolle ins Spiel kommt Block fangen.

javax.naming.NameNotFoundException: Name comp/env/persistence not found in context "java:". 
[12/28/10 15:51:07:086 GMT+05:30] 00000081 SystemErr  R at com.ibm.ws.naming.ipbase.NameSpace.getParentCtxInternal(NameSpace.java:1837) 
[12/28/10 15:51:07:086 GMT+05:30] 00000081 SystemErr  R at com.ibm.ws.naming.ipbase.NameSpace.lookupInternal(NameSpace.java:1166) 
[12/28/10 15:51:07:086 GMT+05:30] 00000081 SystemErr  R at com.ibm.ws.naming.ipbase.NameSpace.lookup(NameSpace.java:1095) 
[12/28/10 15:51:07:086 GMT+05:30] 00000081 SystemErr  R at com.ibm.ws.naming.urlbase.UrlContextImpl.lookup(UrlContextImpl.java:1233) 
[12/28/10 15:51:07:086 GMT+05:30] 00000081 SystemErr  R at com.ibm.ws.naming.java.javaURLContextImpl.lookup(javaURLContextImpl.java:394) 
[12/28/10 15:51:07:086 GMT+05:30] 00000081 SystemErr  R at com.ibm.ws.naming.java.javaURLContextRoot.lookup(javaURLContextRoot.java:214) 
[12/28/10 15:51:07:086 GMT+05:30] 00000081 SystemErr  R at com.ibm.ws.naming.java.javaURLContextRoot.lookup(javaURLContextRoot.java:154) 
[12/28/10 15:51:07:086 GMT+05:30] 00000081 SystemErr  R at javax.naming.InitialContext.lookup(Unknown Source) 

Ich habe 2 Projekte sagen A und B.Now Projekt B das obige Verfahren hat und aus einem Projekt Ich rufe mehod von Projekt B.persistent.xml presnt ist nur in dem Projekt A.Do muß ich platzieren auch persistent.xml in Projekt A? ich habe auch den folloing als Teil Ausnahme

javax.naming.NameNotFoundException: Name comp/env/persistence not found in context "java:". 

Was die cause.Am mit websphere sein kann.

Antwort

2

Ihre Beschreibung des Problems ist ein wenig schlampig:

persistent.xml nur in dem Projekt presnt ist A.Do ich brauche zu persistent.xml in Projekt A zu platzieren?

Ich nehme an, Sie bedeuten: persistence.xml vorhanden ist nur in dem Projekt B. Muß ich zu persistence.xml in Projekt A platzieren?

Was genau ist das Setup? Werden beide Projekte auf demselben Server bereitgestellt? Sind sie auf verschiedenen Servern? Greift Projekt A auf eine Remotesitzungs-Bean von Projekt B zu? Von welchen Projekten sprechen wir? Webprojekte, EJB-Projekte? EAR-Projekte mit sowohl Web- als auch EJB-Projekten?

Ich glaube nicht, dass es unterstützt wird, dass Sie einen Entity Manager von einer Anwendung an die andere versenden. Die Idee ist, dass ein Client eine Remote-Bean aufruft, dann erhält diese Remote-Bean einen lokalen Entity-Manager, arbeitet damit und gibt die Ergebnisse zurück. Wenn A Ihr Client ist, dann muss A nicht eine lokale persistence.xml haben.

Ihr Problem könnte sein, dass der Entity Manager, den Sie suchen, einfach nicht unter dem Namen verfügbar ist, den Sie denken. java:comp/env/persistence ist offensichtlich nicht vorhanden. Normalerweise wird ein Entity Manager nicht automatisch in JNDI angezeigt. Wenn B ein Servlet war, würden Sie so etwas wie dies benötigen:

<persistence-context-ref> 
    <persistence-context-ref-name>persistence</persistence-context-ref-name> 
    <persistence-unit-name>yourpu</persistence-unit-name> 
</persistence-context-ref> 

Wenn B eine EJB Session Bean war, müssen Sie etwas wie folgt aus:

@Stateless 
@PersistenceUnit(name="persistence", unitName="yourpu") 
public class BBean implements BRemoteInterface { 
    // some code here... 
} 

Danach würde das Unternehmen Manager zur Verfügung stehen unter java:comp/env/persistence, aber nur, wenn die JNDI-Suche von diesem Servlet oder Bean aus initiiert wird. java: comp/env ist ein relativer Kontext, der für jeden Ort, an dem eine Suche durchgeführt wird, unterschiedlich ist.

Am wenigsten Sie könnten einfach Ihren java:comp/env Kontext von B drucken und sehen, was genau dort drin ist. Sehen Sie dieses einfache Beispiel, wie man solchen Druck macht: http://tripoverit.blogspot.com/2007/03/print-jndi-tree.html

+0

thanks.It löste mein Problem – akshay

+0

Persistenz yourpu akshay

+1

Großartig! Also war B ein Servlet nach allem was es erscheint;) Das obige Fragment musste in web.xml für andere Leute, die das lesen, gehen. –

0

Haben Sie die Verbindung namens persistence in Ihrer Websphere-Konfiguration definiert?

Der Fehler sagt u hatten keine Namen ‚Beharrlichkeit‘

+0

danke für die Antwort. Ich weiß nicht, wo ich diese Einträge geben sollte.Ich benutze nur einige Apis, die von jemand anderem entwickelt wurden. Können Sie mich bitte wissen, wo ich diese erwähnen sollte Eigenschaften? – akshay

+0

Sie müssen über die Admin-Konsole gehen und die Verbindungseinstellungen einschließlich Datenbanktyp (JDBC-Treiber), IP-Adresse und Anmeldeinformationen einrichten. Sie müssen außerdem die JDBC-Treiber-JAR-Datei hinzufügen. Sehen Sie sich die Dokumentation von IBM an oder suchen Sie online nach allen Einzelheiten. Hier ist eine: http://www.enavigo.com/2007/05/14/setting-up-a-jndi-data-source-in-websphere-6061/ – jbx

+0

Ich habe den ursprünglichen Beitrag aktualisiert, können Sie bitte Ihre zur Verfügung stellen Kommentare dazu – akshay

0
definieren

Können Sie die Anwendung debuggen auf websphere ausgeführt wird. Es ist möglich, dies zu tun. Ich würde vorschlagen, dass Sie die App im Debug-Modus ausführen und Punkt am JNDI-Lookup-Punkt und dann können Sie den Zustand des JNDI-Kontext abfragen.

+0

Ich kann nicht Breakpoint.My App ist dam schwer und wenn ich meinen Server im Debug-Modus laufen lassen es nicht – akshay

+0

, die passieren können. In welchen Kontexten wird die Suche ausgeführt? d.h. EJB/Servlet/Start-Listener? –

+0

Ich habe den ursprünglichen Beitrag aktualisiert, können Sie bitte Ihre Kommentare dazu eingeben – akshay