<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)航:
     
    主站蜘蛛池模板: 久久亚洲精精品中文字幕| 伊人久久综在合线亚洲91| 成人亚洲综合天堂| 中文字幕精品无码亚洲字| 日本红怡院亚洲红怡院最新| 亚洲色图.com| 亚洲精品V天堂中文字幕| 一级美国片免费看| 99久久综合精品免费| 最近最新中文字幕完整版免费高清| 国产无遮挡裸体免费视频| 国产亚洲AV无码AV男人的天堂| 亚洲婷婷在线视频| 国产成人综合亚洲一区| 免费视频精品一区二区三区 | 日本免费网站在线观看| 亚洲一区二区视频在线观看| 久久精品国产亚洲av高清漫画| 亚洲色一区二区三区四区| www免费插插视频| 91精品国产免费久久久久久青草| 免费网站看v片在线香蕉| 亚洲精品无码MV在线观看| 亚洲一卡二卡三卡| 一级免费黄色大片| 国产一卡二卡四卡免费| 亚洲国产精品一区二区第一页免| 午夜亚洲AV日韩AV无码大全| 亚洲国产精品无码中文lv| 国精产品一区一区三区免费视频| 中文字幕无码免费久久99| 久久精品国产亚洲5555| 亚洲午夜电影在线观看| ssswww日本免费网站片| 手机在线看永久av片免费| 亚洲情综合五月天| 亚洲av无码专区国产不乱码| 久久国产免费观看精品3| 亚洲福利在线播放| 亚洲一级视频在线观看| 免费91麻豆精品国产自产在线观看 |