大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

Tomca教程
Tomcat Manager
Tomcat Realm 配置
Tomcat 安全管理
Tomcat JNDI 資源
Tomcat JDBC 數據源
Tomcat 類加載機制
Tomcat JSPs
Tomcat SSL/TLS配置
Tomcat SSI
Tomcat CGI
Tomcat 代理支持
Tomcat MBean 描述符
Tomcat 默認 Servlet
Tomcat 集群
Tomcat 連接器
Tomcat監控與管理
Tomcat 日志機制
Tomcat 基于 APR 的原生庫
Tomcat 虛擬主機
Tomcat 高級 IO 機制
Tomcat 附加組件
Tomcat 安全性注意事項
Tomcat Windows 服務
Tomcat Windows 認證
Tomcat 的 JDBC 連接池
Tomcat WebSocket 支持
Tomcat 重寫機制

攔截器

對于啟用、禁止或修改特定連接或其組件的功能而言,使用攔截器無疑是一種非常強大的方式。There are many different use cases for when interceptors are useful。默認情況下,基于性能方面的考慮,連接池是無狀態的。連接池本身所插入的狀態是 defaultAutoCommit、defaultReadOnly、defaultTransactionIsolation,或 defaultCatalog(如果設置了這些狀態)。這 4 個狀態只有在連接創建時才設置。無論這些屬性是否在連接使用期間被修改,池本身都不能重置它們。

攔截器必須擴展自 org.apache.tomcat.jdbc.pool.JdbcInterceptor 類。該類相當簡單,你必須利用一個無參數構造函數。

  public JdbcInterceptor() {
  }  

當從連接池借出一個連接時,攔截器能夠通過實現以下方法,初始化這一事件或以一些其他形式來響應該事件。

public abstract void reset(ConnectionPool parent, PooledConnection con);

上面這個方法有兩個參數,一個是連接池本身的引用 ConnectionPool parent,一個是底層連接的引用 PooledConnection con。

當調用 java.sql.Connection 對象上的方法時,會導致以下方法被調用:

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable

Method method 是被調用的實際方法,Object[] args 是參數。通過觀察下面這個非常簡單的例子,我們可以解釋如果當連接已經關閉時,如何讓 java.sql.Connection.close() 的調用變得無用。

  if (CLOSE_VAL==method.getName()) {
      if (isClosed()) return null; //noop for already closed.
  }
  return super.invoke(proxy,method,args);  

池啟動與停止

當連接池開啟或關閉時,你可以得到相關通知。可能每個攔截器類只通知一次,即使它是一個實例方法。也可能使用當前未連接到池中的攔截器來通知你。

public void poolStarted(ConnectionPool pool) {
  }
  public void poolClosed(ConnectionPool pool) {
  }

當重寫這些方法時,如果你擴展自 JdbcInterceptor 之外的類,不要忘記調用超類。

配置攔截器

攔截器可以通過 jdbcInterceptors 屬性或 setJdbcInterceptors 方法來配置。攔截器也可以有屬性,可以通過如下方式來配置:

String jdbcInterceptors=
    "org.apache.tomcat.jdbc.pool.interceptor.ConnectionState(useEquals=true,fast=yes)"

攔截器屬性

既然攔截器也有屬性,那么你也可以讀取其中的屬性值。你可以重寫 setProperties 方法。

  public void setProperties(Map properties) {
     super.setProperties(properties);
     final String myprop = "myprop";
     InterceptorProperty p1 = properties.get(myprop);
     if (p1!=null) {
         setMyprop(Long.parseLong(p1.getValue()));
     }
  }

獲取實際的 JDBC 連接

連接池圍繞實際的連接創建包裝器,為的是能夠正確地池化。同樣,為了執行特定的功能,我們也可以在這些包裝器中創建攔截器。如果不需要獲取實際的連接,可以使用 javax.sql.PooledConnection 接口。

  Connection con = datasource.getConnection();
  Connection actual = ((javax.sql.PooledConnection)con).getConnection();

構建

下面利用 1.6 來構建 JDBC 連接池代碼,但它也可以向后兼容到 1.5 運行時環境。為了單元測試,使用 1.6 或更高版本。

更多的關于 JDBC 用途的 Tomcat 配置范例可參看 [Tomcat 文檔]()。

從源代碼構建

構建非常簡單。池依賴于 tomcat-juli.jar,在這種情況下,需要 SlowQueryReportJmx。

 javac -classpath tomcat-juli.jar \
        -d . \
        org/apache/tomcat/jdbc/pool/*.java \
        org/apache/tomcat/jdbc/pool/interceptor/*.java \
        org/apache/tomcat/jdbc/pool/jmx/*.java

構建文件位于 Tomcat 的源代碼倉庫中。

為了方便起見,在通過簡單構建命令生成所需文件的地方也包含了一個構建文件。

 ant download  (downloads dependencies)
  ant build     (compiles and generates .jar files)
  ant dist      (creates a release package)
  ant test      (runs tests, expects a test database to be setup)

系統針對 Maven 構建進行組織,但是沒有生成發布組件,只有庫本身。

全部教程
主站蜘蛛池模板: 日本视频a | 日韩一区二区久久久久久 | 在线观看免费亚洲 | 黄页网站 播放器 日本 | 全黄一级裸片视频免费区 | 91国内精品久久久久影院优播 | 国产成人一区 | 日日摸夜夜爽日日放碰 | a级黄片毛片 | 99热99在线| 久久亚洲国产的中文 | 日操夜操天天操 | 成人欧美一区二区三区在线 | 四虎永久 | 欧美操穴视频 | 亚洲国产美女精品久久久久 | 奇米影视四色狠狠888俺去啦 | 男女拍拍视频黄的全免费 | 97se狠狠狠狠狼亚洲综合网 | 特黄特级毛片免费视 | 久久久久久中文字幕 | 国产亚洲精品视频中文字幕 | 国产高清视频青青青在线 | 91视频网址入口 | 激情五月婷婷红人馆 | 亚洲 欧洲 另类 综合 自拍 | 精品无人区乱码一区2区3区 | 亚洲综合干| 国产真实伦视频在线视频 | 日本特黄a级高清免费大片18 | 色综合久久精品中文字幕 | 国产精品视频不卡 | 久久爱99| 四虎影视免费永久在线观看黄 | 成人综合婷婷国产精品久久免费 | www久久久久 | 日韩中文字幕网 | 嘿嘿嘿视频免费网站在线观看 | 91精品国产免费久久久久久 | 国产系列在线观看 | 久久精品国产丝袜 |