分为4 步
1、下载proxool0.9.1 的proxool-0.9.1.jar ,proxool-cglib.jar ,ojdbc14.jar ,commons-logging.jar 保存到tomcat\lib 下(tomcat5.x是 common\lib 下)
2、编辑tomcat\conf\server.xml :
......
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
<Resource name="jdbc/mydatasource"
auth="Container"
type="javax.sql.DataSource"
factory="org.logicalcobwebs.proxool.ProxoolDataSource"
proxool.alias="orale10g"
user="username"
password="password"
delegateProperties="foo=1,bar=true"
proxool.jndi-name="myjndi"
proxool.driver-url="jdbc:oracle:thin:@127.0.0.1:1521:oracledb"
proxool.driver-class="oracle.jdbc.driver.OracleDriver"
proxool.house-keeping-sleep-time="900000"
proxool.maximum-active-time="5"
proxool.prototype-count="3"
proxool.statistics="1m,15m,1d"
proxool.simultaneous-build-throttle="10"
proxool.minimum-connection-count="5"
proxool.maximum-connection-count="15"
proxool.house-keeping-test-sql="select CURRENT_DATE from dual"
proxool.test-before-use="true"/>
</GlobalNamingResources>
.............
<Context path="/yourapp" docBase="D:/apache-tomcat-6.0.18/webapps/yourapp" debug="0" reloadable="true" crossContext="true">
<ResourceLink name="jdbc/mydatasource" global="jdbc/mydatasource" type="javax.sql.DataSource"/>
</Context>
...........
3、在你应用下的web.xml 中加入:
.......
<resource-ref>
<description>JNDI JDBC DataSource of project-jsp</description>
<res-ref-name>jdbc/mydatasource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
.......................
4、调用场景:
I>spring+struts+hibernate下,配置application.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd ">
<beans>
<bean id="jndiDataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/mydatasource</value>
</property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="jndiDataSource"/>
</property>
<property name="mappingDirectoryLocations">
<list>
<value>classpath:com/test/contact/model/</value>...
</list>
</property>
<!-- 配置Hibernate属性 -->
<property name="hibernateProperties">
<props>
<!-- 配置连接池 -->
<propkey="hibernate.bytecode.use_reflection_optimizer">true</prop>
<prop key="connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</prop>
<prop key="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQueryTranslatorFactory</prop>
<prop key="hibernate.connection.release_mode">auto</prop>
<prop key="Hibernate.current_session_context_class">thread</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.connection.autocommit">true</prop>
<!-- 重要的设定JDBC的Statement读取数据的时候每次从数据库中取出的记录条数 -->
<prop key="hibernate.fetch_size">50</prop>
<!-- Batch Size是设定对数据库进行批量删除,批量更新和批量插入的时候的批次大小,有点相当于设置Buffer缓冲区大小的意思 -->
<prop key="hibernate.jdbc.batch_size">25</prop>
</props>
</property>
</bean>
..........
</beans>
II>直接在应用中使用 和普通的jndi调用一样简单,以下示例在jsp或servelet都是相似的用法
test.jsp
<%@pagelanguage="java"%>;
<%@pageimport="java.util.*"%>;
<%@pageimport="java.sql.*"%>;
<%@pageimport="javax.sql.*"%>;
<%@pageimport="javax.naming.*"%>;
<%
Stringjndi_name="java:comp/env/jdbc/mydatasource";
String strSql = "select * from users";
Context ctx=null;
DataSource ds=null;
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
try{
ctx = new InitialContext();
if( ctx == null ) out.println("no context");
ds = (DataSource) ctx.lookup(jndi_name);
if( ds == null ) out.println("no datasource");
conn = ds.getConnection();
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(strSql);
while(rs.next()){
out.println(rs.getString(1));
}
}catch(Exception ex){
ex.printStackTrace();
out.println(ex.toString());
}finally{
if( rs != null )rs.close();
if( stmt != null ) stmt.close();
if( conn != null) conn.close();
if( ctx != null ) ctx.close();
}
%>
OK!全部结束,以上是我自己收集各种资料然后摸索出来的,并已经运行在实际环境中!
如要转载,请尊重作者,请注明出处!