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;
20
21 import org.apache.myfaces.orchestra.conversation.basic.LogConversationMessager;
22 import org.apache.myfaces.orchestra.frameworkAdapter.FrameworkAdapter;
23 import org.apache.myfaces.orchestra.frameworkAdapter.local.LocalFrameworkAdapter;
24 import org.springframework.aop.SpringProxy;
25 import org.springframework.aop.framework.Advised;
26 import org.springframework.aop.scope.ScopedObject;
27 import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
28
29
30
31
32
33
34
35
36
37
38
39
40
41 public class TestConversationBind extends AbstractDependencyInjectionSpringContextTests
42 {
43 protected String[] getConfigLocations()
44 {
45 return new String[]
46 {
47 "classpath:org/apache/myfaces/orchestra/conversation/TestScope.xml"
48 };
49 }
50
51 protected void onSetUp() throws Exception
52 {
53 super.onSetUp();
54 }
55
56 public static class Dummy
57 {
58 int count;
59
60 public Conversation getConversation()
61 {
62 return Conversation.getCurrentInstance();
63 }
64
65 public int getCount()
66 {
67 return ++count;
68 }
69 }
70
71 public void testBind() throws Exception
72 {
73
74 LocalFrameworkAdapter frameworkAdapter = new LocalFrameworkAdapter();
75 frameworkAdapter.setApplicationContext(applicationContext);
76 frameworkAdapter.setConversationMessager(new LogConversationMessager());
77 FrameworkAdapter.setCurrentInstance(frameworkAdapter);
78
79 Dummy dummy = new Dummy();
80 assertFalse(dummy instanceof ScopedObject);
81 assertFalse(dummy instanceof SpringProxy);
82 assertNull(dummy.getConversation());
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98 final SimpleBean b1 = (SimpleBean) applicationContext.getBean("unscopedBean");
99 assertTrue(b1 instanceof ScopedObject);
100 assertTrue(b1 instanceof SpringProxy);
101 assertTrue(b1 instanceof Advised);
102 b1.doSomething();
103
104
105
106
107 Dummy dummyProxy = (Dummy) b1.bindToCurrentConversation(dummy);
108 assertTrue(dummyProxy instanceof SpringProxy);
109 assertNotNull(dummyProxy.getConversation());
110 assertEquals("unscopedBean", dummyProxy.getConversation().getName());
111
112
113 Conversation conv = ConversationManager.getInstance().getConversation("unscopedBean");
114 Dummy dummyProxy2 = (Dummy) conv.bind(dummy);
115 assertTrue(dummyProxy2 instanceof SpringProxy);
116 assertNotSame(dummyProxy, dummyProxy2);
117 assertNotNull(dummyProxy2.getConversation());
118 assertEquals("unscopedBean", dummyProxy2.getConversation().getName());
119 }
120
121
122
123 public void testBindToInvalidatedConversation() throws Exception
124 {
125
126 LocalFrameworkAdapter frameworkAdapter = new LocalFrameworkAdapter();
127 frameworkAdapter.setApplicationContext(applicationContext);
128 frameworkAdapter.setConversationMessager(new LogConversationMessager());
129 FrameworkAdapter.setCurrentInstance(frameworkAdapter);
130
131 Dummy dummy = new Dummy();
132
133
134 final SimpleBean b1 = (SimpleBean) applicationContext.getBean("unscopedBean");
135 b1.doSomething();
136
137 Conversation conv = ConversationManager.getInstance().getConversation("unscopedBean");
138 Dummy dummyProxy = (Dummy) conv.bind(dummy);
139
140
141 Conversation convA = dummyProxy.getConversation();
142 assertSame(conv, convA);
143
144
145 conv.invalidate();
146 assertNull(ConversationManager.getInstance().getConversation("unscopedBean"));
147 try
148 {
149 dummyProxy.getConversation();
150 fail("Exception expected but call failed");
151 }
152 catch(IllegalStateException e)
153 {
154
155 }
156
157
158
159 b1.doSomething();
160 assertNotNull(ConversationManager.getInstance().getConversation("unscopedBean"));
161 try
162 {
163 dummyProxy.getConversation();
164 fail("Exception expected but call failed");
165 }
166 catch(IllegalStateException e)
167 {
168
169 }
170 }
171 }