<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)航:
     
    主站蜘蛛池模板: 在线播放国产不卡免费视频| 亚洲色欲久久久综合网| 国产美女无遮挡免费视频网站| 免费看少妇作爱视频| 免费不卡中文字幕在线| 亚洲综合色视频在线观看| 久久精品国产亚洲香蕉| 亚洲成人动漫在线观看| 亚洲AV无码资源在线观看| 久久99精品免费一区二区| 99免费观看视频| 国外成人免费高清激情视频| 亚洲人成影院在线观看| 67pao强力打造67194在线午夜亚洲 | 亚洲成a人片77777kkkk| 亚洲成人在线免费观看| 无码天堂va亚洲va在线va| 在线看片免费人成视频久网下载| 亚洲成年人免费网站| 又黄又大又爽免费视频| 亚洲AV福利天堂一区二区三| 亚洲日本va一区二区三区| 久久国产精品免费一区| 永久免费AV无码国产网站| 亚洲精品久久久www| 亚洲精品美女在线观看| 西西人体大胆免费视频| 无码人妻一区二区三区免费n鬼沢 无码人妻一区二区三区免费看 | 日韩精品无码免费专区网站| 久久WWW免费人成人片| 亚洲中文字幕第一页在线| 激情内射亚洲一区二区三区爱妻| 成在线人直播免费视频| 美女视频黄免费亚洲| 国产乱辈通伦影片在线播放亚洲 | 亚洲无码一区二区三区| 久久性生大片免费观看性| 好男人www免费高清视频在线| 亚洲中文字幕无码久久2017| 亚洲精品无码mⅴ在线观看| 精品一卡2卡三卡4卡免费视频|