1 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 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 ("Supposed to throw UnlockedSharedObjectException error"); 40 } catch (UnlockedSharedObjectException e) { 41 } 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 e) { 71 throw new AssertionError (e); 72 } 73 } 74 75 public static void visitL1DSOConfig(ConfigVisitor visitor, DSOClientConfigHelper config) { 76 String testClass = ShareInnerOfInnerClassTestApp.class.getName(); 77 TransparencyClassSpec spec = config.getOrCreateSpec(testClass); 78 config.getOrCreateSpec(OuterClass.InnerClass.InnieClass.class.getName()); 79 80 String 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 myString; 93 94 InnieClass(String s) { 95 myString = s; 96 } 97 98 public void setString(String s) { 99 myString = s; 100 } 101 102 public String getString() { 103 return myString; 104 } 105 } 106 } 107 } 108 } 109
| Popular Tags
|