午夜久久资源,久草视频视频在线播放,69久久精品http://www.aygfsteel.com/czmchen/zh-cnMon, 16 Jun 2025 18:29:41 GMTMon, 16 Jun 2025 18:29:41 GMT60讓Tomcat5.5支持el表達(dá)式http://www.aygfsteel.com/czmchen/archive/2010/04/19/318752.html陳周敏陳周敏Mon, 19 Apr 2010 09:33:00 GMThttp://www.aygfsteel.com/czmchen/archive/2010/04/19/318752.htmlhttp://www.aygfsteel.com/czmchen/comments/318752.htmlhttp://www.aygfsteel.com/czmchen/archive/2010/04/19/318752.html#Feedback0http://www.aygfsteel.com/czmchen/comments/commentRss/318752.htmlhttp://www.aygfsteel.com/czmchen/services/trackbacks/318752.htmlweb.xml加入
<taglib>
    <taglib-uri>/WEB-INF/c.tld</taglib-uri>
    <taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>

c.tld一般在jstl JAR里面可以找到!

在JSP中加入文件頭
<%
@ taglib  uri="/WEB-INF/c.tld" prefix="c"%>
<%@ page isELIgnored="false" %>

接著就可以使用EL表達(dá)式了


]]>
查找表里重復(fù)的數(shù)據(jù)http://www.aygfsteel.com/czmchen/archive/2010/04/15/318433.html陳周敏陳周敏Thu, 15 Apr 2010 08:23:00 GMThttp://www.aygfsteel.com/czmchen/archive/2010/04/15/318433.htmlhttp://www.aygfsteel.com/czmchen/comments/318433.htmlhttp://www.aygfsteel.com/czmchen/archive/2010/04/15/318433.html#Feedback0http://www.aygfsteel.com/czmchen/comments/commentRss/318433.htmlhttp://www.aygfsteel.com/czmchen/services/trackbacks/318433.html
1 select * from tableName where tableName.id in (select max(tableName.id) from tableName group by tableName.name having count(tableName.id) >1 )




]]>
select的使用http://www.aygfsteel.com/czmchen/archive/2010/04/06/317574.html陳周敏陳周敏Tue, 06 Apr 2010 09:52:00 GMThttp://www.aygfsteel.com/czmchen/archive/2010/04/06/317574.htmlhttp://www.aygfsteel.com/czmchen/comments/317574.htmlhttp://www.aygfsteel.com/czmchen/archive/2010/04/06/317574.html#Feedback0http://www.aygfsteel.com/czmchen/comments/commentRss/317574.htmlhttp://www.aygfsteel.com/czmchen/services/trackbacks/317574.html

select清空option
1 document.getElementById("type").options.length = 0;
select創(chuàng)建option
1 
2 function addOption(objSelect,optionVal,optionText)      {
3                 var   _o = document.createElement("option"); 
4                  _o.text = optionText;
5                  _o.value = optionVal;
6                  objSelect.add(_o);
7  }
8 




]]>
讓xfire的ws-security跑起來http://www.aygfsteel.com/czmchen/archive/2010/01/15/309638.html陳周敏陳周敏Fri, 15 Jan 2010 01:51:00 GMThttp://www.aygfsteel.com/czmchen/archive/2010/01/15/309638.htmlhttp://www.aygfsteel.com/czmchen/comments/309638.htmlhttp://www.aygfsteel.com/czmchen/archive/2010/01/15/309638.html#Feedback0http://www.aygfsteel.com/czmchen/comments/commentRss/309638.htmlhttp://www.aygfsteel.com/czmchen/services/trackbacks/309638.html
先到網(wǎng)上下載最新版的xfire,一般都去官方網(wǎng)站下載,了解下詳情!其官網(wǎng)為http://xfire.codehaus.org
現(xiàn)在最新版為1.2.6,把xfire-all-1.2.6.jar xfire-distribution-1.2.6.zip下載

準(zhǔn)備前,先看看ws-securitye的步驟,在http://xfire.codehaus.org/WS-Security里面可以看到,它提示我們installed Unlimited Strength Jurisdiction Policy Files,我就在http://java.sun.com/j2se/1.5.0/download.jsp里面下載兩個(gè)包,因?yàn)槲野惭b的是jdk1.6最新版,在http://java.sun.com/j2se/1.5.0/download.jsp最下面的Other Downloads的Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 5.0,點(diǎn)擊下載,下載下來后,按照里面的步驟,把這兩個(gè)jar放到
Java/jre6/lib/security里面,修改java.security,把
security.provider.6=com.sun.security.sasl.Provider改為
security.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider
其效果為
security.provider.1=sun.security.provider.Sun
security.provider.2=sun.security.rsa.SunRsaSign
security.provider.3=com.sun.net.ssl.internal.ssl.Provider
security.provider.4=com.sun.crypto.provider.SunJCE
security.provider.5=sun.security.jgss.SunProvider
security.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider
#security.provider.6=com.sun.security.sasl.Provider
security.provider.7=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.8=sun.security.smartcardio.SunPCSC
security.provider.9=sun.security.mscapi.SunMSCAPI



準(zhǔn)備工作做好后,解壓xfire-distribution-1.2.6.zip,然后你會(huì)看到xfire-1.2.6這個(gè)文件夾,進(jìn)去,你會(huì)看到有個(gè)examples文件夾,再進(jìn)去,你就發(fā)現(xiàn)很多demo啦,在這里就找到了ws-security的demo

啟動(dòng)Myeclipse,看到里面的.classpath和.project文件,這個(gè)是eclipse的項(xiàng)目!用myeclipse打開,你發(fā)現(xiàn)都不正確,這些錯(cuò)誤我就不理!

