KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tctest > ShareableJavaLangObjectTestApp


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

4 package com.tctest;
5
6 import com.tc.object.config.ConfigVisitor;
7 import com.tc.object.config.DSOClientConfigHelper;
8 import com.tc.object.config.TransparencyClassSpec;
9 import com.tc.simulator.app.ApplicationConfig;
10 import com.tc.simulator.listener.ListenerProvider;
11 import com.tc.util.Assert;
12 import com.tctest.runner.AbstractTransparentApp;
13
14 import java.util.HashMap JavaDoc;
15 import java.util.Map JavaDoc;
16
17 /**
18  * Ensure that we can use instances of java.lang.Object in DSO managed graphs
19  */

20 public class ShareableJavaLangObjectTestApp extends AbstractTransparentApp {
21
22   private final Map JavaDoc root = new HashMap JavaDoc();
23   private final Object JavaDoc objectRoot = new Object JavaDoc();
24
25   public ShareableJavaLangObjectTestApp(String JavaDoc appId, ApplicationConfig cfg, ListenerProvider listenerProvider) {
26     super(appId, cfg, listenerProvider);
27
28     if (getParticipantCount() < 2) { throw new RuntimeException JavaDoc("must have at least two participants"); }
29   }
30
31   public static void visitL1DSOConfig(ConfigVisitor visitor, DSOClientConfigHelper config) {
32     String JavaDoc testClass = ShareableJavaLangObjectTestApp.class.getName();
33     TransparencyClassSpec spec = config.getOrCreateSpec(testClass);
34
35     String JavaDoc methodExpression = "* " + testClass + "*.*(..)";
36     config.addWriteAutolock(methodExpression);
37     spec.addRoot("root", "root");
38     spec.addRoot("objectRoot", "objectRoot");
39
40     config.addIncludePattern(ObjectHolder.class.getName());
41   }
42
43   public void run() {
44     Object JavaDoc o = objectRoot;
45     Assert.assertNotNull(o);
46
47     final Object JavaDoc object;
48
49     synchronized (root) {
50       if (root.size() == 0) {
51         root.put("object", new Object JavaDoc());
52       }
53       object = root.get("object");
54     }
55
56     // synchronizing on the Object instance will create a transaction in which we can write to root in
57
synchronized (object) {
58       root.put(getApplicationId(), null);
59     }
60
61     // Also make sure a physical object with an Object reference works okay
62
synchronized (root) {
63       root.put("objectholder", new ObjectHolder());
64     }
65   }
66
67   private static class ObjectHolder {
68     final Object JavaDoc heldObject = new Object JavaDoc();
69   }
70 }
71
Popular Tags