<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    czmchen

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      17 隨筆 :: 0 文章 :: 24 評論 :: 0 Trackbacks

    2009年6月12日 #

    web.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表達式了
    posted @ 2010-04-19 17:33 陳周敏 閱讀(576) | 評論 (0)編輯 收藏

    SQL語句:
    1 select * from tableName where tableName.id in (select max(tableName.id) from tableName group by tableName.name having count(tableName.id) >1 )


    posted @ 2010-04-15 16:23 陳周敏 閱讀(288) | 評論 (0)編輯 收藏

    標記下,總結下經驗


    select清空option
    1 document.getElementById("type").options.length = 0;
    select創建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 


    posted @ 2010-04-06 17:52 陳周敏 閱讀(227) | 評論 (0)編輯 收藏

    由于開發的需要,要用到xfire,對于開發我比較關心的是安全和速度!所以就找了xfire中的ws-security,利用它的安全證書和key,安全足夠了

    先到網上下載最新版的xfire,一般都去官方網站下載,了解下詳情!其官網為http://xfire.codehaus.org
    現在最新版為1.2.6,把xfire-all-1.2.6.jar xfire-distribution-1.2.6.zip下載

    準備前,先看看ws-securitye的步驟,在http://xfire.codehaus.org/WS-Security里面可以看到,它提示我們installed Unlimited Strength Jurisdiction Policy Files,我就在http://java.sun.com/j2se/1.5.0/download.jsp里面下載兩個包,因為我安裝的是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,點擊下載,下載下來后,按照里面的步驟,把這兩個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



    準備工作做好后,解壓xfire-distribution-1.2.6.zip,然后你會看到xfire-1.2.6這個文件夾,進去,你會看到有個examples文件夾,再進去,你就發現很多demo啦,在這里就找到了ws-security的demo

    啟動Myeclipse,看到里面的.classpath和.project文件,這個是eclipse的項目!用myeclipse打開,你發現都不正確,這些錯誤我就不理!

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



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

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


    修改完畢后,把項目部署到tomcat,啟動服務器后,org.codehaus.xfire.client下運行BookClientEnc.java
    。運行后會報下面的錯誤
    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

    這是因為你還沒把xalan.jar加入去,到http://www.apache.org/dyn/closer.cgi/xml/xalan-j 下載最新版
    ,現在最新去到2_7_1,找到xalan-j_2_7_1-bin.zip,把其下載后,添加xalan.jar到項目

    再運行,如果出現下面的結果,那就正常啦
    Running client : Encryption Client
    Looking for isbn : 0123456789 ....Using XFire : Dan Diephouse


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

    posted @ 2010-01-15 09:51 陳周敏 閱讀(1575) | 評論 (0)編輯 收藏

    進入weblogic后臺配置數據庫連接池。因為我的項目數據庫是ORACLE,那就以Oracle的配置作為示例:

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

    進入后臺后,單擊左邊的mydomain—>Services—>JDBC—>Connection Pools
    新建我就不說了,在我的文章里面有weblogic的數據源連接create

    9.x的要解鎖,那就先解鎖。點擊你想設置的數據源的名稱進去。進去后點擊上面的菜單Connections

    看到參數設置了吧。

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

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

    Inactive Connection Timeout:60(無效連接超時!這個會在指定的時間內,回收無效連接)

    網上有些人說設置這些參數后一定的時間會出現java.lang.OutOfMemoryError的錯誤
    解決的方法就是調大JVM的內存,在啟動時對jvm設置內存限度
    通過修改commom\bin\commEnv.cmd文件來增加內存分配
    修改的部分如下:
    :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//這些看你內存定1G的就設置=-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//這個就解決了java.lang.OutOfMemoryError的錯誤
    goto continue
    將這里的內存分配修改后見效。

    連接屬性參數說明:

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

    連接屬性參數說明來源于網上,大家從你項目角度設置
    最后別忘記點最下面的APPLY按鈕
    posted @ 2010-01-08 17:22 陳周敏 閱讀(2372) | 評論 (0)編輯 收藏

    最近開發用的Weblogic的JNDI數據源連接,可是JNDI沒有自動回收連接的功能!
    項目不知道哪里代碼寫的時候沒有關閉連接,造成有些連接是死連接
    這樣很容易造成數據庫崩潰或者沒連接

    我的思路就是想把這個項目的用戶都關閉,回收資源
    我的PL/SQL中運行命令
    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#' ;這個命令來殺死,可是資源不立刻回收


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


    posted @ 2010-01-06 08:37 陳周敏 閱讀(7327) | 評論 (0)編輯 收藏

    記錄dom的學習經驗。下次忘記的時候直接來拿

    <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;

    posted @ 2009-12-17 15:01 陳周敏 閱讀(874) | 評論 (0)編輯 收藏

    1. Apache-DBCP

    Ø BasicDataSource 相關的參數說明

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

    Ø 在使用DBCP的時候,如果使用默認值,則數據庫連接因為某種原因斷掉后,再從連接池中取得連接又不進行驗證,這時取得的連接實際上就會是無效的數據庫連接。因此為了防止獲得的數據庫連接失效,在使用的時候最好保證:

    • username: 登陸數據庫所用的帳號
    • validationQuerySELECT COUNT(*) FROM DUAL
    • testOnBorrowtestOnReturntestWhileIdle:最好都設為true
    • minEvictableIdleTimeMillis:大于0 ,進行連接空閑時間判斷,或為0,對空閑的連接不進行驗證
    • timeBetweenEvictionRunsMillis:失效檢查線程運行時間間隔,如果小于等于0,不會啟動檢查線程

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

    Ø 上述特性的可設置性已在代碼中驗證,具體性能是否能實現有待實際驗證

    2. C3P0

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

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

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

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

    <!--連接關閉時默認將所有未提交的操作回滾。Default: false -->
    <property name="autoCommitOnClose">false</property>

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

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

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

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

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

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

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

    <!--初始化時獲取三個連接,取值應在minPoolSizemaxPoolSize之間。Default: 3 -->
    <property name="initialPoolSize">3</property>

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

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

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

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

    <!--c3p0是異步操作的,緩慢的JDBC操作通過幫助進程完成。擴展這些操作可以有效的提升性能
    通過多線程實現多個操作同時被執行。Default: 3-->
    <property name="numHelperThreads">3</property>

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

    <!--overrideDefaultUser參數對應使用的一個參數。Default: null-->
    <property name="overrideDefaultPassword">password</property>

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

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

    <!--用戶修改系統配置參數執行前最多等待300秒。Default: 300 -->
    <property name="propertyCycle">300</property>

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

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

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

    <!--早期的c3p0版本對JDBC接口采用動態反射代理。在早期版本用途廣泛的情況下這個參數
    允許用戶恢復到動態反射代理以解決不穩定的故障。最新的非反射代理更快并且已經開始
    廣泛的被使用,所以這個參數未必有用。現在原先的動態反射與新的非反射代理同時受到
    支持,但今后可能的版本可能不支持動態反射代理。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>

    Ø 上述特性的可設置性已在代碼中驗證,具體性能是否能實現有待實際驗證

    Ø 從配置項的內容來看,C3P0DBCP都有比較詳細的有關連接檢測保證的配置,我們可以看到C3P0可以控制數據源內加載的PreparedStatements數量,并且可以設置幫助線程的數量來提升JDBC操作的速度這些是DBCP未提供的;另外從網絡上的評價來看,DBCP出現Bug的頻率要大于C3P0,不過這一點有待于我們自己實際的檢測。

    3. Proxool

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

    n fatal-sql-exception

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

    n fatal-sql-exception-wrapper-class

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

    n house-keeping-sleep-time

    proxool自動偵察各個連接狀態的時間間隔(毫秒),偵察到空閑的連接就馬上回收,超時的銷毀,默認值為30

    n house-keeping-test-sql

    如果偵察線程發現閑置連接,則會使用這個SQL語句來對這些連接進行檢查;這項設置的語句應該能夠被很快的執行,例如查詢當前時間 [info.setProperty("proxool.house-keeping-test-sql", "select CURRENT_DATE");] 。如果不設置則該選項被忽略

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

    n jmx

    如果此項設為true,則連接池將被以名稱"Proxool:type=Pool, name=<alias>"注冊為JMS Server的MBean。默認值為false

    n jmx-agent-id

    當且僅當jmx選項設為true時使用,為以逗號分隔的連接持注冊到的JMS代理名稱列表;如果不設置則所有注冊的JMX Server都將被使用

    n maximum-active-time

    線程最大存活時間,超過此時間的線程將被守護線程kill掉,默認值為5分鐘

    n maximum-connection-count

    到數據庫的最大連接數,超過了這個連接,再有請求時,就排在隊列中等候,最大的等待請求數由simultaneous-build-throttle決定;默認值為15

    n maximum-connection-lifetime

    連接最大存活時間,毫秒為單位,默認值為4小時

    n minimum-connection-count

    不管是否被使用都保持開放的最小連接數,默認值為5

    n overload-without-refusal-lifetime

    用來判斷連接池狀態,如果在此選項設置時間內(毫秒為單位)拒絕了連接,則認為過負載。默認值為60

    n prototype-count

    最少保持的空閑連接數,注意與minimum-connection-count區分。默認值為0

    n simultaneous-build-throttle

    最大的等待請求數,默認值為10

    n test-before-use

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

    n test-after-use

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

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

    Ø 上述特性的可設置性已在代碼中驗證,具體性能是否能實現有待實際驗證

    posted @ 2009-11-11 09:06 陳周敏 閱讀(1044) | 評論 (0)編輯 收藏

    Tomcat是一個小巧玲瓏的好物,呵呵。一般開發少不了它。
    Tomcat現在支持很多技術,下面我把我的TOMCAT上配置的數據源經驗和大家分享

    配置前的準備工作:先將你的連接數據庫的JAR COPY到服務器的LIB文件夾下,供服務器調用(如現在用的是TOMCAT,那就將該JAR COPY到TOMCAT下的LIB文件夾)

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

    <?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為你的項目的上下文路徑
          Resource中的屬性name為該數據源的別名,這個自己喜歡定義



    然后在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為你的數據源設定的別名

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

    提示:數據源獲取連接的代碼以下:
    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是查找數據源的別名,這個就直接在java:/comp/env/后加別名,以上


    說到最后,一定要記得關連接

    posted @ 2009-11-10 16:22 陳周敏 閱讀(1866) | 評論 (1)編輯 收藏

    連接池是負責分配、管理和釋放數據庫連接,它允許應用程序重復使用一個現有的數據庫連接,而再不是重新建立一個;釋放空閑時間超過最大空閑時間的數據庫連接來避免因為沒有釋放數據庫連接而引起的數據庫連接遺漏。這項技術能明顯提高對數據庫操作的性能


    所以一個項目訪問數據庫比較頻繁的時候,就要用到連接池,一般連接池本人都覺得proxool比較好(這個網上的都是這樣說,呵呵),我以前一直都用C3P0連接池,發覺速度還不錯,不過不大穩定!
    不說那么多,淺談下我的proxool的經驗

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

    先在WEB-INF下建立以個proxool.xml的文件
    詳細的配置以下:

    <?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自動偵察各個連接狀態的時間間隔(毫秒),偵察到空閑的連接就馬上回收,超時的銷毀-->
            <house-keeping-sleep-time>300000</house-keeping-sleep-time>

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

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

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

             <!-- 最小連接數-->
            <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下做個插件
    詳細配置以下:

    <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><!--這個設置是你的項目的上下文路徑-->
        </servlet-mapping>

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

    <%@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.運行該頁面看看是否成功?
    以前我就是在類中測試,發覺它連接不上,報
    java.sql.SQLException: No suitable driver found for proxool.myself
    的錯誤。
    所以一定要用JSP或servlet來測試,因為它調用到服務器


    posted @ 2009-11-10 15:47 陳周敏 閱讀(2985) | 評論 (1)編輯 收藏

    我對異常拋出的情況作啦一個總結,下面的是我在做項目的時候,處理拋出來的經典異常。

    嚴重: action: null
    java.lang.ClassNotFoundException: org.springframework.web.struts.ContextLoaderPlugIn
            at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
            at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
            at org.apache.struts.util.RequestUtils.applicationClass(RequestUtils.java:124)
            at org.apache.struts.util.RequestUtils.applicationInstance(RequestUtils.java:172)
            at org.apache.struts.util.RequestUtils.applicationInstance(RequestUtils.java:147)
            at org.apache.struts.action.ActionServlet.initModulePlugIns(ActionServlet.java:842)
            at org.apache.struts.action.ActionServlet.init(ActionServlet.java:359)
            at javax.servlet.GenericServlet.init(GenericServlet.java:212)
            at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1172)
            at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:992)
            at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4058)
            at org.apache.catalina.core.StandardContext.start(StandardContext.java:4371)
            at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
            at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
            at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
            at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:627)
            at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:511)
            at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1231)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:597)
            at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:297)
            at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:836)
            at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761)
            at org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1471)
            at org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:824)
            at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:350)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
            at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
            at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
            at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
            at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
            at java.lang.Thread.run(Thread.java:619)
    2009-6-13 19:47:25 org.apache.catalina.core.ApplicationContext log


    這個異常我看不少人都遇到吧,看著這個異常,你覺得是不是很郁悶,剛開始看到這個action: null就想:“是Struts里出啦問題,肯定是參數不對應ActionForm造成的吧!”然后就拼命地在頁面和ActionForm來作對照,對來對去都是一樣啊!怎么還是有錯呢?剛剛開始我也是這樣想的,可是做啦一大堆的無用功后,就發現我這種想法是錯的!每次部署后還是這個錯,你再細心地看下面的那個錯誤“java.lang.ClassNotFoundException: org.springframework.web.struts.ContextLoaderPlugIn”,這個org.springframework.web.struts.ContextLoaderPlugIn這個東西是不是很熟悉呢?仔細找下看,發現你的Struts-config.xml里面是不是也有這樣一段話:
        <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
            <set-property property="contextConfigLocation"
       value="/WEB-INF/applicationContext.xml"/>
        </plug-in>
    問題就出在這里啦!不過有些人找到問題所在后,也不會認為這里有問題,就算這里有問題,最多就是Spring的配置文件不對應!然后就去修改一下配置文件,可是還是于是無補!

    我經過一段時間的思考后,就想啦一下,這個既然是Spring的配置文件,那一定和它的插件有關,是不是Spring和Struts整合不好呢?然后就查了一下庫文件,發現Spring庫文件導入的是很少!上網查下資料,發現對于這個問題的很少有答案,有人提出的可是找不到問題所在!我就去啦Spring的官網下載它的庫文件和一些相應的資料來,在找資料的過程中,我也下載啦一個叫spring-struts.jar的庫文件,這個文件看起來好象是Spring整合Struts的庫文件!有啦這幾個東西,我就開始開工測試
    我就先按我的猜想,先導入spring-struts.jar這文件,部署后,發現沒錯誤,運行也沒錯!果然證實我的想法沒錯
    然后我還把下載來的Spring官網的最新的庫文件,發現找不到spring-struts.jar這個庫文件。然后我一個個測試后,原來這個庫文件是集成在spring-web.jar里面啦!
    我把spring-struts.jar去掉后,導入Spring官方的最新的相關庫文件后(不能全部導,全部導入也會有錯誤,用到的才能導!),程序也沒發生任何錯誤

    以下的是我用到的庫文件,本人測試過沒問題
    http://www.tkk7.com/Files/czmchen/ssh中Spring的庫文件.rar
    http://www.tkk7.com/Files/czmchen/spring-struts.jar.zip
    posted @ 2009-06-13 20:20 陳周敏 閱讀(1553) | 評論 (6)編輯 收藏

    本人就建立啦一個群,群號:18777357,歡迎在J2EE這一塊上發展和學習的加入
    posted @ 2009-06-12 19:06 陳周敏 閱讀(166) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 美女视频黄频a免费| 亚洲国产av高清无码| 特黄特色的大片观看免费视频| 在线观看视频免费国语| 亚洲一区二区三区在线观看网站| 国产成人精品免费视频大全麻豆| 亚洲剧场午夜在线观看| 在线观看免费人成视频色9| 亚洲hairy多毛pics大全| 在线jyzzjyzz免费视频| 国产精品亚洲一区二区无码 | 亚洲电影中文字幕| 国产精品免费AV片在线观看| 国产精品自在自线免费观看| 男男黄GAY片免费网站WWW| 亚洲精品国产自在久久| 全黄大全大色全免费大片| 久久综合亚洲鲁鲁五月天| 成人免费ā片在线观看| 久久亚洲国产午夜精品理论片| 日韩精品无码免费一区二区三区| 亚洲电影唐人社一区二区| 免费一区二区无码东京热| 无码乱人伦一区二区亚洲一| free哆啪啪免费永久| 亚洲成a人无码亚洲成www牛牛| 亚洲?V乱码久久精品蜜桃| 亚洲看片无码在线视频| 全黄性性激高免费视频| 国内少妇偷人精品视频免费| 亚洲国产精品日韩在线| 免费国产在线观看不卡| 免费观看成人久久网免费观看| 亚洲av永久无码嘿嘿嘿| 亚洲国产小视频精品久久久三级| 好紧我太爽了视频免费国产| 亚洲 欧洲 视频 伦小说| 精品国产人成亚洲区| 日本高清不卡aⅴ免费网站| 亚洲另类春色国产精品| 久久久久亚洲AV成人网人人软件|