新建一個(gè)Web Progect項(xiàng)目,項(xiàng)目名隨你命名。設(shè)置下該項(xiàng)目,點(diǎn)擊該項(xiàng)目,右鍵,properties,找到Java Compiler,修改項(xiàng)目的jdk為1.5以上(里面用到的有注入)!解壓xfire-distribution-1.2.6.zip,進(jìn)入ws-security文件夾下,進(jìn)入src下,再進(jìn)入main的文件夾,把里面的文件全部都拷貝到你新建的項(xiàng)目的src下。點(diǎn)中該項(xiàng)目,右鍵,新建Source Folder,命名為test。后退,找到test的文件夾,把里面的文件全部拷貝到項(xiàng)目test的文件夾下。后退,再把web-inf里面的web.xml拷貝到項(xiàng)目里面,替換。最后在項(xiàng)目中加入jar,在xfire-1.2.6根文件夾下面有個(gè)lib,把這些lib全部放到項(xiàng)目的web-inf下的lib文件夾中,把xfire-all-1.2.6.jar也加入到項(xiàng)目中。整個(gè)項(xiàng)目的結(jié)構(gòu)為:



生成key:在ws-security根目錄下有個(gè)keys的文件夾,雙擊進(jìn)去,運(yùn)行g(shù)enerateServerKey.bat,將默認(rèn)的key生成。里面的參數(shù)讓你們研究,很好用(上面我跳過不安裝j2se1.4就是因?yàn)橛羞@個(gè))!生成后,將serverKey.rsa和serverStore.jks扔到META-INF\xfire下,有個(gè)相同的那就替換,clientStore.jks同理

修改服務(wù)器參數(shù):在org.codehaus.xfire.client下的BookClient.java,把變量SERVICE_NAMESPACE的值改為
http://localhost:端口號(hào)/上下文路徑/BookService,下面的都同理。要修改到的文件META-INF\xfire下的services.xml。記得把http://xfire.codehaus.org修改為http://localhost:端口號(hào)/上下文路徑/BookService。因?yàn)閔ttp://xfire.codehaus.org不開放那些接口


修改完畢后,把項(xiàng)目部署到tomcat,啟動(dòng)服務(wù)器后,org.codehaus.xfire.client下運(yùn)行BookClientEnc.java
。運(yùn)行后會(huì)報(bào)下面的錯(cuò)誤
Running client : Encryption Client
Looking 
for isbn : 0123456789 .Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xml/utils/URI$MalformedURIException
    at org.apache.ws.security.message.WSSecEncrypt.doEncryption(WSSecEncrypt.java:
407)
    at org.apache.ws.security.message.WSSecEncrypt.doEncryption(WSSecEncrypt.java:
399)
    at org.apache.ws.security.message.WSSecEncrypt.encryptForInternalRef(WSSecEncrypt.java:
306)
    at org.apache.ws.security.message.WSSecEncrypt.build(WSSecEncrypt.java:
264)
    at org.apache.ws.security.action.EncryptionAction.execute(EncryptionAction.java:
62)
    at org.apache.ws.security.handler.WSHandler.doSenderAction(WSHandler.java:
192)
    at org.codehaus.xfire.security.wss4j.WSS4JOutHandler.invoke(WSS4JOutHandler.java:
158)
    at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:
131)
    at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:
79)
    at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:
114)
    at org.codehaus.xfire.client.Client.invoke(Client.java:
336)
    at org.codehaus.xfire.client.XFireProxy.handleRequest(XFireProxy.java:
77)
    at org.codehaus.xfire.client.XFireProxy.invoke(XFireProxy.java:
57)
    at $Proxy0.findBook(Unknown Source)
    at org.codehaus.xfire.client.BookClient.executeClient(BookClient.java:
63)
    at org.codehaus.xfire.client.BookClientEnc.main(BookClientEnc.java:
23)
Caused by: java.lang.ClassNotFoundException: org.apache.xml.utils.URI$MalformedURIException
    at java.net.URLClassLoader$
1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
     
16 more

這是因?yàn)槟氵€沒把xalan.jar加入去,到http://www.apache.org/dyn/closer.cgi/xml/xalan-j 下載最新版
,現(xiàn)在最新去到2_7_1,找到xalan-j_2_7_1-bin.zip,把其下載后,添加xalan.jar到項(xiàng)目

再運(yùn)行,如果出現(xiàn)下面的結(jié)果,那就正常啦
Running client : Encryption Client
Looking for isbn : 0123456789 ....Using XFire : Dan Diephouse


我的做好的示例文件在http://www.aygfsteel.com/Files/czmchen/ws-security.rar可以下載,下載后要做的事情就是把jar按上面的方法加進(jìn)去,因?yàn)閖ar太大了,上傳不上!還有要改下tomcat的端口為8001,再部署項(xiàng)目



]]>
weblogic connection pool設(shè)置http://www.aygfsteel.com/czmchen/archive/2010/01/08/308750.html陳周敏陳周敏Fri, 08 Jan 2010 09:22:00 GMThttp://www.aygfsteel.com/czmchen/archive/2010/01/08/308750.htmlhttp://www.aygfsteel.com/czmchen/comments/308750.htmlhttp://www.aygfsteel.com/czmchen/archive/2010/01/08/308750.html#Feedback0http://www.aygfsteel.com/czmchen/comments/commentRss/308750.htmlhttp://www.aygfsteel.com/czmchen/services/trackbacks/308750.html配置數(shù)據(jù)庫連接池。因?yàn)槲业捻?xiàng)目數(shù)據(jù)庫是ORACLE,那就以O(shè)racle的配置作為示例:

我的示例weblogic是8.x,其他版本都同理,找到參數(shù)后即可

進(jìn)入后臺(tái)后,單擊左邊的mydomain—>Services—>JDBC—>Connection Pools
新建我就不說了,在我的文章里面有weblogic的數(shù)據(jù)源連接create

9.x的要解鎖,那就先解鎖。點(diǎn)擊你想設(shè)置的數(shù)據(jù)源的名稱進(jìn)去。進(jìn)去后點(diǎn)擊上面的菜單Connections

看到參數(shù)設(shè)置了吧。

