2013-04-25 17 views
8

Utworzyłem źródło danych JNDI przy użyciu mojej konsoli weblogic, ale nie mam dostępu do obiektu z mojej aplikacji internetowej. Poniżej znajdują się szczegółyJak uzyskać dostęp do źródła danych JNDI zdefiniowanego w weblogic 10.3.6

W weblogic 10.3.6 dałem nazwę JNDI dla źródła danych jak: jdbc/mydb

Aby uzyskać połączenie DB z mojej aplikacji internetowej Pisałem ten kod w mojej aplikacji internetowej:

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

Wcześniej używałem Tomcat jako serwera i udało mi się uzyskać połączenie DB kiedy skonfigurowane szczegóły zasobów w pliku tomcat/conf/server.xml, ale kiedy używam zaczął używać serwera WebLogic otrzymuję poniżej błędu:

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' 

Próbowałem opcji wymienionych w tym linku: How to lookup JNDI resources on WebLogic?, ale nadal mam problemy.

Proszę dać mi znać, gdzie popełniłem błąd, jaki jest proces dostępu do obiektu JNDI.

+1

Czy chodziło Ci nazwać go "jdbc/mydb" zamiast "java/mydb"? –

+0

@better_use_mkstemp Tak, zaktualizowałem moje pytanie, dzięki za wskazanie. – chaitanya

+2

Czy próbowałeś też drugiego rozwiązania w łączu w swoim pytaniu? Pierwsza odpowiedź dotyczy Tomcata, ale nie jestem pewien, czy zawsze działa w weblogic. Usuń java: comp/env/i spróbuj initContext.lookup ("jdbc/mydb")? –

Odpowiedz

9

Po odezwie się do wpisu: Tomcat vs Weblogic JNDI Lookup Zmodyfikowałem swój kod.

pomocą poniższego kodu w moim programie java aplikacji internetowych ma rozwiązać mój problem:

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

Również w konsoli weblogic Dodałem mojego obiektu JNDI do mojego Admin Server (w wariancie serwery), gdzie moja aplikacja internetowa jest wdrożone.

+1

Więc zrobiłeś dokładnie to, co powiedziałem ci w swoim komentarzu i zadziałało ... derp. Chodź człowieku! –

+1

@better_use_mkstemp: Myślę, że powinieneś był podsumować swoje komentarze w odpowiedzi. – wmorrison365

+0

Miałem ten sam problem, że zasób JNDI nie został znaleziony, chociaż wcześniej go utworzyłem. Kluczem jest przypisanie zasobu do określonego serwera. – Spindizzy

2

Wypróbowałem odpowiedź w weblogic 12c ale nie zadziałało ..!

Kiedy próbowałem używając tylko nazwy źródła danych myDB (usunięto jdbc/), działało dobrze.

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

Nazwa JNDI, którą sam utworzyłem, ma wartość "jdbc/mydb", więc nie mogę jej usunąć. – chaitanya

2

To samo rozwiązanie dla Weblogic 12c byłby

dodać poniższą zależność do pom.xml .. utworzyć zmienną z aktualną wartość domu middleware $ {oracleMiddlewareHome}, i ...

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

teraz użyć poniższy kod:

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(); 
    }