KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tctest > MissingClassApplyTestApp


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.spec.CyclicBarrierSpec;
12 import com.tc.object.loaders.IsolationClassLoader;
13 import com.tc.simulator.app.ApplicationConfig;
14 import com.tc.simulator.listener.ListenerProvider;
15 import com.tctest.runner.AbstractTransparentApp;
16
17 import java.util.ArrayList JavaDoc;
18 import java.util.List JavaDoc;
19
20 public class MissingClassApplyTestApp extends AbstractTransparentApp {
21
22   private static final String JavaDoc MISSING_CLASS_NAME = MissingClassApplyTestApp.class.getName() + "$MissingClass";
23   private List JavaDoc root = new ArrayList JavaDoc();
24   private CyclicBarrier barrier = new CyclicBarrier(getParticipantCount());
25
26   public MissingClassApplyTestApp(String JavaDoc appId, ApplicationConfig cfg, ListenerProvider listenerProvider) {
27     super(appId, cfg, listenerProvider);
28     System.err.println("\n### CTor.missingClass=" + MISSING_CLASS_NAME);
29   }
30
31   public void run() {
32     try {
33       runTest();
34     } catch (Throwable JavaDoc t) {
35       notifyError(t);
36     }
37
38   }
39
40   private void runTest() throws Exception JavaDoc {
41
42     final int nodeId = barrier.barrier();
43     final boolean masterNode = nodeId == 0;
44     System.err.println("\n### NodeId=" + nodeId + ", ThreadId=" + Thread.currentThread().getName());
45     if (!masterNode) {
46       final IsolationClassLoader icl = (IsolationClassLoader) getClass().getClassLoader();
47       icl.throwOnLoad(MISSING_CLASS_NAME, MISSING_CLASS_NAME + " should not be found in this node [nodeId=" + nodeId + "]");
48     }
49     barrier.barrier();
50     // make sure that referencing MissingClass throws exception everywhere except the master node...
51
checkClassAvailability(masterNode);
52     
53     barrier.barrier();
54     // make sure that we can push some updates to root
55
if (masterNode) {
56       add(new Object JavaDoc());
57     }
58     barrier.barrier();
59     checkSize(1);
60     barrier.barrier();
61     // make sure that update that refer to MissingClass don't throw exceptions in those nodes that don't have access to
62
// it
63
if (masterNode) {
64       add(new MissingClass());
65     }
66     if (!masterNode) {
67       checkSize((masterNode) ? 2 : 1);
68     }
69     barrier.barrier();
70     // just for fun, check class availability again
71
checkClassAvailability(masterNode);
72   }
73
74   private void checkClassAvailability(final boolean masterNode) {
75     if (masterNode) {
76       new MissingClass();
77     } else {
78       Throwable JavaDoc exception = null;
79       try {
80         new MissingClass();
81       } catch (Throwable JavaDoc e) {
82         exception = e;
83       }
84       if (exception == null) {
85         notifyError("Expected exception was not thrown!");
86       }
87     }
88   }
89
90   public void add(Object JavaDoc o) {
91     synchronized (root) {
92       root.add(o);
93     }
94   }
95
96   public synchronized void checkSize(final int i) {
97     int actual;
98     synchronized (root) {
99       actual = root.size();
100     }
101     if (i != actual) {
102       notifyError("Unexpected size: expected=" + i + ", actual=" + actual);
103     }
104   }
105
106   public static void visitL1DSOConfig(ConfigVisitor visitor, DSOClientConfigHelper config) {
107     String JavaDoc testClass = MissingClassApplyTestApp.class.getName();
108
109     System.err.println("\n### testClass=" + testClass);
110     System.err.println("\n### missingClass=" + MISSING_CLASS_NAME);
111
112     config.getOrCreateSpec(testClass) //
113
.addRoot("barrier", "barrier") //
114
.addRoot("root", "root");
115
116     config.getOrCreateSpec(MISSING_CLASS_NAME);
117
118     config.addWriteAutolock("* " + testClass + "*.*(..)");
119     new CyclicBarrierSpec().visit(visitor, config);
120   }
121
122   static class MissingClass {
123     // n/a
124
}
125
126 }
127
Popular Tags