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

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

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

    heting

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      40 隨筆 :: 9 文章 :: 45 評(píng)論 :: 0 Trackbacks
    void f();{    
    Cleaner cleaner
    =new Cleaner();;    
    try    
    {    
      Connection conn 
    = ;    
      cleaner.add(conn);;    
      Statement stmt 
    = conn.createStatement();;    
      cleaner.add(stmt );;    
      ResultSet rset 
    = ;    
      cleaner.add(rset );;    
       
    //using ResultSet   
      cleaner.clean();//close rset   
    }
        
    catch(Exception e);    
    {    
    throw new RuntimeException("",e);;    
    }
        
    finally    
    {    
    cleaner.cleanAll();;    
    }
        
    }
      

    import java.io.InputStream;   
    import java.lang.reflect.Method;   
    import java.net.Socket;   
    import java.sql.Connection;   
    import java.sql.PreparedStatement;   
    import java.sql.ResultSet;   
    import java.sql.Statement;   
    import java.util.HashMap;   
    import java.util.Iterator;   
    import java.util.Map;   
    import java.util.Stack;   
      
    /**  
     * 
    @author pufan  
     *   
     
    */
      
    public final class Cleaner   
    {   
        
    public static interface CleanListener   
        
    {   
            
    void catchClean(Object obj, Throwable t);;   
        }
       
        
    private final static CleanListener NONE_LISTENER = new CleanListener();   
        
    {   
            
    public void catchClean(Object obj, Throwable t);   
            
    {   
            }
       
        }
    ;   
        
    private final static Map map = new HashMap();   
        
    {   
            
    {   
                put(Connection.
    class"close");;   
                put(Statement.
    class"close");;   
                put(PreparedStatement.
    class"close");;   
                put(ResultSet.
    class"close");;   
                put(InputStream.
    class"close");;   
                put(Socket.
    class"close");;   
            }
       
        }
    ;   
        
    private final Stack garbageContainer = new Stack();;   
        
    public void add(Object garbage);   
        
    {   
           add(garbage, NONE_LISTENER);;   
        }
       
        
    public void add(Object garbage, CleanListener listener);   
        
    {   
            garbageContainer.add(
    new Garbage(garbage, listener););;   
        }
       
        
    public void clean();   
        
    {   
            
    if (garbageContainer.size(); > 0);   
                
    try  
                
    {   
                    doClean();;   
                }
       
                
    catch (Throwable e);   
                
    {   
                    throwThrowable(e);;   
                }
       
        }
       
        
    private void doClean(); throws Throwable   
        
    {   
            Garbage garbage 
    = (Garbage); garbageContainer.pop();;   
            garbage.clean();;   
        }
       
        
    public void cleanAll();   
        
    {   
            Throwable throwable 
    = null;   
            
    while (garbageContainer.size(); > 0);   
                
    try  
                
    {   
                    doClean();;   
                }
       
                
    catch (Throwable t);   
                
    {   
                    
    if (throwable == null);   
                        throwable 
    = t;   
                }
       
            throwThrowable(throwable);;   
        }
       
        
    private void throwThrowable(Throwable throwable);   
        
    {   
            
    if (throwable == null);   
                
    return;   
            
    if (throwable instanceof Error);   
                
    throw (Error); throwable;   
            
    else  
                
    throw new RuntimeException("error in closing garbage!", throwable);;   
        }
       
        
    private static Method getMethod(Object obj);   
        
    {   
            Class clazz 
    = obj.getClass();;   
            String methodName 
    = getMethodName(clazz);;   
            
    try  
            
    {   
                
    return clazz.getMethod(methodName, new Class[0]);;   
            }
       
            
    catch (Exception e);   
            
    {   
                
    throw new RuntimeException("can't find close method by " + obj, e);;   
            }
       
        }
       
        
    private static String getMethodName(Class clazz);   
        
    {   
            
    for (Iterator it = map.keySet();.iterator();; it.hasNext();; );   
            
    {   
                Class c 
    = (Class); it.next();;   
                
    if (c.isAssignableFrom(clazz););   
                    
    return (String); map.get(c);;   
            }
       
            
    return null;   
        }
       
        
    private static class Garbage   
        
    {   
            Object obj;   
            Method method;   
            CleanListener listener;   
            Garbage(Object obj, CleanListener listener);   
            
    {   
                method 
    = getMethod(obj);;   
                
    this.obj = obj;   
                
    this.listener = listener;   
            }
       
            
    void clean(); throws Throwable   
            
    {   
                
    try  
                
    {   
                    method.invoke(obj, 
    new Object[0]);;   
                }
       
                
    catch (Throwable t);   
                
    {   
                    listener.catchClean(obj, t);;   
                    
    throw t;   
                }
       
            }
       
        }
       
    }
      
    posted on 2009-01-10 10:01 賀挺 閱讀(177) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲人成在线精品| 7777久久亚洲中文字幕蜜桃| 亚洲国产精品一区二区三区在线观看 | 亚洲综合成人婷婷五月网址| 57pao国产成视频免费播放| 亚洲精品自在线拍| 五月亭亭免费高清在线| 亚洲中文无码a∨在线观看| 成年人免费的视频| 最新亚洲精品国偷自产在线| 全免费一级午夜毛片| 国产亚洲综合视频| 久久99亚洲综合精品首页 | 暖暖日本免费中文字幕| 亚洲欧洲国产精品你懂的| 久久永久免费人妻精品下载| 亚洲一区二区三区免费视频| 香蕉视频在线观看免费国产婷婷 | 四虎影视永久在线精品免费| 伊人久久大香线蕉亚洲五月天| a一级爱做片免费| 亚洲AV成人片色在线观看| 亚洲一区免费在线观看| 亚洲欧美日韩综合久久久久| 人人狠狠综合久久亚洲高清 | 97免费人妻无码视频| 亚洲精品成a人在线观看夫| www国产亚洲精品久久久| 大地资源网高清在线观看免费| 中文字幕亚洲免费无线观看日本 | 亚洲aⅴ天堂av天堂无码麻豆| 亚洲无码高清在线观看| 日本亚洲欧洲免费天堂午夜看片女人员 | 久久中文字幕免费视频| 亚洲深深色噜噜狠狠网站| 四虎永久在线精品免费影视| 免费精品一区二区三区第35| 亚洲一区AV无码少妇电影| 亚洲自偷自偷图片| 18禁超污无遮挡无码免费网站国产| 老司机午夜在线视频免费观|