急求使用Proxool连接池写JSP的实例! 另外:JAXPConfigurator.configure("proxool.xml", false);我将proxool.xml放在WEB-INF下,怎么找不到呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 proxool.xml里,怎么配置多个数据库别名? :配置 在进行具体的管理之前,我们先给tomcat添加一个用户,使这个用户有权限来进行管理。打开conf目录下的tomcat-users.xml文件,在相应的位置添加下面一行: <user name=\"zf\" password=\"zf\" roles=\"standard,manager\"/> 注意:这一行的最后部分一定是/>,tomcat的文档掉了/符号,如果没有/符号的话,tomcat重起时将无法访问应用程序。通过logs/catalina.out文件你可以看到这个错误的详细信息。 然后重起tomcat,在浏览器中输入http://localhost:8080/manager/,会弹出对话框,输入上面的用户名和密码即可。 2:应用程序列表 在浏览器中输入http://localhost:8080/manager/list,浏览器将会显示如下的信息: OK - Listed applications for virtual host localhost/ex:running:1/examples:running:1/webdav:running:0/tomcat-docs:running:0/manager:running:0/:running:0 面的信息分别为应用程序的路径,当前状态(running 或者stopped),与这个程序相连的session数。3:重新装载应用程序 在浏览器中输入 http://localhost:8080/manager/reload?path=/examples,浏览器显示如下: OK - Reloaded application at context path /examples 表示example应用程序装载成功,如果我们将server.xml的Context元素的reloadable属性设为true(见上面表格),则没必要利用这种方式重新装载应用程序,因为tomcat会自动装载。Tomcat中SERVER.XML配置:<Context path="/bizcity" docBase="bizcity" debug="0"> <Resource name="jdbc/bizcity" auth="Container" type="javax.sql.DataSource" /> <ResourceParams name="jdbc/bizcity"> <parameter><name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> <parameter><name>driverClassName</name> <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value> </parameter> <parameter><name>url</name><value>jdbc:microsoft:sqlserver://192.168.10.1:1433;DataBaseName=BizCity</value> </parameter> <parameter><name>username</name><value>sa</value></parameter> <parameter><name>password</name><value>123456</value></parameter> <parameter><name>maxActive</name><value>20</value></parameter> <parameter><name>maxIdle</name><value>10</value></parameter> <parameter><name>maxWait</name><value>-1</value></parameter> </ResourceParams> </Context>代碼部分:package biz;import java.sql.*;import javax.sql.*;import java.util.Vector;import java.util.Date;aimport javax.naming.*;public class connpool{ // 連接池類 private int maxconn; //最大連接數 private int nActive; //已創建的連接數 private Vector freeCons=new Vector(); //存儲當前可用連接的數組 private Context initCtx = null; //Context 上下文类型 private Context ctx =null; private DataSource ds=null; public connpool() { this.maxconn=20; this.nActive =0; try{ initCtx = new InitialContext(); //初始化上下文,可以读配置文件如:web.xml if(initCtx==null) throw new Exception("Initial Failed!"); ctx = (Context) initCtx.lookup("java:comp/env"); //szJdbc="jdbc/bizcity" 此值在Tomcat的SERVER.XML文件中配置 if(ctx!=null) ds= (DataSource) ctx.lookup("jdbc/bizcity"); if(ds==null) throw new Exception("Look up DataSource Failed!"); //以上这是从配置文件读取上下文的一种方法!参数在上下文中定义 } catch(Exception e){ System.out.println(e.getMessage()); } } public void SetMaxConn(int n){//默認最大連接數為 20 ~ 200; if(n<20) n=20; if(n>200) n=200; this.maxconn =n; } public synchronized void freeConnection(Connection con) //歸還連接 { //synchronized关键字定义可异步同时连接 try{ if(con.isClosed()){ con=null; //System.out.println("Connection is Closed\n"); } else{ freeCons.addElement(con); System.out.println("Add Exists Connection,Current Conut=" + freeCons.size()); } } catch(Exception e){System.out.println(e.getMessage());} //notifyAll(); } public synchronized Connection getConnection(long timeout) //取得一個連接(指定超時時間) { long startTime=new Date().getTime(); //記錄超時用 Connection con=null; while(con==null){ if(freeCons.size()>0){//在有可用的連接時,選用可用連接 con=(Connection) freeCons.firstElement(); //從數組中取得第一個 把能用的连接取走了一个,当然再能用的连接中,减去一个了 freeCons.removeElementAt(0); //並從數組中刪除 try{ if(con.isClosed()){ //如果已關閉,則將已創建連接減一 nActive--; con=null; } } catch(Exception e){System.out.println(e.getMessage());} if(con!=null) System.out.println("Get Exists Connection\n"); }else if(nActive<maxconn){ //沒有可用連接且已創建的連接數小于最大數時,創建新連接 con=newConnection(); if(con!=null) System.out.print("Create New Connection ******" + nActive ); } if(con!=null) break; //取得可用連接後,則直接退出等待 //否則,進行等待0.5s,進行下一次獲取連接的操作 try{ wait(500); //等待0.5秒 } catch(InterruptedException e) {} if((new Date().getTime()-startTime)>=timeout){ System.out.println("Connection timeout\n"); break; //超時則退出 } } return con; } public void release(){ //關閉所有連接 int i=freeCons.size(); int j=0; for (j=0;j<i;j++){ Connection con=(Connection)freeCons.elementAt(j); try{ con.close(); } catch(SQLException e) { System.out.println("無法關閉連接池中的當前連接"); } } freeCons.removeAllElements(); nActive=0; } private Connection newConnection(){ //創建一個新連接 Connection con=null; try{ con=ds.getConnection(); if(con==null) throw new Exception("Create Connection Failed!"); else nActive++; } catch(Exception e){ System.out.println(e.getMessage()); } return con; }}JSP調用:<%@ page language="java" import="java.sql.*"%><jsp:useBean id="vCon" scope="application" class="biz.connpool"/><%! Connection con=null; java.sql.Statement stmt=null;%><%try{ if(con==null) con=vCon.getConnection(10000); //最大等待時間為10s stmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);} //两个结果集 第一个参数时说结果集是不可滚动的,只能向前滚!第二个是结果集是只读的catch(Exception e){ System.err.println(e.getMessage());}ResultSet rs=stmt.executeQuery("Select *........");........stmt.close();vCon.freeConnection(con);con=null;%>看看这个例子,再做配置我想就不应该是问题了 proxool使用指南:1,下载proxool-0.8.3.jar并放到相应的目录,这个应该比较简单了2,写一个配置文件(proxool.properties)放到WEB-INF目录下,配置文件内容如下: jdbc-0.proxool.alias=bidding jdbc-0.proxool.driver-url=jjdbc:oracle:thin:@127.0.0.1:1521:dbname jdbc-0.proxool.driver-class=oracle.jdbc.driver.OracleDriver jdbc-0.user=name jdbc-0.password=pass jdbc-0.proxool.maximum-connection-count=200 jdbc-0.proxool.house-keeping-test-sql=select *3,在WEB-INF/web.xml中添加如下代码:(其作用是在服务启动时初始化proxool) <servlet> <servlet-name>ServletConfigurator</servlet-name> <servlet-lass>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class> <init-param> <param-name>propertyFile</param-name> <param-value>WEB-INF/proxool.properties</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> 4,配置就这么简单,下面给你一段怎么得到一个连接代码,其他的应该就比较简单了 public Connection getConnection() { try { conn = DriverManager.getConnection("proxool.bidding"); }catch(SQLException ex){ ex.printStackTrace(); } finally { try { if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); log("Problem closing connection"); } } return conn; } 谢谢ccm1980(海浪),不过我需要的是 proxool 连接池。可否教教我?谢谢! TO sjhasp(编程浪子) :我有 个疑问1)如果是多个数据库,这个proxool.properties或者proxool.xml文件该怎么写?2)proxool.jar文件我放在CLASSPATH下了,使用JAXPConfigurator.configure("proxool.xml", false);找不到配置文件,该怎么办? 如果想用这个方法加载配置,是不是一定要放在WEB-INF下才可以?谢谢! 上面WEB-INF/lib错了!1)如果是多个数据库,这个proxool.properties或者proxool.xml文件该怎么写?2)proxool.jar文件我放在CLASSPATH下了,使用JAXPConfigurator.configure("proxool.xml", false);找不到配置文件,该怎么办? 如果想用这个方法加载配置,是不是一定要放在WEB-INF/lib下才可以? 1,如果要使用多个数据库,是否可以采用以下配置,不过我没试过,有待你测试。<?xml version="1.0" encoding="ISO-8859-1"?><!-- the proxool configuration can be embedded within your own application's.Anything outside the "proxool" tag is ignored. --><something-else-entirely> <proxool> <alias>xml-test1</alias> <driver-url>jdbc:hsqldb:.</driver-url> <driver-class>org.hsqldb.jdbcDriver</driver-class> <driver-properties> <property name="user" value="sa"/> <property name="password" value=""/> </driver-properties> <maximum-connection-count>10</maximum-connection-count> <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql> </proxool> <proxool> <alias>xml-test2</alias> <driver-url>jdbc:hsqldb:.</driver-url> <driver-class>org.hsqldb.jdbcDriver</driver-class> <driver-properties> <property name="user" value="sa"/> <property name="password" value=""/> </driver-properties> <maximum-connection-count>10</maximum-connection-count> <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql> </proxool></something-else-entirely>2,不需要JAXPConfigurator.configure,直接在web.xml文件加上下面这段就可以了,proxool提供了一个初始化配置文件的servlet。 <servlet> <servlet-name>ServletConfigurator</servlet-name> <servlet-lass>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class> <init-param> <param-name>propertyFile</param-name> <param-value>WEB-INF/proxool.properties</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> 补充:如果配置文件是xml文件,那么<param-value>WEB-INF/proxool.properties</param-value>就应该是<param-value>WEB-INF/proxool.xml</param-value>,proxool.jar要放到WEB-INF/lib目录下。配置文件就随便了,但是在servlet配置中一定要与实际路径相符。 session异常 求助一个简单的问题 忍痛给1000分,commons-fileupload-1.1上传老是出错,顶者有分 Log4j在weblogic sp4下的问题,谢谢! servlet程序结构问题。。送分。。。 请教Struts中<Bean:define />标记的问题! Tomcat启动报错 session问题 安装tomcat4.1的问题 怎么实现文件上传呀?! 怎样在tomcat启动的时候给JVM加启动参数?? struts回填后,中文变成乱码了!!!求解决方法!!
OK - Listed applications for virtual host localhost
/ex:running:1
/examples:running:1
/webdav:running:0
/tomcat-docs:running:0
/manager:running:0
/:running:0
面的信息分别为应用程序的路径,当前状态(running 或者stopped),与这个程序相连的session数。
3:重新装载应用程序
在浏览器中输入 http://localhost:8080/manager/reload?path=/examples,浏览器显示如下:
OK - Reloaded application at context path /examples
表示example应用程序装载成功,如果我们将server.xml的Context元素的reloadable属性设为true(见上面表格),则没必要利用这种方式重新装载应用程序,因为tomcat会自动装载。
Tomcat中SERVER.XML配置:
<Context path="/bizcity" docBase="bizcity" debug="0">
<Resource name="jdbc/bizcity" auth="Container" type="javax.sql.DataSource" />
<ResourceParams name="jdbc/bizcity">
<parameter><name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter><name>driverClassName</name> <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</parameter>
<parameter><name>url</name><value>jdbc:microsoft:sqlserver://192.168.10.1:1433;DataBaseName=BizCity</value>
</parameter>
<parameter><name>username</name><value>sa</value></parameter>
<parameter><name>password</name><value>123456</value></parameter>
<parameter><name>maxActive</name><value>20</value></parameter>
<parameter><name>maxIdle</name><value>10</value></parameter>
<parameter><name>maxWait</name><value>-1</value></parameter>
</ResourceParams>
</Context>代碼部分:
package biz;import java.sql.*;
import javax.sql.*;
import java.util.Vector;
import java.util.Date;a
import javax.naming.*;public class connpool{ // 連接池類
private int maxconn; //最大連接數
private int nActive; //已創建的連接數
private Vector freeCons=new Vector(); //存儲當前可用連接的數組 private Context initCtx = null; //Context 上下文类型
private Context ctx =null;
private DataSource ds=null; public connpool()
{
this.maxconn=20;
this.nActive =0;
try{
initCtx = new InitialContext(); //初始化上下文,可以读配置文件如:web.xml
if(initCtx==null) throw new Exception("Initial Failed!");
ctx = (Context) initCtx.lookup("java:comp/env");
//szJdbc="jdbc/bizcity" 此值在Tomcat的SERVER.XML文件中配置
if(ctx!=null) ds= (DataSource) ctx.lookup("jdbc/bizcity");
if(ds==null) throw new Exception("Look up DataSource Failed!"); //以上这是从配置文件读取上下文的一种方法!
参数在上下文中定义
}
catch(Exception e){
System.out.println(e.getMessage());
}
} public void SetMaxConn(int n){//默認最大連接數為 20 ~ 200;
if(n<20) n=20;
if(n>200) n=200;
this.maxconn =n;
} public synchronized void freeConnection(Connection con) //歸還連接
{ //synchronized关键字定义可异步同时连接
try{
if(con.isClosed()){
con=null; //System.out.println("Connection is Closed\n");
}
else{
freeCons.addElement(con);
System.out.println("Add Exists Connection,Current Conut=" + freeCons.size());
}
}
catch(Exception e){System.out.println(e.getMessage());}
//notifyAll();
} public synchronized Connection getConnection(long timeout) //取得一個連接(指定超時時間)
{
long startTime=new Date().getTime(); //記錄超時用
Connection con=null;
while(con==null){
if(freeCons.size()>0){//在有可用的連接時,選用可用連接
con=(Connection) freeCons.firstElement(); //從數組中取得第一個 把能用的连接取走了一个,当然再能用的连接中,减去一个了
freeCons.removeElementAt(0); //並從數組中刪除
try{
if(con.isClosed()){ //如果已關閉,則將已創建連接減一
nActive--;
con=null;
}
}
catch(Exception e){System.out.println(e.getMessage());}
if(con!=null) System.out.println("Get Exists Connection\n");
}else if(nActive<maxconn){ //沒有可用連接且已創建的連接數小于最大數時,創建新連接
con=newConnection();
if(con!=null) System.out.print("Create New Connection ******" + nActive );
}
if(con!=null) break; //取得可用連接後,則直接退出等待
//否則,進行等待0.5s,進行下一次獲取連接的操作
try{
wait(500); //等待0.5秒
}
catch(InterruptedException e) {}
if((new Date().getTime()-startTime)>=timeout){
System.out.println("Connection timeout\n");
break; //超時則退出
}
}
return con;
}
public void release(){ //關閉所有連接
int i=freeCons.size();
int j=0;
for (j=0;j<i;j++){
Connection con=(Connection)freeCons.elementAt(j);
try{
con.close();
}
catch(SQLException e) {
System.out.println("無法關閉連接池中的當前連接");
}
}
freeCons.removeAllElements();
nActive=0;
}
private Connection newConnection(){ //創建一個新連接
Connection con=null;
try{
con=ds.getConnection();
if(con==null) throw new Exception("Create Connection Failed!");
else nActive++;
}
catch(Exception e){
System.out.println(e.getMessage());
}
return con;
}
}JSP調用:
<%@ page language="java" import="java.sql.*"%>
<jsp:useBean id="vCon" scope="application" class="biz.connpool"/>
<%!
Connection con=null;
java.sql.Statement stmt=null;
%>
<%
try{
if(con==null) con=vCon.getConnection(10000); //最大等待時間為10s
stmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
} //两个结果集 第一个参数时说结果集是不可滚动的,只能向前滚!
第二个是结果集是只读的
catch(Exception e){
System.err.println(e.getMessage());
}
ResultSet rs=stmt.executeQuery("Select *........");
........
stmt.close();
vCon.freeConnection(con);
con=null;
%>
看看这个例子,再做配置我想就不应该是问题了
1,下载proxool-0.8.3.jar并放到相应的目录,这个应该比较简单了
2,写一个配置文件(proxool.properties)放到WEB-INF目录下,配置文件内容如下:
jdbc-0.proxool.alias=bidding
jdbc-0.proxool.driver-url=jjdbc:oracle:thin:@127.0.0.1:1521:dbname
jdbc-0.proxool.driver-class=oracle.jdbc.driver.OracleDriver
jdbc-0.user=name
jdbc-0.password=pass
jdbc-0.proxool.maximum-connection-count=200
jdbc-0.proxool.house-keeping-test-sql=select *
3,在WEB-INF/web.xml中添加如下代码:(其作用是在服务启动时初始化proxool)
<servlet>
<servlet-name>ServletConfigurator</servlet-name>
<servlet-lass>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
<init-param>
<param-name>propertyFile</param-name>
<param-value>WEB-INF/proxool.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
4,配置就这么简单,下面给你一段怎么得到一个连接代码,其他的应该就比较简单了
public Connection getConnection() {
try {
conn = DriverManager.getConnection("proxool.bidding");
}catch(SQLException ex){
ex.printStackTrace();
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
log("Problem closing connection");
}
}
return conn;
}
2)proxool.jar文件我放在CLASSPATH下了,使用JAXPConfigurator.configure("proxool.xml", false);找不到配置文件,该怎么办? 如果想用这个方法加载配置,是不是一定要放在WEB-INF下才可以?谢谢!
2)proxool.jar文件我放在CLASSPATH下了,使用JAXPConfigurator.configure("proxool.xml", false);找不到配置文件,该怎么办? 如果想用这个方法加载配置,是不是一定要放在WEB-INF/lib下才可以?
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- the proxool configuration can be embedded within your own application's.
Anything outside the "proxool" tag is ignored. -->
<something-else-entirely>
<proxool>
<alias>xml-test1</alias>
<driver-url>jdbc:hsqldb:.</driver-url>
<driver-class>org.hsqldb.jdbcDriver</driver-class>
<driver-properties>
<property name="user" value="sa"/>
<property name="password" value=""/>
</driver-properties>
<maximum-connection-count>10</maximum-connection-count>
<house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
</proxool>
<proxool>
<alias>xml-test2</alias>
<driver-url>jdbc:hsqldb:.</driver-url>
<driver-class>org.hsqldb.jdbcDriver</driver-class>
<driver-properties>
<property name="user" value="sa"/>
<property name="password" value=""/>
</driver-properties>
<maximum-connection-count>10</maximum-connection-count>
<house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
</proxool>
</something-else-entirely>
2,不需要JAXPConfigurator.configure,直接在web.xml文件加上下面这段就可以了,proxool提供了一个初始化配置文件的servlet。
<servlet>
<servlet-name>ServletConfigurator</servlet-name>
<servlet-lass>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
<init-param>
<param-name>propertyFile</param-name>
<param-value>WEB-INF/proxool.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
如果配置文件是xml文件,那么<param-value>WEB-INF/proxool.properties</param-value>
就应该是<param-value>WEB-INF/proxool.xml</param-value>,proxool.jar要放到WEB-INF/lib目录下。配置文件就随便了,但是在servlet配置中一定要与实际路径相符。