KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jboss > test > cache > test > standAloneAop > ReplicatedTxAopTest


1 /*
2 * JBoss, the OpenSource J2EE webOS
3 *
4 * Distributable under LGPL license.
5 * See terms of license at gnu.org.
6 */

7 package org.jboss.test.cache.test.standAloneAop;
8
9 import junit.framework.Test;
10 import junit.framework.TestCase;
11 import junit.framework.TestSuite;
12 import org.jboss.cache.transaction.DummyTransactionManager;
13 import org.jboss.logging.Logger;
14
15 import javax.naming.Context JavaDoc;
16 import javax.naming.InitialContext JavaDoc;
17 import javax.naming.NamingException JavaDoc;
18 import javax.transaction.*;
19 import java.util.Properties JavaDoc;
20
21 //import org.jboss.test.JBossTestCase;
22

23
24 /**
25  * LocalTestCase.java that uses standalone aop package.
26  * <p/>
27  * <p/>
28  * Created: Mon May 05 17:30:11 2003
29  */

30
31 public class ReplicatedTxAopTest extends TestCase
32 {
33 // Category log = getLog();
34
Logger log = Logger.getLogger(ReplicatedTxAopTest.class);
35    TreeCacheAopTester tester, tester1;
36    final String JavaDoc FACTORY = "org.jboss.cache.transaction.DummyContextFactory";
37    DummyTransactionManager tx_mgr;
38    Throwable JavaDoc t1_ex, t2_ex;
39    long start=0;
40
41
42    public ReplicatedTxAopTest(String JavaDoc name)
43    {
44       super(name);
45    }
46
47    protected void setUp() throws Exception JavaDoc
48    {
49       super.setUp();
50       log.info("setUp() ....");
51       String JavaDoc configFile = "META-INF/replSync-service.xml";
52       tester = new TreeCacheAopTester(configFile);
53       tester1 = new TreeCacheAopTester(configFile);
54
55       System.setProperty(Context.INITIAL_CONTEXT_FACTORY, FACTORY);
56
57       tx_mgr = DummyTransactionManager.getInstance();
58       t1_ex = t2_ex = null;
59    }
60
61    protected void tearDown() throws Exception JavaDoc
62    {
63       super.tearDown();
64       tester.stop();
65       tester1.stop();
66       tester = null;
67       tester1 = null;
68
69       DummyTransactionManager.destroy();
70    }
71
72 // public void testDummy() {}
73

74    public void testSetup()
75    {
76       log.info("testSetup() ....");
77       try {
78          tester.testSetup();
79          tester1.testSetup();
80       } catch (Exception JavaDoc ex) {
81          ex.printStackTrace();
82          fail("testSetup(): fails. " + ex.toString());
83       }
84    }
85
86    UserTransaction getTransaction() throws SystemException, NotSupportedException, NamingException JavaDoc
87    {
88       Properties JavaDoc prop = new Properties JavaDoc();
89       prop.put(Context.INITIAL_CONTEXT_FACTORY,
90           "org.jboss.cache.transaction.DummyContextFactory");
91       return (UserTransaction)new InitialContext JavaDoc(prop).lookup("UserTransaction");
92    }
93
94    public void testSimple() throws Exception JavaDoc
95    {
96       log.info("testSimple() ....");
97       UserTransaction tx = getTransaction();
98       tx.begin();
99       tester.createPerson("/person/test1", "Harald Gliebe", 32);
100       tx.commit();
101       tx.begin();
102       tester.setName("/person/test1", "Benoit");
103       tx.commit();
104       assertEquals((Object JavaDoc) "Benoit", (Object JavaDoc) tester.getName("/person/test1"));
105       assertEquals((Object JavaDoc) "Benoit", (Object JavaDoc) tester1.getName("/person/test1"));
106       tx.begin();
107       tester.setAge("/person/test1", 61);
108       tx.commit();
109       assertEquals(61, tester.getAge("/person/test1"));
110       assertEquals(61, tester1.getAge("/person/test1"));
111    }
112
113    public void testModification() throws Exception JavaDoc
114    {
115       UserTransaction tx = getTransaction();
116       tx.begin();
117       tester.createPerson("/person/test2", "Harald", 32);
118       tester.setName("/person/test2", "Harald Gliebe");
119       tx.commit();
120       tx.begin();
121       tester1.setName("/person/test2", "Benoit");
122       tx.commit();
123       assertEquals((Object JavaDoc) tester.getName("/person/test2"), (Object JavaDoc) "Benoit");
124       assertEquals((Object JavaDoc) tester1.getName("/person/test2"), (Object JavaDoc) "Benoit");
125       tx.begin();
126       tester1.setName("/person/test2", "Harald");
127       tx.rollback();
128       assertEquals((Object JavaDoc) tester.getName("/person/test2"), (Object JavaDoc) "Benoit");
129       assertEquals((Object JavaDoc) tester1.getName("/person/test2"), (Object JavaDoc) "Benoit");
130       tester.removePerson("/person/test2");
131    }
132
133
134
135    public void testConcurrentPuts() throws Exception JavaDoc
136    {
137       tester.setSyncCommitPhase(true);
138
139       Thread JavaDoc t1 = new Thread JavaDoc()
140       {
141          Transaction tx;
142
143          public void run()
144          {
145             try {
146                tester.createPerson("/person/test6", "p6", 50);
147                UserTransaction tx = getTransaction();
148                tx.begin();
149                tester.addLanguage("/person/test6", "German");
150                _pause(4000);
151                tx.commit();
152             }
153             catch(RollbackException rollback) {
154                ;
155             }
156             catch (Exception JavaDoc ex) {
157                t1_ex = ex;
158             }
159          }
160       };
161
162       Thread JavaDoc t2 = new Thread JavaDoc()
163       {
164          Transaction tx;
165
166          public void run()
167          {
168             try {
169                _pause(1000); // give Thread1 time to createPerson
170
UserTransaction tx = getTransaction();
171                tx.begin();
172                tester.addLanguage("/person/test6", "English");
173                tx.commit();
174             }
175             catch(RollbackException rollback) {
176                ;
177             }
178             catch (Exception JavaDoc ex) {
179                t2_ex = ex;
180             }
181          }
182       };
183
184       t1.start();
185       t2.start();
186
187       t1.join();
188       t2.join();
189
190       // t2 should rollback due to timeout while t2 should succeed
191
if(t2_ex != null)
192          fail("Thread1 failed: " + t2_ex);
193       if(t1_ex != null)
194          fail("Thread2 failed: " + t1_ex);
195
196       int size = tester.getLanguagesSize("/person/test6");
197       assertEquals("number of languages should be 2, but is " + size + " (" +
198                    tester.getLanguages("/person/test6") + ")",
199                    2, size);
200       System.out.println("tester: " + tester.getLanguages("/person/test6"));
201       size = tester1.getLanguagesSize("/person/test6");
202       assertEquals("number of languages should be 2, but is " + size + " (" +
203                    tester.getLanguages("/person/test6") + ")",
204                    2, size);
205       System.out.println("tester1: " + tester1.getLanguages("/person/test6"));
206    }
207
208    static void _pause(long millis)
209    {
210       try {
211          Thread.sleep(millis);
212       } catch (Exception JavaDoc ex) {
213       }
214    }
215
216    void log(String JavaDoc s) {
217       long now;
218       if(start == 0)
219          start=System.currentTimeMillis();
220       now=System.currentTimeMillis();
221
222       System.out.println("[" + Thread.currentThread().getName() + "] [" + (now - start) + "] " + s);
223     }
224
225
226    public static Test suite() throws Exception JavaDoc
227    {
228       return new TestSuite(ReplicatedTxAopTest.class);
229    }
230
231
232    public static void main(String JavaDoc[] args) throws Exception JavaDoc
233    {
234       junit.textui.TestRunner.run(suite());
235    }
236
237 }
238
239
Popular Tags