KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > jfun > yan > GuardedComponent


1 /*****************************************************************************
2  * Copyright (C) Codehaus.org. All rights reserved. *
3  * ------------------------------------------------------------------------- *
4  * The software in this package is published under the terms of the BSD *
5  * style license a copy of which has been included with this distribution in *
6  * the LICENSE.txt file. *
7  *****************************************************************************/

8 package jfun.yan;
9 /*
10  * Created on Mar 5, 2005
11  *
12  * Author Ben Yu
13  * ZBS
14  */

15
16 /**
17  * Codehaus.org.
18  *
19  * @author Ben Yu
20  *
21  */

22 class GuardedComponent<T> extends DelegatingComponent {
23   private transient ThreadLocal JavaDoc run_guard = new ThreadLocal JavaDoc();
24   private transient ThreadLocal JavaDoc verify_guard = new ThreadLocal JavaDoc();
25   private transient ThreadLocal JavaDoc get_type_guard = new ThreadLocal JavaDoc();
26   private void readObject(java.io.ObjectInputStream JavaDoc in)
27   throws ClassNotFoundException JavaDoc, java.io.IOException JavaDoc{
28     in.defaultReadObject();
29     run_guard = new ThreadLocal JavaDoc();
30     verify_guard = new ThreadLocal JavaDoc();
31     get_type_guard = new ThreadLocal JavaDoc();
32   }
33   private void enter(ThreadLocal JavaDoc g){
34     final Object JavaDoc frame = g.get();
35     if(frame==null){
36       g.set(this);
37     }
38     else{
39       throw new CyclicDependencyException();
40     }
41   }
42   private void leave(ThreadLocal JavaDoc g){
43     g.set(null);
44   }
45
46   GuardedComponent(final Component<T> cc) {
47     super(cc);
48   }
49   
50   public Object JavaDoc create(Dependency ac){
51     enter(run_guard);
52     try{
53       return super.create(ac);
54     }
55     finally{leave(run_guard);}
56   }
57   public Class JavaDoc verify(Dependency ac){
58     enter(verify_guard);
59     try{
60       return super.verify(ac);
61     }
62     finally{leave(verify_guard);}
63   }
64   public Class JavaDoc getType(){
65     enter(get_type_guard);
66     try{
67       return super.getType();
68     }
69     finally{leave(get_type_guard);}
70
71   }
72   public Component guard(){return this;}
73   public boolean isSingleton(){
74     return getDelegateTarget().isSingleton();
75   }
76 }
77
Popular Tags