Initial Capacity:100   (初始化容器的連接數(shù))
Maximum Capacity:1000  (容器中最大的連接數(shù)1000,如果超過/還沒到1000就會(huì)報(bào)超出最大連接的錯(cuò)誤,原因你的Oracle安裝數(shù)據(jù)庫的時(shí)候其池沒設(shè)置大小,現(xiàn)在你也可以設(shè)置。設(shè)置方法:找到Oracle的init.ora文件這個(gè)文件一般在oracle/admin/數(shù)據(jù)庫SID/pfile里面。找到large_pool_size這一句,把這一句刪除,那就不受限制了。注意:沒受限制的情況下不要調(diào)這個(gè)參數(shù)太大了,35000就OK了,太大的時(shí)候數(shù)據(jù)庫會(huì)承受不起)
Capacity Increment:15   (一次增加多少個(gè)connection)
Statement Cache Size:50 (緩存大小)

按下下面的Advanced Options "Show",設(shè)置詳細(xì)的配置
下面是JNDI的自動(dòng)回收設(shè)置,比較重要,調(diào)幾個(gè)重要的參數(shù),其他的默認(rèn)
Test Frequency:3600(測試頻率,這個(gè)會(huì)消耗資源。這個(gè)看你的項(xiàng)目需要,一般代碼寫得比較好的可以設(shè)置長點(diǎn)時(shí)間
把下面三個(gè)都打上勾。通過測試,發(fā)現(xiàn)連接沒關(guān)的就會(huì)被回收(詳細(xì)說明可以看下面的參數(shù)說明)
Test Reserved Connections
Test Created Connections
Test Released Connections

Inactive Connection Timeout:60(無效連接超時(shí)!這個(gè)會(huì)在指定的時(shí)間內(nèi),回收無效連接)

網(wǎng)上有些人說設(shè)置這些參數(shù)后一定的時(shí)間會(huì)出現(xiàn)java.lang.OutOfMemoryError的錯(cuò)誤
解決的方法就是調(diào)大JVM的內(nèi)存,在啟動(dòng)時(shí)對(duì)jvm設(shè)置內(nèi)存限度
通過修改commom\bin\commEnv.cmd文件來增加內(nèi)存分配
修改的部分如下:
:bea
if "%PRODUCTION_MODE%" == "true" goto bea_prod_mode
set JAVA_VM=-jrockit
set MEM_ARGS=-Xms768m -Xmx1024m
set JAVA_OPTIONS=%JAVA_OPTIONS% -Xverify:none
goto continue
:bea_prod_mode
set JAVA_VM=-jrockit
set MEM_ARGS=-Xms768m -Xmx1024m//這些看你內(nèi)存定1G的就設(shè)置=-Xms256m -Xmx512m
goto continue

:sun
if "%PRODUCTION_MODE%" == "true" goto sun_prod_mode
set JAVA_VM=-client
set MEM_ARGS=-Xms768m -Xmx1024m -XX:MaxPermSize=256m
set JAVA_OPTIONS=%JAVA_OPTIONS% -Xverify:none
goto continue
:sun_prod_mode
set JAVA_VM=-server
set MEM_ARGS=-Xms768m -Xmx1024m -XX:MaxPermSize=256m//這個(gè)就解決了java.lang.OutOfMemoryError的錯(cuò)誤
goto continue
將這里的內(nèi)存分配修改后見效。

連接屬性參數(shù)說明:

  * Initial Capacity:創(chuàng)建連接池時(shí)所創(chuàng)建的數(shù)據(jù)庫連接的數(shù)目。
  * Maximum Capacity: 連接池中連接的最大數(shù)目。
  * Capacity Increment: 連接池容量在最大容量限制范圍內(nèi)的增量。
  * LoginDelay: 在創(chuàng)建每個(gè)物理數(shù)據(jù)庫連接之前要延遲的秒數(shù)。
  * Allow Shrinking: 將該項(xiàng)設(shè)置為true時(shí),如果沒有使用額外的連接,則允許連接池把容量減小到InitialCapacity。
  * Shrink Frequency: 在減小連接池容量之前要等待的秒數(shù)。如果將Shrink Frequency設(shè)置為true,那么也必須將Allow Shrinking設(shè)置為true。
  * Test Frequency: 數(shù)據(jù)庫連接測試之間間隔的秒數(shù)。在每個(gè)Refresh Period時(shí)間間隔之后,如果設(shè)置了TestTableName,就會(huì)使用TestTableName測試未使用的數(shù)據(jù)庫連接。
  * Test Reserved Connections: 如果選擇了這個(gè)選項(xiàng),服務(wù)器會(huì)在把連接提供給客戶端之前對(duì)其進(jìn)行測試。
  * Test Created Connections: 如果選擇了這個(gè)選項(xiàng),就會(huì)在創(chuàng)建一個(gè)JDBC連接之后和在把它添加到JDBC連接池中的可用連接列表之前,對(duì)該JDBC連接進(jìn)行測試。
  * Test Released Connections: 如果選擇了這個(gè)選項(xiàng),服務(wù)器就會(huì)在把連接返回給連接池之前對(duì)其進(jìn)行測試。
  * Test Table Name: 用于JDBC連接測試的數(shù)據(jù)庫表名。如果指定了Test Frequency,并且選擇了Test Reserved Connections、Test Created Connections或Test Released Connections,則Table Name是必需的

連接屬性參數(shù)說明來源于網(wǎng)上,大家從你項(xiàng)目角度設(shè)置
最后別忘記點(diǎn)最下面的APPLY按鈕


]]>
Oracle關(guān)閉某個(gè)用戶的連接http://www.aygfsteel.com/czmchen/archive/2010/01/06/308378.html陳周敏陳周敏Wed, 06 Jan 2010 00:37:00 GMThttp://www.aygfsteel.com/czmchen/archive/2010/01/06/308378.htmlhttp://www.aygfsteel.com/czmchen/comments/308378.htmlhttp://www.aygfsteel.com/czmchen/archive/2010/01/06/308378.html#Feedback0http://www.aygfsteel.com/czmchen/comments/commentRss/308378.htmlhttp://www.aygfsteel.com/czmchen/services/trackbacks/308378.html 項(xiàng)目不知道哪里代碼寫的時(shí)候沒有關(guān)閉連接,造成有些連接是死連接
這樣很容易造成數(shù)據(jù)庫崩潰或者沒連接

