如何在WebLogic上查找JNDI资源?

wsb*_*383 9 weblogic jndi weblogic11g

我在WebLogic 11g上部署了遗留应用程序.该应用程序具有以下代码:

 Context context = new InitialContext();
 dataSource = (javax.sql.DataSource) context.lookup("java:myDataSource");
Run Code Online (Sandbox Code Playgroud)

我还在WebLogic中配置了一个数据源,其JNDI名称为:

     jdbc/myDataSource
Run Code Online (Sandbox Code Playgroud)

当上面的java代码运行时,我得到以下异常:

       javax.naming.NameNotFoundException: While trying to look up /myDataSource in /app/webapp/axis2.war/60105275.; remaining name '/myDataSource'
        at weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:1139)

      at weblogic.jndi.internal.ApplicationNamingNode.lookup(ApplicationNamingNode.java:144)
Run Code Online (Sandbox Code Playgroud)

我对JNDI很新,所以我的问题是?命名的断开在哪里?当上下文查找的前缀为"java:"时,这意味着什么?

谢谢!

Jef*_*est 8

你应该能够简单地这样做:

Context context = new InitialContext();
dataSource = (javax.sql.DataSource) context.lookup("jdbc/myDataSource");
Run Code Online (Sandbox Code Playgroud)

如果您从远程目标查找它,则需要使用WL初始上下文工厂,如下所示:

Hashtable<String, String> h = new Hashtable<String, String>(7);
h.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
h.put(Context.PROVIDER_URL, pURL); //For example "t3://127.0.0.1:7001"
h.put(Context.SECURITY_PRINCIPAL, pUsername);
h.put(Context.SECURITY_CREDENTIALS, pPassword);

InitialContext context = new InitialContext(h);
dataSource = (javax.sql.DataSource) context.lookup("jdbc/myDataSource");
Run Code Online (Sandbox Code Playgroud)

weblogic.jndi.WLInitialContextFactory


Fem*_*emi 6

java是资源的根JNDI名称空间.什么代码的原始片段的意思是,该应用程序最初部署在容器中没有施加任何额外的命名空间为您检索(作为一个例子JNDI上下文下,Tomcat会自动将所有资源的命名空间comp/env,所以你必须做dataSource = (javax.sql.DataSource) context.lookup("java:comp/env/jdbc/myDataSource");,如果资源引用名称是jdbc/myDataSource).

为了避免更改遗留代码,我认为如果您使用名称注册数据源myDataSource(删除jdbc/),您应该没问题.如果有效,请告诉我.