2013-04-25 9 views
8

Ich habe eine JNDI-Datenquelle mit meiner Weblogic-Konsole erstellt, bin aber nicht in der Lage, über meine Webanwendung auf das Objekt zuzugreifen. Im Folgenden sind die DetailsZugriff auf die in weblogic definierte JNDI-Datenquelle 10.3.6

In WebLogic 10.3.6, habe ich den JNDI-Namen für Datenquelle gegeben als: jdbc/mydb

Um DB-Verbindung von meiner Web-Anwendung erhält ich diesen Code in meiner Web-Anwendung geschrieben habe:

Context initContext = new InitialContext(); 
DataSource ds = (DataSource)initContext.lookup("java:/comp/env/jdbc/mydb"); 
jndiConnection = ds.getConnection(); 

Früher war ich mit Tomcat als Server- und ich war in der Lage DB-Verbindung zu bekommen, wenn ich die Ressource Details in der Datei tomcat/conf/server.xml konfigurierte, aber wenn ich verwende begann WebLogic-Server ich unter Störung erhalte:

Cannot establish DB connection to JNDI:java:/comp/env/jdbc/mydb While trying to look up /comp/env/jdbc/mydb in /app/webapp/sample.war/1811641702. caused by: javax.naming.NameNotFoundException: While trying to look up /comp/env/jdbc/mydb in /app/webapp/sample.war/1811641702.; remaining name '/comp/env/jdbc/mydb' 

Ich habe versucht, die Optionen in diesem Link erwähnt: How to lookup JNDI resources on WebLogic?, aber ich habe immer noch Probleme.

Bitte lassen Sie mich wissen, wo ich Fehler mache, was ist der Prozess des Zugriffs auf das JNDI-Objekt.

+1

meinen Sie es "jdbc/mydb" nennen anstelle von "java/mydb"? –

+0

@besser_use_mkstemp Ja, ich habe meine Frage aktualisiert, Danke, dass Sie darauf hingewiesen haben. – chaitanya

+2

Haben Sie auch die zweite Lösung in dem Link in Ihrer Frage ausprobiert? Die erste Antwort gilt für Tomcat, aber ich bin mir nicht sicher, ob das immer in Weblogic funktioniert. Entfernen Sie Java: comp/env/und versuchen Sie initContext.lookup ("jdbc/mydb")? –

Antwort

9

Nach Bezug auf den Beitrag: Tomcat vs Weblogic JNDI Lookup Ich habe meinen Code geändert.

Context initContext = new InitialContext(); 
DataSource ds = (DataSource)initContext.lookup("jdbc/mydb"); 
jndiConnection = ds.getConnection(); 

ich meine JNDI hinzugefügt habe auch in weblogic Konsole Objekt auf meinen Admin-Server (unter Server-Option), wo meine Web-Anwendung ist:

unter Code in meinem Java-Programm von Web-Anwendung hat mein Problem gelöst bereitgestellt.

+1

Also hast du genau das getan, was ich dir in meinem Kommentar gesagt habe und es hat funktioniert ... derp. Komm schon Mann! –

+1

@better_use_mkstemp: Denken Sie, Sie sollten Ihre Kommentare in einer Antwort zusammengefasst haben. – wmorrison365

+0

Ich hatte das gleiche Problem, dass die JNDI-Ressource nicht gefunden wurde, obwohl ich es zuvor erstellt habe. Der Schlüssel ist, die Ressource einem bestimmten Server zuzuordnen. – Spindizzy

2

Versucht Ihre Antwort in Weblogic 12c aber nicht funktioniert ..!

Als ich versuchte, nur mit dem Namen der dataSource myDB (entfernt die jdbc/) es funktionierte gut.

Context initContext = new InitialContext(); 
DataSource ds = (DataSource)initContext.lookup("myDB"); 
jndiConnection = ds.getConnection(); 
+0

Der JNDI-Name, den ich selbst erstellt habe, hat den Wert "jdbc/mydb", daher kann ich ihn nicht entfernen. – chaitanya

2

Die gleiche Lösung für würde Weblogic 12c

sein

die unter Abhängigkeit zu Ihrem pom.xml hinzufügen .. eine Variable mit aktuellem Middleware zu Hause Wert $ {oracleMiddlewareHome}, dann erstellen ...

<dependency> 
     <groupId>weblogic</groupId> 
     <artifactId>webservices</artifactId> 
     <version>12.1.3</version> 
     <scope>system</scope> 
     <systemPath> 
      ${oracleMiddlewareHome}/wlserver/server/lib/weblogic.jar 
     </systemPath> 
    </dependency> 

nun den folgenden Code verwenden:

Hashtable<String, String> h = new Hashtable<String, String>(7); 
h.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); 
h.put(Context.PROVIDER_URL, "t3://localhost:7001");//add ur url 
h.put(Context.SECURITY_PRINCIPAL, "weblogic");//add username 
h.put(Context.SECURITY_CREDENTIALS, "welcome1");//add password 

    Bundle bundle; 
    try { 
     InitialContext ctx = new InitialContext(h); 
     DataSource dataSource = ((DataSource) ctx.lookup("jdbc/ContextBindingDS")); 
     bundle = (Bundle) ctx.lookup(BUNDLE_JNDI_NAME); 


    } catch (NamingException e) { 
     e.printStackTrace(); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    }catch (Exception e){ 
     e.printStackTrace(); 
    }