1 package dst.ass1.jpa.listener;
4 import javax.persistence.*;
5 import java.util.concurrent.ConcurrentHashMap;
6 import java.util.concurrent.atomic.AtomicLongArray;
8 public class DefaultListener {
9 public static final int LOAD_OPS = 0;
10 public static final int UPDATE_OPS = 1;
11 public static final int REMOVE_OPS = 2;
12 public static final int PERSIST_OPS = 3;
13 public static final int PERSIST_TIME = 4;
14 public static final int ATOMIC_ARRAY_SIZE = 5;
16 private static final ConcurrentHashMap<Object, Long> startTimes = new ConcurrentHashMap<>();
17 private static AtomicLongArray data = new AtomicLongArray(ATOMIC_ARRAY_SIZE);
19 public static int getLoadOperations() {
20 return (int) DefaultListener.data.get(LOAD_OPS);
23 public static int getUpdateOperations() {
24 return (int) DefaultListener.data.get(UPDATE_OPS);
27 public static int getRemoveOperations() {
28 return (int) DefaultListener.data.get(REMOVE_OPS);
31 public static int getPersistOperations() {
32 return (int) DefaultListener.data.get(PERSIST_OPS);
35 public static Integer getOverallTimeToPersist() {
36 return (int) DefaultListener.data.get(PERSIST_TIME);
39 public static double getAverageTimeToPersist() {
40 AtomicLongArray localdata = DefaultListener.data;
41 return (double) localdata.get(PERSIST_TIME) / localdata.get(PERSIST_OPS);
46 * Clears the internal data structures that are used for storing the operations.
48 public static void clear() {
49 DefaultListener.data = new AtomicLongArray(DefaultListener.ATOMIC_ARRAY_SIZE);
53 * Track operations + times.
56 public void postRemove(Object obj) {
57 DefaultListener.data.incrementAndGet(REMOVE_OPS);
61 public void postUpdate(Object obj) {
62 DefaultListener.data.incrementAndGet(UPDATE_OPS);
66 public void postLoad(Object obj) {
67 DefaultListener.data.incrementAndGet(LOAD_OPS);
71 public void prePersist(Object obj) {
72 startTimes.put(obj, System.currentTimeMillis());
76 public void postPersist(Object obj) {
77 long startTime = startTimes.remove(obj);
79 AtomicLongArray localdata = DefaultListener.data;
80 localdata.addAndGet(PERSIST_TIME, System.currentTimeMillis() - startTime);
81 localdata.incrementAndGet(PERSIST_OPS);