KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tctest > performance > faulting > DualQueueFaultTestApp


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