Как получить доступ к источнику данных JNDI, определенному в weblogic 10.3.6

Я создал источник данных JNDI с помощью моей консоли weblogic, но я не могу получить доступ к объекту из своего веб-приложения. Ниже приведены подробности

в weblogic 10.3.6 я дал имя JNDI для источника данных как:jdbc/mydb

чтобы получить соединение с БД из моего веб-приложения, я написал этот код в своем веб-приложении:

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

ранее я использовал Tomcat в качестве сервера, и я смог получить соединение с БД, когда я настроил ресурс подробности в файле tomcat/conf/server.xml, но когда я использую начал использовать weblogic server я получаю ниже ошибки:

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'

Я пробовал варианты, упомянутые в этой ссылке : как искать ресурсы JNDI на WebLogic? но все же я сталкиваюсь с проблемами.

пожалуйста, дайте мне знать, где я делаю ошибку, каков процесс доступа к объекту JNDI.

3 ответов


после ссылки на пост:Tomcat vs WebLogic Поиск JNDI Я изменил свой код.

использование ниже кода в моей java-программе веб-приложения решило мою проблему:

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

также в консоли weblogic я добавил объект JNDI на сервер администратора (в разделе "серверы"), где развернуто мое веб-приложение.


пробовал ваш ответ в weblogic 12c, но не работал..!

когда я попытался использовать только имя dataSource myDB (удалены jdbc/) он работал нормально.

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

то же самое решение для Weblogic 12c было бы

добавьте приведенную ниже зависимость к вашему pom.XML.. создайте переменную с текущим значением промежуточного ПО home ${oracleMiddlewareHome}...

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

теперь используйте следующий код:

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