我的思路就是想把這個(gè)項(xiàng)目的用戶都關(guān)閉,回收資源
我的PL/SQL中運(yùn)行命令
SELECT s.Sid, s.Serial#,p.spid, s.USERNAME,s.OSUser,
s.Program  
FROM  V$Process p,V$session s WHERE p.addr=s.paddr(+ORDER BY s.Sid

有人用

alter system kill session 'sid,serial#' ;這個(gè)命令來殺死,可是資源不立刻回收


運(yùn)行下面的語句就可以回收資源
查出連接用戶后,在CMD中輸入orakill 數(shù)據(jù)庫名 SPID(EXP:orakill orcl XXX)




]]>
html dom獲取option的值http://www.aygfsteel.com/czmchen/archive/2009/12/17/306303.html陳周敏陳周敏Thu, 17 Dec 2009 07:01:00 GMThttp://www.aygfsteel.com/czmchen/archive/2009/12/17/306303.htmlhttp://www.aygfsteel.com/czmchen/comments/306303.htmlhttp://www.aygfsteel.com/czmchen/archive/2009/12/17/306303.html#Feedback0http://www.aygfsteel.com/czmchen/comments/commentRss/306303.htmlhttp://www.aygfsteel.com/czmchen/services/trackbacks/306303.html
<select id="typevalue" onChange="modifyType();">

<option value="1" id="0">11</option>

<option value="2" id="1">22</option>

<option value="3" id="2">33</option>

<option value="4" id="3">44</option>

<option value="5" id="4">55</option>

<option value="6" id="5">66</option>

<option value="7" id="10">77</option>

</select>



獲取選中的option的text值
var typevalue = document.getElementById("typevalue");
var typevalueText = typevalue.options[typevalue.selectedIndex].text;

獲取選中的option的ID值
var typevalue = document.getElementById("typevalue");
var typevalueId = typevalue.options[typevalue.selectedIndex].id;



]]>
三大連接池的參數(shù)說明http://www.aygfsteel.com/czmchen/archive/2009/11/11/301919.html陳周敏陳周敏Wed, 11 Nov 2009 01:06:00 GMThttp://www.aygfsteel.com/czmchen/archive/2009/11/11/301919.htmlhttp://www.aygfsteel.com/czmchen/comments/301919.htmlhttp://www.aygfsteel.com/czmchen/archive/2009/11/11/301919.html#Feedback0http://www.aygfsteel.com/czmchen/comments/commentRss/301919.htmlhttp://www.aygfsteel.com/czmchen/services/trackbacks/301919.html1. Apache-DBCP

Ø BasicDataSource 相關(guān)的參數(shù)說明

  • dataSource: 要連接的 datasource (通常我們不會(huì)定義在 server.xml)
  • defaultAutoCommit: 對(duì)于事務(wù)是否 autoCommit, 默認(rèn)值為 true
  • defaultReadOnly: 對(duì)于數(shù)據(jù)庫是否只能讀取, 默認(rèn)值為 false
  • driverClassName:連接數(shù)據(jù)庫所用的 JDBC Driver Class,
  • maxActive: 可以從對(duì)象池中取出的對(duì)象最大個(gè)數(shù),為0則表示沒有限制,默認(rèn)為8
  • maxIdle: 最大等待連接中的數(shù)量,設(shè) 0 為沒有限制 (對(duì)象池中對(duì)象最大個(gè)數(shù))
  • minIdle:對(duì)象池中對(duì)象最小個(gè)數(shù)
  • maxWait: 最大等待秒數(shù), 單位為 ms, 超過時(shí)間會(huì)丟出錯(cuò)誤信息
  • password: 登陸數(shù)據(jù)庫所用的密碼
  • url: 連接數(shù)據(jù)庫的 URL
  • username: 登陸數(shù)據(jù)庫所用的帳號(hào)
  • validationQuery: 驗(yàn)證連接是否成功, SQL SELECT 指令至少要返回一行
  • removeAbandoned: 是否自我中斷, 默認(rèn)是 false
  • removeAbandonedTimeout: 幾秒后會(huì)自我中斷, removeAbandoned 必須為 true
  • logAbandoned: 是否記錄中斷事件, 默認(rèn)為 false
  • minEvictableIdleTimeMillis:大于0 ,進(jìn)行連接空閑時(shí)間判斷,或?yàn)?font face="Times New Roman">0,對(duì)空閑的連接不進(jìn)行驗(yàn)證;默認(rèn)30分鐘
  • timeBetweenEvictionRunsMillis:失效檢查線程運(yùn)行時(shí)間間隔,如果小于等于0,不會(huì)啟動(dòng)檢查線程,默認(rèn)-1
  • testOnBorrow:取得對(duì)象時(shí)是否進(jìn)行驗(yàn)證,檢查對(duì)象是否有效,默認(rèn)為false
  • testOnReturn:返回對(duì)象時(shí)是否進(jìn)行驗(yàn)證,檢查對(duì)象是否有效,默認(rèn)為false
  • testWhileIdle:空閑時(shí)是否進(jìn)行驗(yàn)證,檢查對(duì)象是否有效,默認(rèn)為false

