import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import oracle.jdbc.pool.OracleDataSource;
public class OracleJNDI
{
public OracleJNDI() throws SQLException
{
super();
}
/**
* 使用sun提供的com.sun.jndi.fscontext.RefFSContextFactory作为JNDI服务器,
* 其实这是使用文件系统来存储JNDI对象
* @param args
* @throws NamingException
* @throws SQLException
*/
public static void main(String[] args) throws NamingException, SQLException
{
//Properties ps = new Properties();
//为系统设置jndi工厂
System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.fscontext.RefFSContextFactory");
//指定JNDI URL
System.setProperty(Context.PROVIDER_URL, "file:JNDI_REF");
Context ctx = new InitialContext();
//OracleDataSoruce对象,它已经实现了javax.naming.Referencable
OracleDataSource ojndi = new OracleDataSource();
//设置相关数据库属性
ojndi.setDatabaseName("DXS");
ojndi.setURL("jdbc:oracle:thin:@localhost:1521:dflcrm");
ojndi.setUser("smp_dba");
ojndi.setPassword("123");
ojndi.setDescription("JDBC Datasource connection.");
//重新绑定OJNDI对象
ctx.rebind("ojndi", ojndi);
System.out.println("bind successful");
//关闭
ctx.close();
}
}
测试
import java.sql.Connection;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import oracle.jdbc.pool.OracleDataSource;
public class Lookup
{
/**
* 这是一个演示了如果查找JNDI的方法,注意以下二点:
* 1.确保系统属性中存在Context.INITIAL_CONTEXT_FACTORY和Context.PROVIDER_URL(这不是必须的,如果没有则2)
* 2.如果没有设置系统属性,那么必须由相关的有这二个变量的HashTable构造Context对象 下面的演示采用第二种实现
*
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception
{
//构造HashTable对象
Properties ps = new Properties();
ps.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.fscontext.RefFSContextFactory");
ps.setProperty(Context.PROVIDER_URL, "file:JNDI_REF");
//由HashTable对象构造Context对象
Context ctx = new InitialContext(ps);
//查找"OJNDI"
OracleDataSource dataSource = (OracleDataSource) ctx.lookup("ojndi");
System.out.println("dataSource: " + dataSource);
Connection conn = dataSource.getConnection();
System.out.println(conn);
}
}