KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tctest > performance > throughput > DualQueueThroughputTestApp


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.throughput;
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.performance.generate.load.Metronome;
13
14 import java.util.concurrent.BlockingQueue JavaDoc;
15 import java.util.concurrent.LinkedBlockingQueue JavaDoc;
16
17 public final class DualQueueThroughputTestApp extends AbstractDualQueueThroughputTestApp {
18
19   private final BlockingQueue JavaDoc rootQueue1;
20   private final BlockingQueue JavaDoc rootQueue2;
21
22   public DualQueueThroughputTestApp(String JavaDoc appId, ApplicationConfig cfg, ListenerProvider listenerProvider) {
23     super(appId, cfg, listenerProvider);
24     rootQueue1 = new LinkedBlockingQueue JavaDoc();
25     rootQueue2 = new LinkedBlockingQueue JavaDoc();
26   }
27
28   public static void visitL1DSOConfig(ConfigVisitor visitor, DSOClientConfigHelper config) {
29     TransparencyClassSpec spec = config.getOrCreateSpec(Metronome.class.getName());
30     String JavaDoc className = DualQueueThroughputTestApp.class.getName();
31     spec = config.getOrCreateSpec(className);
32     String JavaDoc methodExpression = "* " + className + "*.*(..)";
33     config.addWriteAutolock(methodExpression);
34     spec.addRoot("rootQueue1", "rootQueue1");
35     spec.addRoot("rootQueue2", "rootQueue2");
36   }
37   
38   public static void visitDSOApplicationConfig(ConfigVisitor visitor, DSOApplicationConfig config) {
39     config.addIncludePattern(Metronome.class.getName());
40     String JavaDoc className = DualQueueThroughputTestApp.class.getName();
41     config.addIncludePattern(className);
42     String JavaDoc methodExpression = "* " + className + "*.*(..)";
43     config.addWriteAutolock(methodExpression);
44     config.addRoot("rootQueue1", className + ".rootQueue1");
45     config.addRoot("rootQueue2", className + ".rootQueue2");
46   }
47
48   // Abstraction is not worth the effort
49
protected void populate1(Object JavaDoc data) throws InterruptedException JavaDoc {
50     if (data instanceof Metronome) {
51       synchronized (data) {
52         ((Metronome) data).starttime = System.nanoTime();
53       }
54     }
55     rootQueue1.put(data);
56   }
57
58   protected void populate2(Object JavaDoc data) throws InterruptedException JavaDoc {
59     if (data instanceof Metronome) {
60       synchronized (data) {
61         ((Metronome) data).starttime = System.nanoTime();
62       }
63     }
64     rootQueue2.put(data);
65   }
66
67   protected void retrieve1() throws InterruptedException JavaDoc {
68     Object JavaDoc data;
69     data = rootQueue1.take();
70     if (data instanceof Metronome) {
71       synchronized (data) {
72         ((Metronome) data).endtime = System.nanoTime();
73       }
74       results1().add(data);
75     }
76   }
77
78   protected void retrieve2() throws InterruptedException JavaDoc {
79     Object JavaDoc data;
80     data = rootQueue2.take();
81     if (data instanceof Metronome) {
82       synchronized (data) {
83         ((Metronome) data).endtime = System.nanoTime();
84       }
85       results2().add(data);
86     }
87   }
88
89   protected String JavaDoc title() {
90     return "Dual Shared Queue Throughput";
91   }
92 }
93
Popular Tags