Ø 在使用DBCP的時(shí)候,如果使用默認(rèn)值,則數(shù)據(jù)庫連接因?yàn)槟撤N原因斷掉后,再從連接池中取得連接又不進(jìn)行驗(yàn)證,這時(shí)取得的連接實(shí)際上就會(huì)是無效的數(shù)據(jù)庫連接。因此為了防止獲得的數(shù)據(jù)庫連接失效,在使用的時(shí)候最好保證:

  • username: 登陸數(shù)據(jù)庫所用的帳號(hào)
  • validationQuerySELECT COUNT(*) FROM DUAL
  • testOnBorrowtestOnReturntestWhileIdle:最好都設(shè)為true
  • minEvictableIdleTimeMillis:大于0 ,進(jìn)行連接空閑時(shí)間判斷,或?yàn)?font face="Times New Roman">0,對(duì)空閑的連接不進(jìn)行驗(yàn)證
  • timeBetweenEvictionRunsMillis:失效檢查線程運(yùn)行時(shí)間間隔,如果小于等于0,不會(huì)啟動(dòng)檢查線程

Ø PS:在構(gòu)造GenericObjectPool [BasicDataSource在其createDataSource () 方法中也會(huì)使用GenericObjectPool] 時(shí),會(huì)生成一個(gè)內(nèi)嵌類Evictor,實(shí)現(xiàn)自Runnable接口。如果timeBetweenEvictionRunsMillis大于0,每過timeBetweenEvictionRunsMillis毫秒Evictor會(huì)調(diào)用evict()方法,檢查對(duì)象的閑置時(shí)間是否大于 minEvictableIdleTimeMillis毫秒(_minEvictableIdleTimeMillis小于等于0時(shí)則忽略,默認(rèn)為30分鐘),是則銷毀此對(duì)象,否則就激活并校驗(yàn)對(duì)象,然后調(diào)用ensureMinIdle方法檢查確保池中對(duì)象個(gè)數(shù)不小于_minIdle。在調(diào)用returnObject方法把對(duì)象放回對(duì)象池,首先檢查該對(duì)象是否有效,然后調(diào)用PoolableObjectFactorypassivateObject方法使對(duì)象處于非活動(dòng)狀態(tài)。再檢查對(duì)象池中對(duì)象個(gè)數(shù)是否小于maxIdle,是則可以把此對(duì)象放回對(duì)象池,否則銷毀此對(duì)象

Ø 上述特性的可設(shè)置性已在代碼中驗(yàn)證,具體性能是否能實(shí)現(xiàn)有待實(shí)際驗(yàn)證

2. C3P0

Ø C3P0的官方example中使用的數(shù)據(jù)源為ComboPooledDataSource,網(wǎng)上一篇文章詳細(xì)介紹了C3P0連接池配置中各項(xiàng)含義[這些配置項(xiàng)的含義在下載解壓c3p0的壓縮包之后目錄的doc\index.html中的Configuration部分也有詳細(xì)的介紹,這里偷下懶:P],現(xiàn)摘錄如下:

<c3p0-config>
<default-config>
<!--當(dāng)連接池中的連接耗盡的時(shí)候c3p0一次同時(shí)獲取的連接數(shù)。Default: 3 -->
<property name="acquireIncrement">3</property>

<!--定義在從數(shù)據(jù)庫獲取新連接失敗后重復(fù)嘗試的次數(shù)。Default: 30 -->
<property name="acquireRetryAttempts">30</property>

<!--兩次連接中間隔時(shí)間,單位毫秒。Default: 1000 -->
<property name="acquireRetryDelay">1000</property>

<!--連接關(guān)閉時(shí)默認(rèn)將所有未提交的操作回滾。Default: false -->
<property name="autoCommitOnClose">false</property>

<!--c3p0將建一張名為Test的空表,并使用其自帶的查詢語句進(jìn)行測試。如果定義了這個(gè)參數(shù)那么
屬性preferredTestQuery將被忽略。你不能在這張Test表上進(jìn)行任何操作,它將只供c3p0測試
使用。Default: null-->
<property name="automaticTestTable">Test</property>

<!--獲取連接失敗將會(huì)引起所有等待連接池來獲取連接的線程拋出異常。但是數(shù)據(jù)源仍有效
保留,并在下次調(diào)用getConnection()的時(shí)候繼續(xù)嘗試獲取連接。如果設(shè)為true,那么在嘗試
獲取連接失敗后該數(shù)據(jù)源將申明已斷開并永久關(guān)閉。Default: false-->
<property name="breakAfterAcquireFailure">false</property>

<!--當(dāng)連接池用完時(shí)客戶端調(diào)用getConnection()后等待獲取新連接的時(shí)間,超時(shí)后將拋出
SQLException,如設(shè)為0則無限期等待。單位毫秒。Default: 0 -->
<property name="checkoutTimeout">100</property>

<!--通過實(shí)現(xiàn)ConnectionTesterQueryConnectionTester的類來測試連接。類名需制定全路徑。
Default: com.mchange.v2.c3p0.impl.DefaultConnectionTester-->
<property name="connectionTesterClassName"></property>

<!--指定c3p0 libraries的路徑,如果(通常都是這樣)在本地即可獲得那么無需設(shè)置,默認(rèn)null即可
Default: null-->
<property name="factoryClassLocation">null</property>

<!--Strongly disrecommended. Setting this to true may lead to subtle and bizarre bugs.
(文檔原文)作者強(qiáng)烈建議不使用的一個(gè)屬性-->
<property name="forceIgnoreUnresolvedTransactions">false</property>

<!--60秒檢查所有連接池中的空閑連接。Default: 0 -->
<property name="idleConnectionTestPeriod">60</property>

<!--初始化時(shí)獲取三個(gè)連接,取值應(yīng)在minPoolSizemaxPoolSize之間。Default: 3 -->
<property name="initialPoolSize">3</property>

<!--最大空閑時(shí)間,60秒內(nèi)未使用則連接被丟棄。若為0則永不丟棄。Default: 0 -->
<property name="maxIdleTime">60</property>

<!--連接池中保留的最大連接數(shù)。Default: 15 -->
<property name="maxPoolSize">15</property>

