Jboss Datasource Oracle配置

时间:2012-02-21 08:25:46

标签: oracle jboss datasource pool

我都是,

我正在使用jboss 5.1.0 jdk 1.6。 当我的WebAPP没有用户工作时,我执行下一个sql来查看我的Oracle DB上的会话:

 SELECT A.INST_ID,A.USERNAME,A.STATUS,A.SCHEMANAME,A.MACHINE,A.PROGRAM, 
      TO_CHAR((SYSDATE -((1/86400)*LAST_CALL_ET)),'YYYY-MM-DD HH24:MI:SS') LAST_CALL, 
      TO_CHAR(A.LOGON_TIME,'YYYY-MM-DD HH24:MI:SS') LOGON_TIME, 
      A.SID,A.SERIAL#, 
A.FAILOVER_TYPE,A.FAILED_OVER, 
A.OSUSER,A.TERMINAL,A.TYPE,A.MODULE,A.SERVER,A.LOCKWAIT,A.RESOURCE_CONSUMER_GROUP 
FROM GV$SESSION A  
WHERE A.SCHEMANAME IN ('USER_DB') 
ORDER BY USERNAME,MACHINE,LAST_CALL ASC

结果是:

1   USR_DB  INACTIVE    USR_DB  machine_name  JDBC Thin Client  2012-02-20 11:05:16 2012-02-20 11:04:46 24  5001    NONE    NO  root    unknown USER    JDBC Thin Client    DEDICATED       OTHER_GROUPS

2   USR_DB  ACTIVE      USR_DB  machine2_name  SQL Developer    2012-02-21 09:05:13 2012-02-21 09:03:23 31  3997    NONE    NO  clien2  unknown USER    SQL Developer   DEDICATED       OTHER_GROUPS

第一个结果是我的WebAPP的非活动会话,第二个是我的SQL Developer的活动会话。 我的问题是:如何从视图GV $ SESSION非活动会话中删除或清除?这是我的oracle-ds.xml:

   <?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
        <jndi-name>/MyDS</jndi-name>
        <connection-url>jdbc:oracle:thin:@//myhost:1521/xe</connection-url>
        <driver-class>oracle.jdbc.OracleDriver</driver-class>
        <user-name>USR_DB</user-name>
        <password>password</password>
        <min-pool-size>1</min-pool-size>
        <max-pool-size>20</max-pool-size>
        <idle-timeout-minutes>5</idle-timeout-minutes>
        <check-valid-connection-sql>SELECT 1 FROM DUAL</check-valid-connection-sql>
        <background-validation-millis>400000</background-validation-millis>
        <valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker</valid-connection-checker-class-name>
        <metadata>
          <type-mapping>Oracle9i</type-mapping>
        </metadata>
</local-tx-datasource>
</datasources>

有一个特殊的配置参数来强制非活动连接不出现或在视图GV $ SESSION中删除它? 在我的应用程序中,我确信我会返回池中的连接。

提前致谢。

1 个答案:

答案 0 :(得分:1)

大多数情况下,您的会话将会而且应该是不活跃的。

INACTIVE会话仅意味着在该特定时刻,该会话不执行任何特定的SQL语句。这并不意味着会话需要清理。它与您的应用程序是否返回池连接无关。它只是意味着存在一个开放的数据库连接,此时不会执行SQL语句。

当然,您可以通过向查询添加GV$session来查询WHERE status = 'ACTIVE'仅查找ACTIVE会话。但这可能会排除中间层打开的大多数会话,因为大部分时间他们都不会执行SQL语句。