在进行JNDI查找前,我们必须设置应用服务器的上下文信息,主要是设置JNDI驱动的类名和命名服务提供者的
即:(固定写法)
1.java.naming.factory.initial
2.java.naming.provider.url
其中
①java.naming.factory.initial或Context.INITIAL_CONTEXT_FACTORY:用于指定InitialContext工厂我认为就是一个JNDI的驱动,它类似于JDBC指定数据库驱动类。
Weblogic使用驱动类:weblogic.jndi.WLInitialContextFactory
②java.naming.provider.url或Context.PROVIDER_URL:包含提供JNDI命名服务的主机地址和端口号。连接到weblogic的URL格式为:t3://127.0.0.1:7001
访问数据源访问例子:
package com.landingbj.apps;import java.util.Properties;import javax.naming.Context;import javax.naming.InitialContext;import javax.sql.DataSource;public class Apps { /** * 主程序
*
* @param args
*/
public static void main(String[] args) {
try {
Properties props = new Properties();
// 设置weblogic的驱动
props.setProperty("java.naming.factory.initial",
"weblogic.jndi.WLInitialContextFactory");
// 加载连接
props.setProperty("java.naming.provider.url", "t3://127.0.0.1:7001");
// 获得weblogic上下文
Context ctx = new InitialContext(props);
// 获得jndi绑定的数据源
DataSource ds = (DataSource) ctx.lookup("ssss");
System.out.println(ds.getConnection());
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果:
weblogic.jdbc.rmi.SerialConnection_weblogic_jdbc_rmi_internal_ConnectionImpl_weblogic_jdbc_wrapper_PoolConnection_com_mysql_jdbc_JDBC4Connection_1036_WLStub@1
注意:此处返回的是一个代理的对象
注意:
在创建InitialContext对象时如果没有指定Properties参数,InitialContext还会在classpath下寻找jndi.properties文件,并从该文件中加载应用服务器的上下文信息。这样避免了硬编码为InitialContext设置Properties参数。
即:
jndi.properties的配置如下:
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=localhost:1099
系统代码如下:
Properties props = new Properties();
Context ctx = new InitialContext(props);font-family:Consolas;mso-font-kerning:0pt">
// 获得jndi绑定的数据源font-family:Consolas;mso-font-kerning:0pt">
DataSource ds = (DataSource) ctx.lookup("ssss");mso-font-kerning:0pt">
System.out.println(ds.getConnection());