<!--JDBC的標(biāo)準(zhǔn)參數(shù),用以控制數(shù)據(jù)源內(nèi)加載的PreparedStatements數(shù)量。但由于預(yù)緩存的statements
屬于單個(gè)connection而不是整個(gè)連接池。所以設(shè)置這個(gè)參數(shù)需要考慮到多方面的因素。
如果maxStatementsmaxStatementsPerConnection均為0,則緩存被關(guān)閉。Default: 0-->
<property name="maxStatements">100</property>

<!--maxStatementsPerConnection定義了連接池內(nèi)單個(gè)連接所擁有的最大緩存statements數(shù)。Default: 0 -->
<property name="maxStatementsPerConnection"></property>

<!--c3p0是異步操作的,緩慢的JDBC操作通過幫助進(jìn)程完成。擴(kuò)展這些操作可以有效的提升性能
通過多線程實(shí)現(xiàn)多個(gè)操作同時(shí)被執(zhí)行。Default: 3-->
<property name="numHelperThreads">3</property>

<!--當(dāng)用戶調(diào)用getConnection()時(shí)使root用戶成為去獲取連接的用戶。主要用于連接池連接非c3p0
的數(shù)據(jù)源時(shí)。Default: null-->
<property name="overrideDefaultUser">root</property>

<!--overrideDefaultUser參數(shù)對(duì)應(yīng)使用的一個(gè)參數(shù)。Default: null-->
<property name="overrideDefaultPassword">password</property>

<!--密碼。Default: null-->
<property name="password"></property>

<!--定義所有連接測試都執(zhí)行的測試語句。在使用連接測試的情況下這個(gè)一顯著提高測試速度。注意:
測試的表必須在初始數(shù)據(jù)源的時(shí)候就存在。Default: null-->
<property name="preferredTestQuery">select id from test where id=1</property>

<!--用戶修改系統(tǒng)配置參數(shù)執(zhí)行前最多等待300秒。Default: 300 -->
<property name="propertyCycle">300</property>

<!--因性能消耗大請(qǐng)只在需要的時(shí)候使用它。如果設(shè)為true那么在每個(gè)connection提交的
時(shí)候都將校驗(yàn)其有效性。建議使用idleConnectionTestPeriodautomaticTestTable
等方法來提升連接測試的性能。Default: false -->
<property name="testConnectionOnCheckout">false</property>

<!--如果設(shè)為true那么在取得連接的同時(shí)將校驗(yàn)連接的有效性。Default: false -->
<property name="testConnectionOnCheckin">true</property>

<!--用戶名。Default: null-->
<property name="user">root</property>

<!--早期的c3p0版本對(duì)JDBC接口采用動(dòng)態(tài)反射代理。在早期版本用途廣泛的情況下這個(gè)參數(shù)
允許用戶恢復(fù)到動(dòng)態(tài)反射代理以解決不穩(wěn)定的故障。最新的非反射代理更快并且已經(jīng)開始
廣泛的被使用,所以這個(gè)參數(shù)未必有用。現(xiàn)在原先的動(dòng)態(tài)反射與新的非反射代理同時(shí)受到
支持,但今后可能的版本可能不支持動(dòng)態(tài)反射代理。Default: false-->
<property name="usesTraditionalReflectiveProxies">false</property>

<property name="automaticTestTable">con_test</property>
    <property name="checkoutTimeout">30000</property>
    <property name="idleConnectionTestPeriod">30</property>
    <property name="initialPoolSize">10</property>
    <property name="maxIdleTime">30</property>
    <property name="maxPoolSize">25</property>
    <property name="minPoolSize">10</property>
    <property name="maxStatements">0</property>
    <user-overrides user="swaldman">
    </user-overrides>
</default-config>
<named-config name="dumbTestConfig">
    <property name="maxStatements">200</property>
    <user-overrides user="poop">
      <property name="maxStatements">300</property>
    </user-overrides>
   </named-config>
</c3p0-config>

Ø 上述特性的可設(shè)置性已在代碼中驗(yàn)證,具體性能是否能實(shí)現(xiàn)有待實(shí)際驗(yàn)證

Ø 從配置項(xiàng)的內(nèi)容來看,C3P0DBCP都有比較詳細(xì)的有關(guān)連接檢測保證的配置,我們可以看到C3P0可以控制數(shù)據(jù)源內(nèi)加載的PreparedStatements數(shù)量,并且可以設(shè)置幫助線程的數(shù)量來提升JDBC操作的速度這些是DBCP未提供的;另外從網(wǎng)絡(luò)上的評(píng)價(jià)來看,DBCP出現(xiàn)Bug的頻率要大于C3P0,不過這一點(diǎn)有待于我們自己實(shí)際的檢測。

3. Proxool

Ø Proxool的使用和dbcp以及c3p0稍有不同,我們需要并且只需要在使用基本的java.sql.DriverManager之前加載org.logicalcobwebs.proxool.ProxoolDriver驅(qū)動(dòng)類,并且按照proxool定義的url格式 ["proxool." + alias + ":" + driverClass + ":" + driverUrl ,其中alias是為連接池自定義的別名] 來獲得connection;具體的可以參看proxool doc下的UserGuide,或本文所附的示例代碼。下面對(duì)連接池的特性配置作詳細(xì)說明 [這個(gè)是自己翻譯的,不一定準(zhǔn)確,有問題時(shí)請(qǐng)參看doc下的Properties ~]

n fatal-sql-exception

以逗號(hào)隔開的異常列表,當(dāng)設(shè)置了此項(xiàng)之后,每當(dāng)出現(xiàn)SQLException時(shí)都將與列表中異常項(xiàng)作比較,如果匹配則認(rèn)為出現(xiàn)fatal異常,這將導(dǎo)致connection被丟棄,并且不論出現(xiàn)任何情況該異常將被重拋一次以通知用戶發(fā)生的情況。默認(rèn)值為null

n fatal-sql-exception-wrapper-class

