新建类:OracleJNDI
- 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);
- }
- }
junit测试类:
- import java.sql.Connection;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- import java.util.Properties;
- import javax.naming.Context;
- import javax.naming.InitialContext;
- import javax.naming.NamingException;
- import junit.framework.Assert;
- import junit.framework.TestCase;
- import oracle.jdbc.pool.OracleDataSource;
- public class JndiTest extends TestCase
- {
- // 测试JNDI
- public void testJndi()
- {
- try
- {
- Properties ps = new Properties();
- ps.setProperty(Context.INITIAL_CONTEXT_FACTORY,
- "com.sun.jndi.fscontext.RefFSContextFactory");
- ps.setProperty(Context.PROVIDER_URL, "file:JNDI_REF");
- Context ctx = new InitialContext(ps);
- OracleDataSource dataSource = (OracleDataSource) ctx
- .lookup("ojndi");
- Connection conn = dataSource.getConnection();
- // 断言
- Assert.assertNotNull(ctx);
- Assert.assertNotNull(dataSource);
- Assert.assertNotNull(conn);
- String sql = "create table lcjtest(id int,name varchar(20))";
- String sql1 = "insert into lcjtest values(1,'test1')";
- String sql2 = "insert into lcjtest values(2,'test2')";
- String sql3 = "insert into lcjtest values(3,'test3')";
- String sql4 = "insert into lcjtest values(4,'test4')";
- String sql5 = "select * from lcjtest";
- String sql6 = "drop table lcjtest";
- Statement stmt = conn.createStatement();
- stmt.execute(sql);
- stmt.addBatch(sql1);
- stmt.addBatch(sql2);
- stmt.addBatch(sql3);
- stmt.addBatch(sql4);
- stmt.executeBatch();
- ResultSet rs = stmt.executeQuery(sql5);
- int i = 1;
- while(rs.next())
- {
- Assert.assertEquals("test"+i, rs.getString("name"));
- i++;
- }
- stmt.execute(sql6);
- rs.close();
- stmt.close();
- conn.close();
- ctx.close();
- }
- catch (NamingException e)
- {
- e.printStackTrace();
- Assert.assertNull(e);
- }
- catch (SQLException e)
- {
- e.printStackTrace();
- Assert.assertNull(e);
- }
- }
- }