在weblogic中使用连接池,JMS,EJB这些基于rmi方式的都必须首先获取InitialContext.(
注意,weblogic的连接池采用rmi方式,但不是所有的应用服务器都采用,比如websphere就没
有采用)。
通俗的说法,获取InitialContext就是寻找jndi树的根结点。然后才能寻找到绑定的jndi
元素。
在weblogic中获取InitialContext有一定的优化规则。如果访问点和weblogic应用服务器
在同一个jvm环境下,建议直接使用 Context ctx = new InitialContext();这样在weblogic
回采用优化的方式获取资源,可能不再使用rmi资源,但是依然要求所有对象implement
Serializable接口。
如果是远程方式,应该使用如下方式:
package jndi;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class TryJndi {
static Context ctx = null;
static {
String url = "t3://localhost:7001";
String user = "username";
String password = "password";
Properties properties = null;
try {
properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
properties.put(Context.PROVIDER_URL, url);
properties.put(Context.SECURITY_PRINCIPAL, user);
properties.put(Context.SECURITY_CREDENTIALS, password);
ctx = new InitialContext(properties);
} catch (Exception e) {
try {
throw e;
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
public static void main(String[] args) {
System.out.println("GO");
DataSource ds;
try {
System.out.println("GO1");
ds = (DataSource) ctx.lookup("jdbc.nssbDirectIndexDs");
System.out.println("GO2");
Connection conn = ds.getConnection();
System.out.println("GO3");
System.out.println(conn);
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
---------------------------------------------------------------------------