如果配置了fatal-sql-exception,則默認(rèn)的操作是丟 棄引起SQLException的原因而只是拋出原始異常。使用fatal-sql-exception-wrapper-class這個(gè)特性可以將 SQLException包裝到繼承SQLException或RunTimeException的任何異常類里。Proxool提供了兩個(gè)類供使用 FatalSQLException和FatalRunTimeException;使用這兩個(gè)類的話就將該選項(xiàng)設(shè)置為 'org.logicalcobwebs.proxool.FatalSQLException'或者 'org.logicalcobwebs.proxool.FatalRuntimeException'。默認(rèn)值為null

n house-keeping-sleep-time

proxool自動(dòng)偵察各個(gè)連接狀態(tài)的時(shí)間間隔(毫秒),偵察到空閑的連接就馬上回收,超時(shí)的銷毀,默認(rèn)值為30

n house-keeping-test-sql

如果偵察線程發(fā)現(xiàn)閑置連接,則會(huì)使用這個(gè)SQL語句來對(duì)這些連接進(jìn)行檢查;這項(xiàng)設(shè)置的語句應(yīng)該能夠被很快的執(zhí)行,例如查詢當(dāng)前時(shí)間 [info.setProperty("proxool.house-keeping-test-sql", "select CURRENT_DATE");] 。如果不設(shè)置則該選項(xiàng)被忽略

n injectable-connection-interfaceinjectable-statement-interfaceinjectable-prepared-statement-interfaceinjectable-callable-statement-interface

n jmx

如果此項(xiàng)設(shè)為true,則連接池將被以名稱"Proxool:type=Pool, name=<alias>"注冊(cè)為JMS Server的MBean。默認(rèn)值為false

n jmx-agent-id

當(dāng)且僅當(dāng)jmx選項(xiàng)設(shè)為true時(shí)使用,為以逗號(hào)分隔的連接持注冊(cè)到的JMS代理名稱列表;如果不設(shè)置則所有注冊(cè)的JMX Server都將被使用

n maximum-active-time

線程最大存活時(shí)間,超過此時(shí)間的線程將被守護(hù)線程kill掉,默認(rèn)值為5分鐘

n maximum-connection-count

到數(shù)據(jù)庫的最大連接數(shù),超過了這個(gè)連接,再有請(qǐng)求時(shí),就排在隊(duì)列中等候,最大的等待請(qǐng)求數(shù)由simultaneous-build-throttle決定;默認(rèn)值為15

n maximum-connection-lifetime

連接最大存活時(shí)間,毫秒為單位,默認(rèn)值為4小時(shí)

n minimum-connection-count

不管是否被使用都保持開放的最小連接數(shù),默認(rèn)值為5

n overload-without-refusal-lifetime

用來判斷連接池狀態(tài),如果在此選項(xiàng)設(shè)置時(shí)間內(nèi)(毫秒為單位)拒絕了連接,則認(rèn)為過負(fù)載。默認(rèn)值為60

n prototype-count

最少保持的空閑連接數(shù),注意與minimum-connection-count區(qū)分。默認(rèn)值為0

n simultaneous-build-throttle

最大的等待請(qǐng)求數(shù),默認(rèn)值為10

n test-before-use

如果設(shè)為true則connection在使用前將以house-keeping-test-sql設(shè)置的語句測試,如果測試不通過則該connection被丟棄并會(huì)重新分配一個(gè)connection。默認(rèn)為false

n test-after-use

如果設(shè)為true則connection在關(guān)閉(放回連接池)前將以house-keeping-test-sql設(shè)置的語句測試,如果測試不通過connection將被丟棄。默認(rèn)值為false

Ø 與其它連接池特性的設(shè)置方法不同,Proxool不提供相應(yīng)的set方法,所有特性都要以諸如info.setProperty("proxool.jmx", "false");方式設(shè)定

Ø 上述特性的可設(shè)置性已在代碼中驗(yàn)證,具體性能是否能實(shí)現(xiàn)有待實(shí)際驗(yàn)證



]]>
Tomcat數(shù)據(jù)源連接經(jīng)驗(yàn)http://www.aygfsteel.com/czmchen/archive/2009/11/10/301853.html陳周敏陳周敏Tue, 10 Nov 2009 08:22:00 GMThttp://www.aygfsteel.com/czmchen/archive/2009/11/10/301853.htmlhttp://www.aygfsteel.com/czmchen/comments/301853.htmlhttp://www.aygfsteel.com/czmchen/archive/2009/11/10/301853.html#Feedback1http://www.aygfsteel.com/czmchen/comments/commentRss/301853.htmlhttp://www.aygfsteel.com/czmchen/services/trackbacks/301853.html Tomcat現(xiàn)在支持很多技術(shù),下面我把我的TOMCAT上配置的數(shù)據(jù)源經(jīng)驗(yàn)和大家分享

配置前的準(zhǔn)備工作:先將你的連接數(shù)據(jù)庫的JAR COPY到服務(wù)器的LIB文件夾下,供服務(wù)器調(diào)用(如現(xiàn)在用的是TOMCAT,那就將該JAR COPY到TOMCAT下的LIB文件夾)

打開項(xiàng)目的META-INF文件夾下的context.xml的文件(沒有的新建一個(gè)context.xml文件)
修改其中的配置,詳細(xì)的配置信息以下:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/TomcatDataSources" docBase="TomcatDataSources"
    debug="5" reloadable="true" crossContext="true">
        <Resource name="jdbc/czmds" auth="Container"
        type="javax.sql.DataSource" maxActive="100" maxIdle="30"
        maxWait="10000" username="root" password=""
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://localhost/czm?characterEncoding=utf-8"/>  
</Context>

說明:context中的屬性path為你的項(xiàng)目的上下文路徑
      Resource中的屬性name為該數(shù)據(jù)源的別名,這個(gè)自己喜歡定義



然后在web.xml下加上下面的配置
<resource-ref>
        <description>DB Connection</description>
        <res-ref-name>jdbc/czmds</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
</resource-ref>

說明:res-ref-name為你的數(shù)據(jù)源設(shè)定的別名

