1 package net.trajano.twiff.container;
2
3 import org.picocontainer.MutablePicoContainer;
4
5 /***
6 * <p>
7 * Implementors of this interface will be called when populating PicoContainers
8 * with components. Methods would generally look like:
9 * </p>
10 * <p>
11 * <code>container.registerComponentImplementation(SomeObject.class);</code>
12 * </p>
13 * <p>
14 * The use of this method was prefered over nanocontainer's approach of using
15 * external scripting languages for flexibility. Using this method allows for
16 * stricter compile time checks.
17 * </p>
18 * <p>
19 * NOTE: do not register the following classes or implementors into the
20 * containers as they are used by the system:
21 * </p>
22 * <ul>
23 * <li>{@link javax.servlet.ServletContext}</li>
24 * <li>{@link javax.servlet.http.HttpSession}</li>
25 * </ul>
26 *
27 * @author Archimedes Trajano
28 */
29 public interface ContainerBuilder {
30 /***
31 * This method registers components in the application level. Namely the
32 * {@link javax.servlet.ServletContext}. Please note that there one
33 * ServletContext created for every virtual machine so ensure that
34 * components for this container are not meant to be shared.
35 *
36 * @param container
37 * the container to populate.
38 */
39 void buildApplicationLevelContainer(MutablePicoContainer container);
40
41 /***
42 * This method registers components per request. Though creating the
43 * container may be quick, since PicoContainers are quite small, you should
44 * avoid putting too much things in here as well.
45 *
46 * @param container
47 * the container to populate.
48 */
49 void buildRequestLevelContainer(MutablePicoContainer container);
50
51 /***
52 * This method registers components in the session level. Namely the
53 * {@link javax.servlet.http.HttpSession}. This is created once per
54 * session, but it is replicated across all nodes in a cluster so do not
55 * make this too big.
56 *
57 * @param container
58 * the container to populate.
59 */
60 void buildSessionLevelContainer(MutablePicoContainer container);
61 }