JNDI方式によるデータソースのリモート取得

4492 ワード

データベースのパスワードはすべての人に知られていない場合があります.そのため、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); 

3:アプリケーション・サーバーの設定方法については、それぞれ異なります.ここでは、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