01: /*
02: * Created on 1 Sep 2007
03: */
04: package uk.org.ponder.rsac;
05:
06: import uk.org.ponder.beanutil.WriteableBeanLocator;
07:
08: /**
09: * The central class managing the Request Scope Application Context.
10: * <p>
11: * The principal method useful to users is <code>getBeanLocator()</code> which
12: * returns a BeanLocator holding the request context for the current thread. For
13: * each thread entering an RSAC request, it must call
14: * <code>startRequest()</code> before acquiring any request beans, and
15: * <code>endRequest()</code> at the end of its cycle (the latter is most
16: * important).
17: */
18:
19: public interface RSACBeanLocator {
20: /** The standard bean name for the RSACBeanLocator * */
21: public static String RSAC_BEAN_LOCATOR_NAME = "RSACBeanLocator";
22:
23: /**
24: * Starts the request-scope container for the current thread.
25: */
26:
27: public void startRequest();
28:
29: /**
30: * Determines whether the container has already been started for the current
31: * thread.
32: */
33:
34: public boolean isStarted();
35:
36: /**
37: * Called at the end of a request. I advise doing this in a finally block.
38: */
39: public void endRequest();
40:
41: /**
42: * Returns a list of bean names which are known to correspond to beans
43: * implementing or derived from the supplied class. RSAC has tried slightly
44: * harder to resolve bean classes than Spring generally does, through walking
45: * chains of factory-methods.
46: *
47: * @param clazz A class or interface class to be searched for.
48: * @return A list of derived bean names.
49: */
50: public String[] beanNamesForClass(Class clazz);
51:
52: /**
53: * Returns the class of this bean, if it can be statically determined,
54: * <code>null</code> if it cannot (i.e. this bean is the product of a
55: * factory-method of a class which is not yet known)
56: *
57: * @param beanname
58: * @return
59: */
60: public Class getBeanClass(String beanname);
61:
62: /**
63: * This method gets a BeanLocator which is good just for the current request
64: * scope. The ThreadLocal barrier has already been breached in the returned
65: * object, and evaluation will proceed quickly.
66: */
67: public WriteableBeanLocator getBeanLocator();
68:
69: /**
70: * Scope of this BeanLocator is the same as previous, but it will NOT
71: * auto-create beans that are not present.
72: */
73: public WriteableBeanLocator getDeadBeanLocator();
74:
75: }
|