1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.orchestra.conversation.spring;
20
21 import org.apache.myfaces.orchestra.conversation.Conversation;
22 import org.apache.myfaces.orchestra.conversation.ConversationManager;
23 import org.apache.myfaces.orchestra.conversation.SimpleBean;
24 import org.apache.myfaces.orchestra.conversation.basic.LogConversationMessager;
25 import org.apache.myfaces.orchestra.frameworkAdapter.FrameworkAdapter;
26 import org.apache.myfaces.orchestra.frameworkAdapter.local.LocalFrameworkAdapter;
27 import org.springframework.aop.SpringProxy;
28 import org.springframework.aop.scope.ScopedObject;
29 import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
30
31
32
33
34
35 public class TestSpringUtils extends AbstractDependencyInjectionSpringContextTests
36 {
37 protected String[] getConfigLocations()
38 {
39 return new String[]
40 {
41 "classpath:org/apache/myfaces/orchestra/conversation/spring/TestSpringUtils.xml"
42 };
43 }
44
45 protected void onSetUp() throws Exception
46 {
47 super.onSetUp();
48
49 LocalFrameworkAdapter frameworkAdapter = new LocalFrameworkAdapter();
50 frameworkAdapter.setApplicationContext(applicationContext);
51 frameworkAdapter.setConversationMessager(new LogConversationMessager());
52 FrameworkAdapter.setCurrentInstance(frameworkAdapter);
53 }
54
55 protected void onTearDown() throws Exception
56 {
57 FrameworkAdapter.setCurrentInstance(null);
58 super.onTearDown();
59 }
60
61 public void testConversation() throws Exception
62 {
63 final String BEAN_NAME = "simpleBean";
64
65
66
67 final String CONVERSATION_NAME = BEAN_NAME;
68
69
70 SimpleBean scopedProxy = (SimpleBean) applicationContext.getBean(BEAN_NAME);
71
72 assertTrue("should be a scoped object", scopedProxy instanceof ScopedObject);
73 assertTrue("should be a proxy", scopedProxy instanceof SpringProxy);
74 assertFalse("conversation should not have been started yet", ConversationManager.getInstance().hasConversation(CONVERSATION_NAME));
75
76
77
78
79
80 scopedProxy.getData();
81 assertTrue("conversation should have been started", ConversationManager.getInstance().hasConversation(CONVERSATION_NAME));
82
83
84 SimpleBean convProxy = (SimpleBean) _SpringUtils.getTargetObject(scopedProxy);
85 assertTrue("should be a proxy", convProxy instanceof SpringProxy);
86 assertTrue(convProxy != scopedProxy);
87
88
89 SimpleBean realBean = (SimpleBean) _SpringUtils.getTargetObject(convProxy);
90 assertFalse("should not be a proxy", realBean instanceof SpringProxy);
91 assertTrue(realBean != convProxy);
92
93
94
95
96 assertEquals(null, convProxy.getData());
97 scopedProxy.setData("proxy");
98 assertEquals("proxy", realBean.getData());
99 realBean.setData("real");
100 assertEquals("real", scopedProxy.getData());
101
102
103
104 Conversation conv = ConversationManager.getInstance().getConversation(CONVERSATION_NAME);
105 conv.invalidate();
106 assertEquals(null, scopedProxy.getData());
107 SimpleBean newConvProxy = (SimpleBean) _SpringUtils.getTargetObject(scopedProxy);
108 assertNotSame(convProxy, newConvProxy);
109
110
111 scopedProxy.setData("proxy");
112 assertTrue("proxy".equals(scopedProxy.getData()));
113 assertFalse("proxy".equals(realBean.getData()));
114
115
116
117
118 try
119 {
120 convProxy.getData();
121 fail("old proxy still accessable after conversation has terminated");
122 }
123 catch(IllegalStateException e)
124 {
125
126 }
127 }
128 }