KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tctest > ShareInnerOfInnerClassTestApp


1 /*
2  * All content copyright (c) 2003-2006 Terracotta, Inc., except as may otherwise be noted in a separate copyright
3  * notice. All rights reserved.
4  */

5 package com.tctest;
6
7 import EDU.oswego.cs.dl.util.concurrent.CyclicBarrier;
8
9 import com.tc.object.config.ConfigVisitor;
10 import com.tc.object.config.DSOClientConfigHelper;
11 import com.tc.object.config.TransparencyClassSpec;
12 import com.tc.object.config.spec.CyclicBarrierSpec;
13 import com.tc.object.tx.UnlockedSharedObjectException;
14 import com.tc.simulator.app.ApplicationConfig;
15 import com.tc.simulator.listener.ListenerProvider;
16 import com.tc.util.Assert;
17 import com.tctest.runner.AbstractTransparentApp;
18
19 public class ShareInnerOfInnerClassTestApp extends AbstractTransparentApp {
20
21   private OuterClass.InnerClass.InnieClass innieRoot = new OuterClass.InnerClass.InnieClass("mmkay");
22   private CyclicBarrier barrier;
23   private int[] count = new int[1];
24
25   private int myId;
26
27   public ShareInnerOfInnerClassTestApp(String JavaDoc appId, ApplicationConfig cfg, ListenerProvider listenerProvider) {
28     super(appId, cfg, listenerProvider);
29     barrier = new CyclicBarrier(cfg.getGlobalParticipantCount());
30   }
31
32   public void run() {
33     synchronized (innieRoot) {
34       Assert.assertEquals("mmkay", innieRoot.getString());
35     }
36
37     try {
38       innieRoot.setString("I am smart. S.M.R.T.");
39       throw new AssertionError JavaDoc("Supposed to throw UnlockedSharedObjectException error");
40     } catch (UnlockedSharedObjectException e) {
41       // expected
42
}
43
44     barrier();
45
46     synchronized (count) {
47       myId = count[0]++;
48       
49       if (myId == 0) {
50         synchronized (innieRoot) {
51           innieRoot.setString("D'oh");
52         }
53       }
54       
55     }
56
57     barrier();
58     
59     if (myId == 1) {
60       synchronized (innieRoot) {
61         Assert.assertEquals("D'oh", innieRoot.getString());
62       }
63     }
64
65   }
66
67   private void barrier() {
68     try {
69       barrier.barrier();
70     } catch (Exception JavaDoc e) {
71       throw new AssertionError JavaDoc(e);
72     }
73   }
74
75   public static void visitL1DSOConfig(ConfigVisitor visitor, DSOClientConfigHelper config) {
76     String JavaDoc testClass = ShareInnerOfInnerClassTestApp.class.getName();
77     TransparencyClassSpec spec = config.getOrCreateSpec(testClass);
78     config.getOrCreateSpec(OuterClass.InnerClass.InnieClass.class.getName());
79
80     String JavaDoc methodExpression = "* " + testClass + "*.*(..)";
81     config.addWriteAutolock(methodExpression);
82     spec.addRoot("innieRoot", "innieRoot");
83     spec.addRoot("barrier", "barrier");
84     spec.addRoot("count", "count");
85     
86     new CyclicBarrierSpec().visit(visitor, config);
87   }
88
89   private static class OuterClass {
90     private static class InnerClass {
91       private static class InnieClass {
92         String JavaDoc myString;
93
94         InnieClass(String JavaDoc s) {
95           myString = s;
96         }
97
98         public void setString(String JavaDoc s) {
99           myString = s;
100         }
101
102         public String JavaDoc getString() {
103           return myString;
104         }
105       }
106     }
107   }
108 }
109
Popular Tags