container.registerComponentImplementation(Unproxyable3.class);
container.registerComponentImplementation(Unproxyable4.class);
container.registerComponentImplementation(Unproxyable5.class);
container.registerComponentImplementation(Proxyable.class);
container.registerComponentImplementation(Proxyable2.class);
ContextManager manager = container.getComponentInstanceOfType(ContextManager.class);
assertNotNull(manager);
testScope(container, manager, true);
testScope(container, manager, false);
try
{
container.getComponentInstanceOfType(Unproxyable1.class);
fail("An exception is expected as the class is unproxyable");
}
catch (Exception e)
{
// ok
}
try
{
container.getComponentInstanceOfType(Unproxyable2.class);
fail("An exception is expected as the class is unproxyable");
}
catch (Exception e)
{
// ok
}
try
{
container.getComponentInstanceOfType(Unproxyable3.class);
fail("An exception is expected as the class is unproxyable");
}
catch (Exception e)
{
// ok
}
try
{
container.getComponentInstanceOfType(Unproxyable4.class);
fail("An exception is expected as the class is unproxyable");
}
catch (Exception e)
{
// ok
}
try
{
container.getComponentInstanceOfType(Unproxyable5.class);
fail("An exception is expected as the class is unproxyable");
}
catch (Exception e)
{
// ok
}
assertNotNull(container.getComponentInstanceOfType(Proxyable.class));
assertNotNull(container.getComponentInstanceOfType(Proxyable2.class));
try
{
container.getComponentInstanceOfType(S1.class).getId();
fail("An exception is expected as the scope is not active");
}
catch (Exception e)
{
// ok
}
S4 s4 = container.getComponentInstanceOfType(S4.class);
assertSame(s4, container.getComponentInstanceOfType(S4.class));
assertSame(Singleton.class, ((MX4JComponentAdapter<S4>)container.getComponentAdapterOfType(S4.class)).getScope());
S5 s5 = container.getComponentInstanceOfType(S5.class);
assertSame(s5, container.getComponentInstanceOfType(S5.class));
assertSame(Singleton.class, ((MX4JComponentAdapter<S5>)container.getComponentAdapterOfType(S5.class)).getScope());
S6 s6 = container.getComponentInstanceOfType(S6.class);
assertNotSame(s6, container.getComponentInstanceOfType(S6.class));
assertSame(Dependent.class, ((MX4JComponentAdapter<S6>)container.getComponentAdapterOfType(S6.class)).getScope());
S7 s7 = container.getComponentInstanceOfType(S7.class);
assertNotSame(s7, container.getComponentInstanceOfType(S7.class));
assertSame(Dependent.class, ((MX4JComponentAdapter<S7>)container.getComponentAdapterOfType(S7.class)).getScope());
S8 s8 = container.getComponentInstanceOfType(S8.class);
assertSame(s8, container.getComponentInstanceOfType(S8.class));
assertSame(ApplicationScoped.class,
((MX4JComponentAdapter<S8>)container.getComponentAdapterOfType(S8.class)).getScope());
try
{
s4.s1.getId();
fail("An exception is expected as the scope is not active");
}
catch (Exception e)
{
// ok
}
try
{
s5.s1.getId();
fail("An exception is expected as the scope is not active");
}
catch (Exception e)
{
// ok
}
try
{
s6.s1.getId();
fail("An exception is expected as the scope is not active");
}
catch (Exception e)
{
// ok
}
try
{
s7.s1.getId();
fail("An exception is expected as the scope is not active");
}
catch (Exception e)
{
// ok
}
try
{
s8.s1.getId();
fail("An exception is expected as the scope is not active");
}
catch (Exception e)
{
// ok
}
// Request 1
Map<Object, Object> mapReq1 = new HashMap<Object, Object>();
ServletRequest req1 = createProxy(ServletRequest.class, mapReq1);
manager.<ServletRequest> getContext(RequestScoped.class).activate(req1);
S1 s1 = container.getComponentInstanceOfType(S1.class);
int s1Id = s1.getId();
assertEquals(2, mapReq1.size());
assertNotNull(s1);
assertSame(s1, container.getComponentInstanceOfType(S1.class));
assertEquals(s1Id, container.getComponentInstanceOfType(S1.class).getId());
assertEquals(s1Id, s1.getId());
assertEquals(s1Id, s1.getId2());
assertEquals(s1Id, s1.getId3());
assertSame(s1, s4.s1);
assertEquals(s1Id, s4.s1.getId());
assertEquals(s1Id, s4.s1.getId2());
assertEquals(s1Id, s4.s1.getId3());
assertSame(s1, s5.s1);
assertEquals(s1Id, s5.s1.getId());
assertEquals(s1Id, s5.s1.getId2());
assertEquals(s1Id, s5.s1.getId3());
assertSame(s1, s6.s1);
assertEquals(s1Id, s6.s1.getId());
assertEquals(s1Id, s6.s1.getId2());
assertEquals(s1Id, s6.s1.getId3());
assertSame(s1, s7.s1);
assertEquals(s1Id, s7.s1.getId());
assertEquals(s1Id, s7.s1.getId2());
assertEquals(s1Id, s7.s1.getId3());
assertSame(s1, s8.s1);
assertEquals(s1Id, s8.s1.getId());
assertEquals(s1Id, s8.s1.getId2());
assertEquals(s1Id, s8.s1.getId3());
assertNotNull(s1.getDep1());
assertNotNull(s1.getDep2());
assertNotNull(s1.getDep3());
assertNotNull(s1.getDep4());
assertNotNull(s1.getDep5());
assertSame(s1.getDep1(), container.getComponentInstanceOfType(S1_DEP1.class));
int dep1Id;
assertEquals(dep1Id = s1.getDep1().getId(), container.getComponentInstanceOfType(S1_DEP1.class).getId());
assertEquals(s1.getDep1().getId(), s1.getDep1Id());
assertSame(s1.getDep2(), container.getComponentInstanceOfType(S1_DEP2.class));
try
{
s1.getDep2().getId();
fail("An exception is expected as the scope is not active");
}
catch (Exception e)
{
// ok
}
assertSame(s1.getDep3(), container.getComponentInstanceOfType(S1_DEP3.class));
assertEquals(s1.getDep3().getId(), container.getComponentInstanceOfType(S1_DEP3.class).getId());
assertSame(s1.getDep4(), container.getComponentInstanceOfType(S1_DEP4.class));
assertEquals(s1.getDep4().getId(), container.getComponentInstanceOfType(S1_DEP4.class).getId());
assertNotSame(s1.getDep5(), container.getComponentInstanceOfType(S1_DEP5.class));
assertSame(s1.getDep6(), container.getComponentInstanceOfType(S1_DEP6.class));
assertEquals(s1.getDep6().getId(), container.getComponentInstanceOfType(S1_DEP6.class).getId());
assertSame(s1, s1.getDep6().getS1());
assertEquals(s1.getId(), s1.getDep6().getS1().getId());
assertSame(s1, container.getComponentInstanceOfType(S1_DEP6.class).getS1());
assertEquals(s1.getId(), container.getComponentInstanceOfType(S1_DEP6.class).getS1().getId());
manager.<ServletRequest> getContext(RequestScoped.class).deactivate(req1);
assertTrue(mapReq1.isEmpty());
s4 = container.getComponentInstanceOfType(S4.class);
assertSame(s1, s4.s1);
s5 = container.getComponentInstanceOfType(S5.class);
assertSame(s1, s5.s1);
s6 = container.getComponentInstanceOfType(S6.class);
assertSame(s1, s6.s1);
s7 = container.getComponentInstanceOfType(S7.class);
assertSame(s1, s7.s1);
s8 = container.getComponentInstanceOfType(S8.class);
assertSame(s1, s8.s1);
try
{
container.getComponentInstanceOfType(S1.class).getId();
fail("An exception is expected as the scope is not active");
}
catch (Exception e)
{
// ok
}
try
{
s4.s1.getId();
fail("An exception is expected as the scope is not active");
}
catch (Exception e)
{
// ok
}
try
{
s5.s1.getId();
fail("An exception is expected as the scope is not active");
}
catch (Exception e)
{
// ok
}
try
{
s6.s1.getId();
fail("An exception is expected as the scope is not active");
}
catch (Exception e)
{
// ok
}
try
{
s7.s1.getId();
fail("An exception is expected as the scope is not active");
}
catch (Exception e)
{
// ok
}
try
{
s8.s1.getId();
fail("An exception is expected as the scope is not active");
}
catch (Exception e)
{
// ok
}
// Request 2
ServletRequest req2 = createProxy(ServletRequest.class, new HashMap<Object, Object>());
manager.<ServletRequest> getContext(RequestScoped.class).activate(req2);
S1 s1_2 = container.getComponentInstanceOfType(S1.class);
assertNotNull(s1_2);
assertSame(s1_2, container.getComponentInstanceOfType(S1.class));
assertEquals(s1_2.getId(), container.getComponentInstanceOfType(S1.class).getId());
assertFalse(s1_2.getId() == s1Id);
assertSame(s1_2, s4.s1);
assertEquals(s1_2.getId(), s4.s1.getId());
assertEquals(s1_2.getId(), s4.s1.getId2());
assertEquals(s1_2.getId(), s4.s1.getId3());
assertSame(s1_2, s5.s1);
assertEquals(s1_2.getId(), s5.s1.getId());
assertEquals(s1_2.getId(), s5.s1.getId2());
assertEquals(s1_2.getId(), s5.s1.getId3());
assertSame(s1_2, s6.s1);
assertEquals(s1_2.getId(), s6.s1.getId());
assertEquals(s1_2.getId(), s6.s1.getId2());
assertEquals(s1_2.getId(), s6.s1.getId3());
assertSame(s1_2, s7.s1);
assertEquals(s1_2.getId(), s7.s1.getId());
assertEquals(s1_2.getId(), s7.s1.getId2());
assertEquals(s1_2.getId(), s7.s1.getId3());
assertSame(s1_2, s8.s1);
assertEquals(s1_2.getId(), s8.s1.getId());
assertEquals(s1_2.getId(), s8.s1.getId2());
assertEquals(s1_2.getId(), s8.s1.getId3());
assertNotNull(s1_2.getDep1());
assertNotNull(s1_2.getDep2());
assertNotNull(s1_2.getDep3());
assertNotNull(s1_2.getDep4());
assertNotNull(s1_2.getDep5());
assertSame(s1_2.getDep1(), container.getComponentInstanceOfType(S1_DEP1.class));
assertEquals(s1_2.getDep1().getId(), container.getComponentInstanceOfType(S1_DEP1.class).getId());
assertEquals(s1_2.getDep1().getId(), s1_2.getDep1Id());
assertTrue(s1_2.getDep1().getId() != dep1Id);
assertSame(s1_2.getDep2(), container.getComponentInstanceOfType(S1_DEP2.class));
try
{
s1_2.getDep2().getId();
fail("An exception is expected as the scope is not active");
}
catch (Exception e)
{
// ok
}
assertSame(s1_2.getDep3(), container.getComponentInstanceOfType(S1_DEP3.class));
assertEquals(s1_2.getDep3().getId(), container.getComponentInstanceOfType(S1_DEP3.class).getId());
assertSame(s1_2.getDep4(), container.getComponentInstanceOfType(S1_DEP4.class));
assertEquals(s1_2.getDep4().getId(), container.getComponentInstanceOfType(S1_DEP4.class).getId());
assertNotSame(s1_2.getDep5(), container.getComponentInstanceOfType(S1_DEP5.class));
assertSame(s1_2.getDep6(), container.getComponentInstanceOfType(S1_DEP6.class));
assertEquals(s1_2.getDep6().getId(), container.getComponentInstanceOfType(S1_DEP6.class).getId());
assertSame(s1_2, s1_2.getDep6().getS1());
assertEquals(s1_2.getId(), s1_2.getDep6().getS1().getId());
assertSame(s1_2, container.getComponentInstanceOfType(S1_DEP6.class).getS1());
assertEquals(s1_2.getId(), container.getComponentInstanceOfType(S1_DEP6.class).getS1().getId());
manager.<ServletRequest> getContext(RequestScoped.class).deactivate(req2);
try
{
container.getComponentInstanceOfType(S2.class).getId();
fail("An exception is expected as the scope is not active");
}
catch (Exception e)
{
// ok
}
// Request1 out of any session context
manager.<HttpSession> getContext(SessionScoped.class).activate(null);
try
{
container.getComponentInstanceOfType(S2.class).getId();
fail("An exception is expected as the scope is not active");
}
catch (Exception e)
{
// ok
}
manager.<HttpSession> getContext(SessionScoped.class).deactivate(null);
// Register a session
Map<Object, Object> mapSession1 = new HashMap<Object, Object>();
HttpSession session1 = createProxy(HttpSession.class, mapSession1);
manager.<HttpSession> getContext(SessionScoped.class).register(session1);
// Request2 out of any session context
manager.<HttpSession> getContext(SessionScoped.class).activate(null);
try
{
container.getComponentInstanceOfType(S2.class).getId();
fail("An exception is expected as the scope is not active");
}
catch (Exception e)
{
// ok
}
assertTrue(mapSession1.isEmpty());
manager.<HttpSession> getContext(SessionScoped.class).deactivate(null);
// Request3 within the session context
manager.<HttpSession> getContext(SessionScoped.class).activate(session1);
try
{
container.getComponentInstanceOfType(S20.class);
fail("An exception is expected as it is a passivating scope and S20 is not serializable");
}
catch (Exception e)
{
// ok
}
S2 s2 = container.getComponentInstanceOfType(S2.class);
assertNotNull(s2);
int s2Id = s2.getId();
assertSame(s2, container.getComponentInstanceOfType(S2.class));
assertEquals(s2Id, container.getComponentInstanceOfType(S2.class).getId());
manager.<HttpSession> getContext(SessionScoped.class).deactivate(session1);
// Request4 within the session context
manager.<HttpSession> getContext(SessionScoped.class).activate(session1);
S2 s2_2 = container.getComponentInstanceOfType(S2.class);
assertNotNull(s2_2);
assertSame(s2_2, container.getComponentInstanceOfType(S2.class));
assertSame(s2_2, s2);
assertEquals(s2_2.getId(), s2Id);
manager.<HttpSession> getContext(SessionScoped.class).deactivate(session1);
// Register session 2
Map<Object, Object> mapSession2 = new HashMap<Object, Object>();
HttpSession session2 = createProxy(HttpSession.class, mapSession2);
manager.<HttpSession> getContext(SessionScoped.class).register(session2);
// Request5 within the session context of session#2
manager.<HttpSession> getContext(SessionScoped.class).activate(session2);
S2 s2_3 = container.getComponentInstanceOfType(S2.class);
assertNotNull(s2_3);
assertSame(s2_3, container.getComponentInstanceOfType(S2.class));
assertFalse(s2_3.getId() == s2Id);
assertEquals(1, mapSession2.size());
manager.<HttpSession> getContext(SessionScoped.class).deactivate(session2);
assertEquals(1, mapSession2.size());
// Unregister session 2
manager.<HttpSession> getContext(SessionScoped.class).unregister(session2);
assertTrue(mapSession2.isEmpty());
// Unregister session 1
manager.<HttpSession> getContext(SessionScoped.class).unregister(session1);
assertTrue(mapSession1.isEmpty());
// Request6 out of any session context
manager.<HttpSession> getContext(SessionScoped.class).activate(session1);
container.getComponentInstanceOfType(S2.class).getId();
assertEquals(1, mapSession1.size());
manager.<HttpSession> getContext(SessionScoped.class).deactivate(session1);
// Register session 3
Map<Object, Object> mapSession3 = new HashMap<Object, Object>();
HttpSession session3 = createProxy(HttpSession.class, mapSession2);
manager.<HttpSession> getContext(SessionScoped.class).register(session3);
checkConcurrentAccesses(container, S2.class, mapSession3, HttpSession.class,
manager.<HttpSession> getContext(SessionScoped.class));
// Unregister session 3
manager.<HttpSession> getContext(SessionScoped.class).unregister(session3);
// Request1 within the application context as it is always active
S3 s3 = container.getComponentInstanceOfType(S3.class);
assertNotNull(s3);
assertSame(s3, container.getComponentInstanceOfType(S3.class));