/* * Copyright 2004-2015 the Seasar Foundation and the Others. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied. See the License for the specific language * governing permissions and limitations under the License. */ package org.seasar.framework.container.impl; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.net.URLClassLoader; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import junit.framework.TestCase; import org.seasar.framework.container.ComponentDef; import org.seasar.framework.container.ContainerConstants; import org.seasar.framework.container.Expression; import org.seasar.framework.container.ExternalContext; import org.seasar.framework.container.InitMethodDef; import org.seasar.framework.container.PropertyDef; import org.seasar.framework.container.S2Container; import org.seasar.framework.container.TooManyRegistrationRuntimeException; import org.seasar.framework.container.deployer.InstanceDefFactory; import org.seasar.framework.container.external.servlet.HttpServletExternalContext; import org.seasar.framework.container.external.servlet.HttpServletExternalContextComponentDefRegister; import org.seasar.framework.container.ognl.OgnlExpression; import org.seasar.framework.mock.servlet.MockHttpServletResponseImpl; import org.seasar.framework.mock.servlet.MockServletContextImpl; import org.seasar.framework.util.ResourceUtil; /** * @author higa * */ public class S2ContainerImplTest extends TestCase { S2Container container0; S2Container container1; S2Container container2; S2Container container3; S2Container container4; protected void setUp() throws Exception { super.setUp(); container0 = new S2ContainerImpl(); container0.setPath("0"); container1 = new S2ContainerImpl(); container1.setPath("1"); container1.register(HashMap.class); container0.include(container1); container2 = new S2ContainerImpl(); container2.setPath("2"); container2.register(HashMap.class); container2.register(HashMap.class); container1.include(container2); container3 = new S2ContainerImpl(); container3.setPath("3"); container3.register(HashMap.class); container3.register(HashMap.class); container3.register(HashMap.class); container2.include(container3); container4 = new S2ContainerImpl(); container4.setPath("4"); container4.register(HashMap.class); container4.register(HashMap.class); container4.register(HashMap.class); container4.register(HashMap.class); container3.include(container4); } /** * @throws Exception */ public void testRegister() throws Exception { S2Container container = new S2ContainerImpl(); container.register(A.class); container.register(B.class); container.register(B2.class); try { container.getComponent(A.class); fail("1"); } catch (TooManyRegistrationRuntimeException ex) { System.out.println(ex); assertEquals("2", Hoge.class, ex.getKey()); assertEquals("3", 2, ex.getComponentClasses().length); assertEquals("4", B.class, ex.getComponentClasses()[0]); assertEquals("5", B2.class, ex.getComponentClasses()[1]); } } /** * @throws Exception */ public void testRegisterForAlreadyRegistration() throws Exception { S2Container container = new S2ContainerImpl(); ComponentDef cd = new ComponentDefImpl(B.class, "B"); ComponentDef cd2 = new ComponentDefImpl(B2.class, "B"); container.register(cd); container.register(cd2); try { container.getComponent("B"); fail("1"); } catch (TooManyRegistrationRuntimeException ex) { System.out.println(ex); assertEquals("2", "B", ex.getKey()); assertEquals("3", 2, ex.getComponentClasses().length); assertEquals("4", B.class, ex.getComponentClasses()[0]); assertEquals("5", B2.class, ex.getComponentClasses()[1]); } } /** * @throws Exception */ public void testInclude() throws Exception { S2Container container = new S2ContainerImpl(); container.register(A.class); S2Container container2 = new S2ContainerImpl(); container2.register(B.class); container.include(container2); A a = (A) container.getComponent(A.class); assertEquals("1", "B", a.getHogeName()); assertEquals("2", 1, container2.getParentSize()); assertSame("3", container, container2.getParent(0)); } /** * @throws Exception */ public void testInclude2() throws Exception { S2Container root = new S2ContainerImpl(); S2Container child = new S2ContainerImpl(); child.setNamespace("aaa"); child.register("hoge", "hoge"); root.include(child); S2Container child2 = new S2ContainerImpl(); child2.setNamespace("bbb"); child2.register("hoge2", "hoge"); S2Container grandchild = new S2ContainerImpl(); grandchild.setNamespace("ccc"); grandchild.register("hoge3", "hoge"); child2.include(grandchild); root.include(child2); assertEquals("1", "hoge", child.getComponent("hoge")); assertEquals("2", "hoge3", grandchild.getComponent("hoge")); assertEquals("3", child, root.getComponent("aaa")); assertEquals("4", child2, root.getComponent("bbb")); assertEquals("5", "hoge", root.getComponent("aaa.hoge")); assertEquals("6", "hoge2", root.getComponent("bbb.hoge")); assertEquals("7", "hoge3", root.getComponent("ccc.hoge")); assertEquals("8", "hoge", child.getComponent("aaa.hoge")); assertEquals("9", false, child.hasComponentDef("bbb.hoge")); assertEquals("10", false, child.hasComponentDef("ccc.hoge")); assertEquals("11", "hoge2", child2.getComponent("hoge")); assertEquals("12", "hoge3", child2.getComponent("ccc.hoge")); assertEquals("13", 0, root.getComponentDefSize()); } /** * @throws Exception */ public void testInclude3() throws Exception { S2Container container = new S2ContainerImpl(); S2Container child = new S2ContainerImpl(); child.setPath("aaa.xml"); S2Container grandchild = new S2ContainerImpl(); grandchild.setPath("bbb.xml"); grandchild.setNamespace("bbb"); child.include(grandchild); container.include(child); container.include(grandchild); assertNotNull("1", container.getComponentDef("bbb")); } /** * @throws Exception */ public void testInclude4() throws Exception { S2Container aaa = new S2ContainerImpl(); aaa.setPath("aaa.xml"); aaa.setNamespace("aaa"); S2Container bbb = new S2ContainerImpl(); bbb.setPath("bbb.xml"); S2Container aaa2 = new S2ContainerImpl(); aaa2.setPath("aaa.xml"); aaa2.setNamespace("aaa"); bbb.include(aaa2); aaa.include(bbb); assertNotNull("1", aaa.getComponentDef("aaa")); } /** * @throws Exception */ public void testInclude5() throws Exception { S2Container container = new S2ContainerImpl(); S2Container child = new S2ContainerImpl(); child.setNamespace("aaa"); S2Container child2 = new S2ContainerImpl(); child2.setNamespace("aaa"); container.include(child); container.include(child2); assertSame("1", child, container.getComponent("aaa")); } /** * @throws Exception */ public void testInclude6() throws Exception { S2Container root = new S2ContainerImpl(); S2Container aaa = new S2ContainerImpl(); aaa.setPath("aaa.xml"); aaa.setNamespace("aaa"); S2Container bbb = new S2ContainerImpl(); bbb.setPath("bbb.xml"); bbb.setNamespace("bbb"); bbb.register(new Date(), "date"); aaa.include(bbb); root.include(aaa); assertNotNull("1", root.getComponentDef("bbb.date")); } /** * @throws Exception */ public void testInclude7() throws Exception { S2Container root = new S2ContainerImpl(); S2Container aaa = new S2ContainerImpl(); aaa.setNamespace("aaa"); S2Container bbb = new S2ContainerImpl(); bbb.setNamespace("bbb"); bbb.register(new Date(0), "date"); S2Container ccc = new S2ContainerImpl(); ccc.setNamespace("ccc"); ccc.register(new Date(1), "date"); bbb.include(ccc); aaa.include(bbb); root.include(aaa); assertEquals("1", new Date(1), root.getComponent("aaa.bbb.ccc.date")); assertEquals("2", new Date(0), root.getComponent("aaa.bbb.date")); assertEquals("3", new Date(0), root.getComponent("bbb.date")); assertEquals("4", new Date(1), root.getComponent("bbb.ccc.date")); assertEquals("5", new Date(1), root.getComponent("ccc.date")); assertEquals("6", new Date(0), root.getComponent("date")); assertEquals("7", "bbb", ((S2Container) root.getComponent("aaa.bbb")) .getNamespace()); assertEquals("8", "bbb", ((S2Container) root.getComponent("bbb")) .getNamespace()); assertEquals("9", "ccc", ((S2Container) root.getComponent("bbb.ccc")) .getNamespace()); assertEquals("10", "ccc", ((S2Container) root.getComponent("ccc")) .getNamespace()); } /** * @throws Exception */ public void testRegisterAfterInclude() throws Exception { S2Container container = new S2ContainerImpl(); S2Container container2 = new S2ContainerImpl(); S2Container container3 = new S2ContainerImpl(); container2.include(container3); container.include(container2); Date date = new Date(0); container3.register(date, "hoge"); assertEquals("1", date, container.getComponent("hoge")); assertEquals("2", date, container.getComponent(Date.class)); } /** * @throws Exception */ public void testInitAndDestroy() throws Exception { S2Container container = new S2ContainerImpl(); S2Container child = new S2ContainerImpl(); List initList = new ArrayList(); List destroyList = new ArrayList(); ComponentDef componentDef = new ComponentDefImpl(C.class, "c1"); componentDef.addInitMethodDef(new InitMethodDefImpl("init")); componentDef.addDestroyMethodDef(new DestroyMethodDefImpl("destroy")); componentDef.addArgDef(new ArgDefImpl("c1")); componentDef.addArgDef(new ArgDefImpl(initList)); componentDef.addArgDef(new ArgDefImpl(destroyList)); container.register(componentDef); componentDef = new ComponentDefImpl(C.class, "c2"); componentDef.addInitMethodDef(new InitMethodDefImpl("init")); componentDef.addDestroyMethodDef(new DestroyMethodDefImpl("destroy")); componentDef.addArgDef(new ArgDefImpl("c2")); componentDef.addArgDef(new ArgDefImpl(initList)); componentDef.addArgDef(new ArgDefImpl(destroyList)); container.register(componentDef); componentDef = new ComponentDefImpl(C.class, "c3"); componentDef.addInitMethodDef(new InitMethodDefImpl("init")); componentDef.addDestroyMethodDef(new DestroyMethodDefImpl("destroy")); componentDef.addArgDef(new ArgDefImpl("c3")); componentDef.addArgDef(new ArgDefImpl(initList)); componentDef.addArgDef(new ArgDefImpl(destroyList)); child.register(componentDef); container.include(child); container.init(); assertEquals("1", 3, initList.size()); assertEquals("2", "c3", initList.get(0)); assertEquals("3", "c1", initList.get(1)); assertEquals("4", "c2", initList.get(2)); container.destroy(); assertEquals("5", 3, destroyList.size()); assertEquals("6", "c2", destroyList.get(0)); assertEquals("7", "c1", destroyList.get(1)); assertEquals("8", "c3", destroyList.get(2)); } /** * @throws Exception */ public void testContextClassLoaderWhenInit() throws Exception { final ClassLoader[] loader = new ClassLoader[1]; S2Container container = new S2ContainerImpl(); ComponentDef cd = new ComponentDefImpl(Runnable.class); cd.setExpression(new Expression() { public Object evaluate(S2Container container, Map context) { return new Runnable() { public void run() { loader[0] = Thread.currentThread() .getContextClassLoader(); } }; } }); cd.addInitMethodDef(new InitMethodDefImpl("run")); container.register(cd); ClassLoader loader1 = Thread.currentThread().getContextClassLoader(); ClassLoader loader2 = new URLClassLoader(new URL[0]); Thread.currentThread().setContextClassLoader(loader2); try { container.init(); assertEquals("1", loader1, loader[0]); assertEquals("2", loader2, Thread.currentThread() .getContextClassLoader()); } finally { Thread.currentThread().setContextClassLoader(loader1); } } /** * @throws Exception */ public void testContextClassLoaderWhenDestroy() throws Exception { final ClassLoader[] loader = new ClassLoader[1]; S2Container container = new S2ContainerImpl(); ComponentDef cd = new ComponentDefImpl(Runnable.class); cd.setExpression(new Expression() { public Object evaluate(S2Container container, Map context) { return new Runnable() { public void run() { loader[0] = Thread.currentThread() .getContextClassLoader(); } }; } }); cd.addDestroyMethodDef(new DestroyMethodDefImpl("run")); container.register(cd); container.init(); ClassLoader loader1 = Thread.currentThread().getContextClassLoader(); ClassLoader loader2 = new URLClassLoader(new URL[0]); Thread.currentThread().setContextClassLoader(loader2); try { container.destroy(); assertEquals("1", loader1, loader[0]); assertEquals("2", loader2, Thread.currentThread() .getContextClassLoader()); } finally { Thread.currentThread().setContextClassLoader(loader1); } } /** * @throws Exception */ public void testInjectDependency() throws Exception { S2Container container = new S2ContainerImpl(); ComponentDef componentDef = new ComponentDefImpl(HashMap.class, "hoge"); componentDef.setInstanceDef(InstanceDefFactory.OUTER); InitMethodDef md = new InitMethodDefImpl("put"); md.addArgDef(new ArgDefImpl("aaa")); md.addArgDef(new ArgDefImpl("111")); componentDef.addInitMethodDef(md); container.register(componentDef); HashMap map = new HashMap(); container.injectDependency(map); assertEquals("1", "111", map.get("aaa")); HashMap map2 = new HashMap(); container.injectDependency(map2, Map.class); assertEquals("2", "111", map2.get("aaa")); HashMap map3 = new HashMap(); container.injectDependency(map3, "hoge"); assertEquals("3", "111", map3.get("aaa")); } /** * @throws Exception */ public void testSelf() throws Exception { S2Container container = new S2ContainerImpl(); container.register(D.class); D d = (D) container.getComponent(D.class); assertSame("1", container, d.getContainer()); } /** * @throws Exception */ public void testSelf2() throws Exception { S2Container container = new S2ContainerImpl(); ComponentDef cd = new ComponentDefImpl(D.class); PropertyDef pd = new PropertyDefImpl("container"); pd.setExpression(new OgnlExpression(ContainerConstants.CONTAINER_NAME)); cd.addPropertyDef(pd); container.register(cd); D d = (D) container.getComponent(D.class); assertSame("1", container, d.getContainer()); } /** * @throws Exception */ public void testConstructor() throws Exception { S2Container container = new S2ContainerImpl(); assertEquals("1", 0, container.getComponentDefSize()); } /** * @throws Exception */ public void testNamespace() throws Exception { S2Container container = new S2ContainerImpl(); container.setNamespace("aaa"); container.register(String.class, "bbb"); assertNotNull("1", container.getComponent("bbb")); assertNotNull("2", container.getComponent("aaa.bbb")); } /** * @throws Exception */ public void testGetComponentDef() throws Exception { S2Container aaa = new S2ContainerImpl(); aaa.setNamespace("aaa"); S2Container bbb = new S2ContainerImpl(); bbb.setNamespace("bbb"); bbb.register(String.class, "hoge"); aaa.include(bbb); assertNotNull("1", aaa.getComponentDef("bbb.hoge")); assertNotNull("2", bbb.getComponentDef("bbb.hoge")); } /** * @throws Exception */ public void testGetComponentDef2() throws Exception { S2Container container = new S2ContainerImpl(); container.register(FooImpl.class); Hoge hoge = (Hoge) container.getComponent(Hoge.class); assertEquals("1", "Foo", hoge.getName()); } /** * @throws Exception */ public void testFindComponents() throws Exception { Map[] found = (Map[]) container0.findComponents(Map.class); assertEquals(1, found.length); found = (Map[]) container1.findComponents(Map.class); assertEquals(1, found.length); found = (Map[]) container2.findComponents(Map.class); assertEquals(2, found.length); found = (Map[]) container3.findComponents(Map.class); assertEquals(3, found.length); found = (Map[]) container4.findComponents(Map.class); assertEquals(4, found.length); } /** * @throws Exception */ public void testFindAllComponents() throws Exception { Map[] found = (Map[]) container0.findAllComponents(Map.class); assertEquals(10, found.length); found = (Map[]) container1.findAllComponents(Map.class); assertEquals(10, found.length); found = (Map[]) container2.findAllComponents(Map.class); assertEquals(9, found.length); found = (Map[]) container3.findAllComponents(Map.class); assertEquals(7, found.length); found = (Map[]) container4.findAllComponents(Map.class); assertEquals(4, found.length); } /** * @throws Exception */ public void testFindAllComponentsPerformance() throws Exception { S2Container container = new S2ContainerImpl(); for (int i = 0; i < 100; ++i) { S2Container child = new S2ContainerImpl(); for (int j = 0; j < 100; ++j) { child.register(new HashMap()); } container.include(child); } long t1 = System.currentTimeMillis(); Map[] found = (Map[]) container.findAllComponents(Map.class); long t2 = System.currentTimeMillis(); System.out.println((t2 - t1) + "ms"); assertEquals(10000, found.length); } /** * @throws Exception */ public void testFindLocalComponents() throws Exception { Map[] found = (Map[]) container0.findLocalComponents(Map.class); assertEquals(0, found.length); found = (Map[]) container1.findLocalComponents(Map.class); assertEquals(1, found.length); found = (Map[]) container2.findLocalComponents(Map.class); assertEquals(2, found.length); found = (Map[]) container3.findLocalComponents(Map.class); assertEquals(3, found.length); found = (Map[]) container4.findLocalComponents(Map.class); assertEquals(4, found.length); } /** * @throws Exception */ public void testFindComponentDefs() throws Exception { ComponentDef[] found = container0.findComponentDefs(Map.class); assertEquals(1, found.length); found = container1.findComponentDefs(Map.class); assertEquals(1, found.length); found = container2.findComponentDefs(Map.class); assertEquals(2, found.length); found = container3.findComponentDefs(Map.class); assertEquals(3, found.length); found = container4.findComponentDefs(Map.class); assertEquals(4, found.length); } /** * @throws Exception */ public void testFindAllComponentDefs() throws Exception { ComponentDef[] found = container0.findAllComponentDefs(Map.class); assertEquals(10, found.length); found = container1.findAllComponentDefs(Map.class); assertEquals(10, found.length); found = container2.findAllComponentDefs(Map.class); assertEquals(9, found.length); found = container3.findAllComponentDefs(Map.class); assertEquals(7, found.length); found = container4.findAllComponentDefs(Map.class); assertEquals(4, found.length); } /** * @throws Exception */ public void testFindLocalComponentDefs() throws Exception { ComponentDef[] found = container0.findLocalComponentDefs(Map.class); assertEquals(0, found.length); found = container1.findLocalComponentDefs(Map.class); assertEquals(1, found.length); found = container2.findLocalComponentDefs(Map.class); assertEquals(2, found.length); found = container3.findLocalComponentDefs(Map.class); assertEquals(3, found.length); found = container4.findLocalComponentDefs(Map.class); assertEquals(4, found.length); } /** * @throws Exception */ public void testRequest() throws Exception { S2Container container = new S2ContainerImpl(); S2Container child = new S2ContainerImpl(); child.setNamespace("aaa"); child.register(RequestClient.class); container.include(child); MockServletContextImpl ctx = new MockServletContextImpl( "/s2jsf-example"); HttpServletRequest request = ctx.createRequest("/hello.html"); ExternalContext extCtx = new HttpServletExternalContext(); extCtx.setRequest(request); container.setExternalContext(extCtx); container .setExternalContextComponentDefRegister(new HttpServletExternalContextComponentDefRegister()); container.init(); RequestClient client = (RequestClient) container .getComponent(RequestClient.class); assertNotNull("1", client.getRequest()); } /** * @throws Exception */ public void testSession() throws Exception { S2Container container = new S2ContainerImpl(); S2Container child = new S2ContainerImpl(); child.setNamespace("aaa"); child.register(SessionClient.class); container.include(child); MockServletContextImpl ctx = new MockServletContextImpl( "/s2jsf-example"); HttpServletRequest request = ctx.createRequest("/hello.html"); ExternalContext extCtx = new HttpServletExternalContext(); extCtx.setRequest(request); container.setExternalContext(extCtx); container .setExternalContextComponentDefRegister(new HttpServletExternalContextComponentDefRegister()); container.init(); SessionClient client = (SessionClient) container .getComponent(SessionClient.class); assertNotNull("1", client.getSession()); } /** * @throws Exception */ public void testResponse() throws Exception { S2Container container = new S2ContainerImpl(); S2Container child = new S2ContainerImpl(); child.setNamespace("aaa"); child.register(ResponseClient.class); container.include(child); MockServletContextImpl ctx = new MockServletContextImpl( "/s2jsf-example"); HttpServletRequest request = ctx.createRequest("/hello.html"); HttpServletResponse response = new MockHttpServletResponseImpl(request); ExternalContext extCtx = new HttpServletExternalContext(); extCtx.setResponse(response); container.setExternalContext(extCtx); container .setExternalContextComponentDefRegister(new HttpServletExternalContextComponentDefRegister()); container.init(); ResponseClient client = (ResponseClient) container .getComponent(ResponseClient.class); assertNotNull("1", client.getResponse()); } /** * @throws Exception */ public void testServletContext() throws Exception { S2Container container = new S2ContainerImpl(); S2Container child = new S2ContainerImpl(); child.setNamespace("aaa"); child.register(ServletContextClient.class); container.include(child); MockServletContextImpl ctx = new MockServletContextImpl( "/s2jsf-example"); ExternalContext extCtx = new HttpServletExternalContext(); extCtx.setApplication(ctx); container.setExternalContext(extCtx); container .setExternalContextComponentDefRegister(new HttpServletExternalContextComponentDefRegister()); container.init(); ServletContextClient client = (ServletContextClient) container .getComponent(ServletContextClient.class); assertNotNull("1", client.getServletContext()); } /** * @throws Exception */ public void testOgnlClassResolvingWhileClassLoaderSpecified() throws Exception { S2Container container = new S2ContainerImpl() { public ClassLoader getClassLoader() { return null; } }; ComponentDef componentDef = new ComponentDefImpl(); componentDef.setComponentName("component"); componentDef.setExpression(new OgnlExpression( "@org.seasar.framework.container.impl.S2ContainerImpl@class")); container.register(componentDef); Object obj = container.getComponent("component"); assertNotNull("1", obj); assertEquals("2", S2ContainerImpl.class, obj); File componentClassFile = ResourceUtil .getResourceAsFile("org/seasar/framework/container/impl/classes/test/Component"); File parentDir = componentClassFile.getParentFile(); byte[] buf = new byte[4096]; InputStream is = null; OutputStream os = null; File componentClassOutFile = null; try { try { is = new FileInputStream(componentClassFile); componentClassOutFile = new File(parentDir, "Component.class"); os = new FileOutputStream(componentClassOutFile); int len; while ((len = is.read(buf)) != -1) { os.write(buf, 0, len); } } finally { if (os != null) { try { os.close(); } catch (Throwable t) { ; } } if (is != null) { try { is.close(); } catch (Throwable t) { ; } } } File classesDir = parentDir.getParentFile(); ClassLoader customCl = new URLClassLoader(new URL[] { classesDir .toURI().toURL() }); ClassLoader cl = Thread.currentThread().getContextClassLoader(); try { Thread.currentThread().setContextClassLoader(customCl); container = new S2ContainerImpl(); componentDef = new ComponentDefImpl(); componentDef.setComponentName("component"); componentDef.setExpression(new OgnlExpression( "@test.Component@class")); container.register(componentDef); obj = container.getComponent("component"); assertNotNull("3", obj); assertSame("4", customCl, ((Class) obj).getClassLoader()); } finally { Thread.currentThread().setContextClassLoader(cl); } } finally { if (componentClassOutFile != null && componentClassOutFile.exists()) { componentClassOutFile.delete(); } } } /** * */ public static class A { private Hoge hoge_; /** * @param hoge */ public A(Hoge hoge) { hoge_ = hoge; } /** * @return */ public String getHogeName() { return hoge_.getName(); } } /** * */ public interface Hoge { /** * @return */ public String getName(); } /** * */ public interface Foo extends Hoge { } /** * */ public static class B implements Hoge { public String getName() { return "B"; } } /** * */ public static class B2 implements Hoge { public String getName() { return "B2"; } } /** * */ public static class C { private String name_; private List initList_; private List destroyList_; /** * @param name * @param initList * @param destoryList */ public C(String name, List initList, List destoryList) { name_ = name; initList_ = initList; destroyList_ = destoryList; } /** * */ public void init() { initList_.add(name_); } /** * */ public void destroy() { destroyList_.add(name_); } } /** * */ public static class D { private S2Container container_; /** * @return */ public S2Container getContainer() { return container_; } /** * @param container */ public void setContainer(S2Container container) { container_ = container; } } /** * */ public static class FooImpl implements Foo { public String getName() { return "Foo"; } } /** * */ public static class RequestClient { private HttpServletRequest request_; /** * @return */ public HttpServletRequest getRequest() { return request_; } /** * @param request */ public void setRequest(HttpServletRequest request) { this.request_ = request; } } /** * */ public static class SessionClient { private HttpSession session_; /** * @return */ public HttpSession getSession() { return session_; } /** * @param session */ public void setSession(HttpSession session) { this.session_ = session; } } /** * */ public static class ResponseClient { private HttpServletResponse response_; /** * @return */ public HttpServletResponse getResponse() { return response_; } /** * @param response */ public void setResponse(HttpServletResponse response) { this.response_ = response; } } /** * */ public static class ServletContextClient { private ServletContext servletContext_; /** * @return */ public ServletContext getServletContext() { return servletContext_; } /** * @param servletContext */ public void setServletContext(ServletContext servletContext) { servletContext_ = servletContext; } } }