最后一步:測試連接是否成功,記得在JSP頁面或Servlet上測試

提示:數(shù)據(jù)源獲取連接的代碼以下:
javax.naming.Context ctx = new javax.naming.InitialContext();
javax.sql.DataSource ds = (javax.sql.DataSource) ctx
                    .lookup("java:/comp/env/jdbc/czmds");
java.sql.Connection conn = ds.getConnection();  
說明:lookup是查找數(shù)據(jù)源的別名,這個(gè)就直接在java:/comp/env/后加別名,以上


說到最后,一定要記得關(guān)連接



]]>
淺談proxool連接池經(jīng)驗(yàn)http://www.aygfsteel.com/czmchen/archive/2009/11/10/301843.html陳周敏陳周敏Tue, 10 Nov 2009 07:47:00 GMThttp://www.aygfsteel.com/czmchen/archive/2009/11/10/301843.htmlhttp://www.aygfsteel.com/czmchen/comments/301843.htmlhttp://www.aygfsteel.com/czmchen/archive/2009/11/10/301843.html#Feedback1http://www.aygfsteel.com/czmchen/comments/commentRss/301843.htmlhttp://www.aygfsteel.com/czmchen/services/trackbacks/301843.html

所以一個(gè)項(xiàng)目訪問數(shù)據(jù)庫比較頻繁的時(shí)候,就要用到連接池,一般連接池本人都覺得proxool比較好(這個(gè)網(wǎng)上的都是這樣說,呵呵),我以前一直都用C3P0連接池,發(fā)覺速度還不錯(cuò),不過不大穩(wěn)定!
不說那么多,淺談下我的proxool的經(jīng)驗(yàn)

準(zhǔn)備前的工作:
到proxool官網(wǎng)http://proxool.sourceforge.net/上下載JAR包和文檔
然后解壓,把里面的proxool-0.9.1.jar和proxool-cglib.jar放到你的服務(wù)器的lib下面(好像我用的是TOMCAT,就放到TOMCAT的lib里面,供TOMCAT調(diào)用)

先在WEB-INF下建立以個(gè)proxool.xml的文件
詳細(xì)的配置以下:

<?xml version="1.0" encoding="UTF-8"?>
<!--
    Document   : proxool.xml
    Created on : 2009年11月9日, 下午3:15
    Author     : Administrator
    Description:
        Purpose of the document follows.
-->
<something-else-entirely>
    <proxool>
        <alias>mypool</alias>

        <driver-url>jdbc:mysql://localhost/czm?characterEncoding=utf-8</driver-url>
        <driver-class>com.mysql.jdbc.Driver</driver-class>

        <driver-properties>
            <property name="user" value="root"/>
            <property name="password" value=""/>
        </driver-properties>

        <!-- proxool自動(dòng)偵察各個(gè)連接狀態(tài)的時(shí)間間隔(毫秒),偵察到空閑的連接就馬上回收,超時(shí)的銷毀-->
        <house-keeping-sleep-time>300000</house-keeping-sleep-time>

        <!--最大的等待請(qǐng)求數(shù),即因沒有空閑連接可以分配而在隊(duì)列中等候的最大請(qǐng)求數(shù),超過這個(gè)請(qǐng)求數(shù)的用戶連接就不會(huì)被接受-->
        <proxool.simultaneous-build-throttle>200</proxool.simultaneous-build-throttle>

        <!-- maximum-new-connections>50</maximum-new-connections-->

         <!-- 最少保持的空閑連接數(shù)-->
        <prototype-count>5</prototype-count>
        <!-- 允許最大連接數(shù),超過了這個(gè)連接,再有請(qǐng)求時(shí),就排在隊(duì)列中等候,最大的等待請(qǐng)求數(shù)由maximum-new-connections決定-->
        <maximum-connection-count>100</maximum-connection-count>

         <!-- 最小連接數(shù)-->
        <minimum-connection-count>25</minimum-connection-count>      

        <maximum-active-time>300000</maximum-active-time>
        <maximum-connection-lifetime>3600000</maximum-connection-lifetime>


        <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>

    </proxool>
</something-else-entirely>



接著在web.xml下做個(gè)插件
詳細(xì)配置以下:

<servlet>
        <servlet-name>ServletConfigurator</servlet-name>
        <servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
        <init-param>
            <param-name>xmlFile</param-name>
            <param-value>WEB-INF/proxool.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
        <servlet-name>Admin</servlet-name>
        <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Admin</servlet-name>
        <url-pattern>/proxool</url-pattern><!--這個(gè)設(shè)置是你的項(xiàng)目的上下文路徑-->
    </servlet-mapping>

web.xml配置完后,剩下的就是寫個(gè)測試連接類
新建一個(gè)jsp頁面,頁面內(nèi)容以下:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <%
        java.sql.Connection conn = java.sql.DriverManager.getConnection("proxool.myself");
        System.out.println("conn:" + conn);
        out.print("conn:" + conn);
        conn.close();
        %>
    </body>
</html>


OK.運(yùn)行該頁面看看是否成功?
以前我就是在類中測試,發(fā)覺它連接不上,報(bào)
java.sql.SQLException: No suitable driver found for proxool.myself
的錯(cuò)誤。
所以一定要用JSP或servlet來測試,因?yàn)樗{(diào)用到服務(wù)器




]]>
主站蜘蛛池模板: 即墨市| 洮南市| 富平县| 安国市| 荣成市| 赤城县| 敦煌市| 石家庄市| 墨脱县| 兰西县| 蒙城县| 武汉市| 苍山县| 北流市| 从化市| 正安县| 江陵县| 夏津县| 丹阳市| 西藏| 湄潭县| 利川市| 双城市| 浪卡子县| 津市市| 辽中县| 安岳县| 社旗县| 贵南县| 鲁山县| 共和县| 林甸县| 沅江市| 元阳县| 涟水县| 新郑市| 桃源县| 上蔡县| 宁南县| 大足县| 康定县|