KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tctest > performance > timedtask > TimedObjectFaultTestApp


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.performance.timedtask;
5
6 import com.tc.object.config.ConfigVisitor;
7 import com.tc.object.config.DSOApplicationConfig;
8 import com.tc.object.config.DSOClientConfigHelper;
9 import com.tc.object.config.TransparencyClassSpec;
10 import com.tc.simulator.app.ApplicationConfig;
11 import com.tc.simulator.listener.ListenerProvider;
12 import com.tctest.runner.AbstractTransparentApp;
13
14 import java.util.concurrent.BlockingQueue JavaDoc;
15 import java.util.concurrent.BrokenBarrierException JavaDoc;
16 import java.util.concurrent.CyclicBarrier JavaDoc;
17 import java.util.concurrent.LinkedBlockingQueue JavaDoc;
18
19 public final class TimedObjectFaultTestApp extends AbstractTransparentApp {
20
21   private final BlockingQueue JavaDoc rootQueue;
22   private final CyclicBarrier JavaDoc barrier;
23   private final CyclicBarrier JavaDoc writerBarrier;
24   private final int writers;
25   private int writerCounter;
26   private boolean isLocalWriter, isMasterNode;
27   private long starttime, endtime;
28   private static final int VOLUME = 10000;
29   private static final double NANOSEC = 1000000000D;
30
31   public TimedObjectFaultTestApp(String JavaDoc appId, ApplicationConfig cfg, ListenerProvider listenerProvider) {
32     super(appId, cfg, listenerProvider);
33     writers = getIntensity();
34     barrier = new CyclicBarrier JavaDoc(getParticipantCount());
35     writerBarrier = new CyclicBarrier JavaDoc(writers);
36     rootQueue = new LinkedBlockingQueue JavaDoc(100);
37   }
38
39   public static void visitL1DSOConfig(ConfigVisitor visitor, DSOClientConfigHelper config) {
40     TransparencyClassSpec spec = config.getOrCreateSpec(CyclicBarrier JavaDoc.class.getName());
41     String JavaDoc className = TimedObjectFaultTestApp.class.getName();
42     spec = config.getOrCreateSpec(className);
43
44     String JavaDoc methodExpression = "* " + className + "*.*(..)";
45     config.addWriteAutolock(methodExpression);
46     config.addWriteAutolock("* " + CyclicBarrier JavaDoc.class.getName() + "*.*(..)");
47
48     spec.addRoot("rootQueue", "rootQueue");
49     spec.addRoot("writerCounter", "writerCounter");
50     spec.addRoot("starttime", "starttime");
51     spec.addRoot("endtime", "endtime");
52     spec.addRoot("barrier", "barrier");
53     spec.addRoot("writerBarrier", "writerBarrier");
54   }
55
56   public static void visitDSOApplicationConfig(ConfigVisitor visitor, DSOApplicationConfig config) {
57     config.addIncludePattern(CyclicBarrier JavaDoc.class.getName());
58     String JavaDoc className = TimedObjectFaultTestApp.class.getName();
59     config.addIncludePattern(className);
60
61     String JavaDoc methodExpression = "* " + className + "*.*(..)";
62     config.addWriteAutolock(methodExpression);
63     config.addWriteAutolock("* " + CyclicBarrier JavaDoc.class.getName() + "*.*(..)");
64
65     config.addRoot("rootQueue", className + ".rootQueue");
66     config.addRoot("writerCounter", className + ".writerCounter");
67     config.addRoot("starttime", className + ".starttime");
68     config.addRoot("endtime", className + ".endtime");
69     config.addRoot("barrier", className + ".barrier");
70     config.addRoot("writerBarrier", className + ".writerBarrier");
71   }
72
73   public void run() {
74     synchronized (barrier) {
75       if (++writerCounter <= writers) {
76         if (writerCounter == 1) isMasterNode = true;
77         isLocalWriter = true;
78       }
79     }
80
81     try {
82
83       barrier.await();
84
85       if (isLocalWriter) writer();
86       else reader();
87
88       barrier.await();
89
90     } catch (Throwable JavaDoc t) {
91       notifyError(t);
92     }
93
94     if (isMasterNode) {
95       printResult(starttime, endtime);
96     }
97   }
98
99   private void writer() throws InterruptedException JavaDoc, BrokenBarrierException JavaDoc {
100     int iterations = VOLUME / writers;
101     starttime = System.nanoTime();
102     for (int i = 0; i < iterations; i++) {
103       rootQueue.put(new Object JavaDoc());
104     }
105
106     writerBarrier.await();
107
108     if (isMasterNode) {
109       for (int i = 0; i < getParticipantCount() - writers; i++) {
110         rootQueue.put("stop");
111       }
112     }
113   }
114
115   private void reader() throws InterruptedException JavaDoc {
116     while (true) {
117       if (rootQueue.take() instanceof String JavaDoc) break;
118     }
119     endtime = System.nanoTime();
120   }
121
122   private void printResult(long start, long end) {
123     double time = (end - start);
124     long result = Math.round(VOLUME / (time / NANOSEC));
125     System.out.println("**%% TERRACOTTA TEST STATISTICS %%**: value=" + result + " obj/sec");
126   }
127 }
128
Popular Tags