<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è)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 久久久久亚洲精品无码网址色欲 | 黄在线观看www免费看| 亚洲综合图色40p| 久香草视频在线观看免费| 国产免费观看视频| 国产精品亚洲а∨天堂2021 | 成人电影在线免费观看| 亚洲成av人片在线观看无码不卡| 国产午夜无码片免费| 亚洲av无码乱码国产精品| 精品国产麻豆免费人成网站| 亚洲麻豆精品果冻传媒| 91频在线观看免费大全| 亚洲综合欧美色五月俺也去| 国产精品自在自线免费观看| 免费人成网站永久| 亚洲夜夜欢A∨一区二区三区| 免费观看成人久久网免费观看| 亚洲一本综合久久| 国产精品久久久久免费a∨ | 一级做性色a爰片久久毛片免费| 久久亚洲av无码精品浪潮| 久久免费精品一区二区| 亚洲最大的视频网站| 成人午夜大片免费7777| 黄色三级三级三级免费看| 亚洲va久久久噜噜噜久久狠狠 | 亚洲av无码专区在线观看亚| 亚洲?V无码成人精品区日韩| a级毛片免费在线观看| 亚洲日产2021三区在线| 又色又污又黄无遮挡的免费视 | 亚洲精品美女久久久久99| 51视频精品全部免费最新| 亚洲精品女同中文字幕| 亚洲中文字幕无码久久精品1 | 亚洲高清成人一区二区三区| 久久国产精品免费专区| 亚洲AV无码之国产精品| 亚洲αv久久久噜噜噜噜噜| 成人午夜视频免费|