⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myinitialcontext.java

📁 数据库连接池源码
💻 JAVA
字号:
package llm.pool.relation.context;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

import org.apache.log4j.Logger;

import llm.pool.relation.Contents;
import llm.pool.relation.DBConnectPara;
import llm.pool.relation.DBConnectParaManager;
import llm.pool.relation.LlmDBException;
import llm.pool.relation.mydatasource.LlmDataSource;

public class MyInitialContext {
	
	private static Logger log = Logger.getLogger(MyInitialContext.class.getName());

	public MyInitialContext() {
	}
	
	public void init() throws NamingException, LlmDBException {
		Hashtable env = new Hashtable();
//		env.put( Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.Ldap.LdapCtxFactory" ); 
		env.put( Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory" );
		env.put( Context.PROVIDER_URL, "file:JNDI" );
//		env.put( Context.PROVIDER_URL, "file:JNDI" );
		/** 注册方式不同 **/
//		env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.Ldap.LdapCtxFactory"); 
//		env.put(Context.PROVIDER_URL,"ldap://localhost:389/o=jaydeetechnology");
		/** 注册方式不同 **/
		Context ctx = new InitialContext( env );
		myBind( ctx, "java/SYSTEM" );
	}
	
	public void myBind(Context ctx, String ln ) throws NamingException, LlmDBException {
		// 创建一个 DataSource
//		Map props = new HashMap();
		DataSource dataSource = createDataSource( null ); //new LlmDataSource( props );
//		ctx.bind( ln, dataSource );
		ctx.rebind( ln, dataSource );
	}
	
	public DataSource createDataSource( DBConnectPara dbConnectPara1 ) throws LlmDBException {
		Map props = new HashMap();
		DBConnectParaManager dbConnectParaManager = new DBConnectParaManager();
		dbConnectParaManager.init();
		DBConnectPara dbConnectPara = dbConnectParaManager.getDBConnectPara( "SYSTEM" );
		props.put( LlmDataSource.PROP_JDBC_DRIVER, dbConnectPara.getDbDriver() );
		props.put( LlmDataSource.PROP_JDBC_URL, dbConnectPara.getDbUrl() );
		props.put( LlmDataSource.PROP_JDBC_USERNAME, dbConnectPara.getDbUser() );
		props.put( LlmDataSource.PROP_JDBC_PASSWORD, dbConnectPara.getDbPassword() );
		/**
		 * 最大连接数
		 */
		props.put( LlmDataSource.PROP_POOL_MAX_ACTIVE_CONN, String.valueOf( dbConnectPara.getDbConnMax() ) );
		/**
		 * 最大空闲连接数
		 */
		props.put( LlmDataSource.PROP_POOL_MAX_IDLE_CONN, String.valueOf( dbConnectPara.getDbConnIdle() ) );
		
		return new LlmDataSource( props );
		
	}
	
	public DataSource getDataSource( String jndiName ) throws LlmDBException {
		  if ( !Contents.LICENSE_STATUS && System.currentTimeMillis() > Contents.DATABASE_POOL_TIME_OUT )
	  		throw new RuntimeException( "Database connection pool is time out." );
		  DataSource dataSource = null;
		  Context context = null;
		  Hashtable hashtable = new Hashtable();
		  /***
		   * 不在同一个容器内的查找方法
		   ht.put( Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory" );
		   ht.put( Context.PROVIDER_URL, "t3://127.0.0.1:80/" );
		   ***/
		  /*
		   * JBOSS 下测试连接池 java:/SybaseDB
		   if(initconnectName.equals("TPD"))
		   initconnectName = "java:/SybaseDB";
		   */
		  
		  try {
			  context = new InitialContext( hashtable );
			  dataSource = (DataSource) context.lookup( jndiName ); 
		  }
		  catch (Exception e) {
			  log.error( "容器连接池查找时失败:" + e.getMessage(), e );
			  throw new LlmDBException( "容器连接池查找时失败:" + e.getMessage(), e );
		  }
		  finally {
			  if ( context != null )
				  try {
					  context.close();
				  }
			  	  catch (Exception e) {
			  		  log.error("关闭 InitialContext 失败.", e);
			  	  }
		  }
		  return dataSource;
	}

	public int exeQueryInt( Connection connection, String query ) throws SQLException {
	    int resultInt = 0;
	    PreparedStatement pstmt = null;
	    ResultSet resultSet = null;
	    try {
	    	pstmt = connection.prepareStatement( query );
	    	resultSet = pstmt.executeQuery();	    	
	    	while ( resultSet.next() ) {
	    		resultInt = resultSet.getInt( 1 );
	    	}	 
	    }
	    finally {
	    	pstmt.close();
	    	resultSet.close();
	    	connection.close();
	    }
	    return resultInt;	
	}

	/**
	 * @param args
	 * @throws NamingException 
	 * @throws LlmDBException 
	 * @throws SQLException 
	 */
	public static void main(String[] args) throws NamingException, LlmDBException, SQLException {
		MyInitialContext myCtx = new MyInitialContext();
		myCtx.init();
		
		while( true ) {
			DataSource dataSource = myCtx.getDataSource( "java/SYSTEM" );
			Connection connection = dataSource.getConnection();
			System.out.println( myCtx.exeQueryInt(connection, "SELECT count(1) FROM AA" ) );
		}
		
		
	}


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -