利用 JNDI 方式远程获取数据源

有时候数据库的密码并不能让所有人知道,为此我们可以提供JNDI访问方式,让编码者来获取,


一: 针对JBoss服务器,客户端获取方式如下:

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Context ctx = null;
		Properties p = new Properties();
		p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); 
		p.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
		p.put(Context.PROVIDER_URL, "jnp://192.168.70.11:1199");
		try {
			ctx = new InitialContext(p);
//			javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup("java:comp/env/jdbc/CbsDS");
			javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup("DS");
//			NamingEnumeration list =((Context) ctx.lookup("DS")).listBindings("");
//			while (list.hasMore()) {
//				Binding b =(Binding)list.next();
//				System.out.println(b.getName());
//			}
			System.out.println(ds==null?"NULL":ds.toString());
			try {
				Connection connect =ds.getConnection();
				Statement st=connect.createStatement();
				String sql="select * from *** d ";
				ResultSet rs=st.executeQuery(sql);
				if(rs.next()) {
					System.out.println(rs.getString("username"));
				}else {
					System.out.println("no data");
				}
				rs.close();
				st.close();
				connect.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}          
		
	}

}

 
二: 针对不同的应用服务器,客户端要用不同的连接方式,收集整理如下:

 

各种服务器中的JNDI设置以方法

WebSphere
Properties properties= new Properties();
properties.put(javax.naming.Context.PROVIDER_URL,"iiop:///");    properties.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY,"com.ibm.ejs.ns.jndi.CNInitialContextFactory");
new InitialContext(properties);

JBoss
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); 
p.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
p.put(Context.PROVIDER_URL, "jnp://localhost:1099");
InitialContext ctx = new InitialContext(p);

SUN
Properties props = new Properties();
props.setProperty( "java.naming.factory.initial" ,"com.sun.enterprise.naming.SerialInitContextFactory" );
props.setProperty( "java.naming.provider.url" , "localhost:3700" );
InitialContext = new InitialContext(props);

Weblogic10
Properties props = new Properties();
props.setProperty( "java.naming.factory.initial" , "weblogic.jndi.WLInitialContextFactory" );
props.setProperty( "java.naming.provider.url" , "t3://localhost:7001" );
InitialContext = new InitialContext(props); 

 三: 至于应用服务器的设置方法,每个都不相同,现只列出JBoss下的Oracle 设置方式:

文件目录是jboss安装目录下的: deploy/oracle-ds.xml

 

  
    DS
    false
    jdbc:oracle:thin:@your ip:1521:your servise name
    oracle.jdbc.driver.OracleDriver
    
    
   1
   2
    
    org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter
        

        

      
     your db-domain
      
         Oracle11g
      
  
 

 

你可能感兴趣的:(java)