zoukankan      html  css  js  c++  java
  • 中间件服务断数据库会话关闭代码(java)

    *****************************************Java类******************************************

    package com.taiji.waf.filter;
    
    import java.net.InetAddress;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    
    import  javax.servlet.ServletContextAttributeEvent; 
    import  javax.servlet.ServletContextAttributeListener; 
    import  javax.servlet.ServletContextEvent; 
    import  javax.servlet.ServletContextListener; 
    
    import com.taiji.waf.WAFConfigure;
    
    
    /** 
     * ServletContext对象监听器.<br> 
     * 作用:监听ServletContext对象生命周期及ServletContext对象中属性变化情况 
     *  
     */ 
    public   class  ContextListener  implements  ServletContextListener, 
            ServletContextAttributeListener { 
    
         /** 
         * 当应用关闭时将执行此方法 
         */ 
         public   void  contextDestroyed(ServletContextEvent arg0) {
                 System.out.println( "【监听到】应用被关闭!" );
                 closeDataConn();
        } 
    
         /** 
         * 当应用启动时将执行此方法 
         */ 
         public   void  contextInitialized(ServletContextEvent arg0) { 
             System.out.println( "【监听到】应用被启动!" ); 
        } 
    
         /** 
         * 当ServletContext对象中新增属性时将执行此方法 
         */ 
         public   void  attributeAdded(ServletContextAttributeEvent arg0) { 
             System.out.println( "【监听到】ServletContext对象中新增一名为"  + arg0.getName() 
                    +  "的属性,其属性值为:"  + arg0.getValue()); 
        } 
    
         /** 
         * 当ServletContext对象中删除属性时将执行此方法 
         */ 
         public   void  attributeRemoved(ServletContextAttributeEvent arg0) { 
             System.out.println( "【监听到】ServletContext对象中一名为"  + arg0.getName() 
                    +  "的属性被删除!" ); 
        } 
    
         /** 
         * 当ServletContext对象中更新属性时将执行此方法 
         */ 
         public   void  attributeReplaced(ServletContextAttributeEvent arg0) { 
             System.out.println( "【监听到】ServletContext对象中一名为"  + arg0.getName() 
                    +  "的属性被更新!" ); 
        } 
         /**
          * 获得计算机名称
          * @return
          */
         public static String getHostName(){  
             String hostName="";
             try{  
                 InetAddress addr = InetAddress.getLocalHost();   
                 hostName=addr.getHostName().toString(); //获取本机计算机名称   
    
             }catch(Exception e){  
                 e.printStackTrace();  
             }  
             return hostName;
         }
         /**
          * 关闭所有数据库连接
          */
         private static void closeDataConn() {
            String name=getHostName();
            String sql=closeDataConn(name);
            String driverClass = WAFConfigure.getProperty("Broker_driver");
            String url = WAFConfigure.getProperty("Broker_url");
            String user= WAFConfigure.getProperty("Broker_username");
            String password = WAFConfigure.getProperty("Broker_password");
            Connection conn =null;
            try {
                Class.forName(driverClass);
                conn = DriverManager.getConnection(url,user,password);
                PreparedStatement pstmt = conn.prepareStatement(sql);
                pstmt.setString(1, name);
                pstmt.executeUpdate();
                pstmt.close();
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    
    
    
        /**
         * 拼写关闭所有当前用户建立的数据库联接SQL
         * @param ownuserId
         */
        public static String  closeDataConn(String ownuserId){
            String sql=" declare cursor cur_sess is select sid, serial# from v$session where status = 'INACTIVE'";
            sql+=" and type  != 'BACKGROUD' and (machine=? or machine='localhost');  w_sid number; w_serial number; begin open cur_sess; loop fetch cur_sess into w_sid,w_serial; if cur_sess%notfound then exit;  end if;";
            sql+=" execute immediate 'alter system kill session '''||w_sid||','||w_serial||''''; end loop; end;";
            return sql;
        }
    } 

    *****************************************相应的配置要求******************************************

    Web.xml应添加

     <listener>
             <listener-class>
                com.taiji.waf.filter.ContextListener
             </listener-class>
     </listener>

    类中的数据库连接是通过读取property文件内容得到的:

    Broker_driver=oracle.jdbc.driver.OracleDriver
    Broker_url=jdbc:oracle:thin:@172.25.13.102:1521:dxoa1
    Broker_username=dxmh
    Broker_password=dxmh


    改成和自己项目相应的数据库连接和用户的取法即可。

  • 相关阅读:
    [转]linux top 命令
    [转]Linux下实用的查看内存和多核CPU状态命令
    Totem ring protocal
    qemu qemusystemx86_64 qemukvm kvm 四个命令
    jsp>过滤器 小强斋
    jsp>Tomcat 6.0数据源配置记录 小强斋
    jsp>过滤器 小强斋
    jsp>监听器 小强斋
    jsp>Tomcat 6.0数据源配置记录 小强斋
    jsp>jsp执行过程 小强斋
  • 原文地址:https://www.cnblogs.com/is1988/p/2861658.html
Copyright © 2011-2022 走看看