]> git.somenet.org - pub/jan/dst18.git/blob - ass1-jpa/src/main/java/dst/ass1/jpa/listener/DefaultListener.java
[1.3.2] DefaultListener.
[pub/jan/dst18.git] / ass1-jpa / src / main / java / dst / ass1 / jpa / listener / DefaultListener.java
1 package dst.ass1.jpa.listener;
2
3
4 import javax.persistence.*;
5 import java.util.concurrent.ConcurrentHashMap;
6 import java.util.concurrent.atomic.AtomicLongArray;
7
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;
15
16     private static final ConcurrentHashMap<Object, Long> startTimes = new ConcurrentHashMap<>();
17     private static AtomicLongArray data = new AtomicLongArray(ATOMIC_ARRAY_SIZE);
18
19     public static int getLoadOperations() {
20         return (int) DefaultListener.data.get(LOAD_OPS);
21     }
22
23     public static int getUpdateOperations() {
24         return (int) DefaultListener.data.get(UPDATE_OPS);
25     }
26
27     public static int getRemoveOperations() {
28         return (int) DefaultListener.data.get(REMOVE_OPS);
29     }
30
31     public static int getPersistOperations() {
32         return (int) DefaultListener.data.get(PERSIST_OPS);
33     }
34
35     public static Integer getOverallTimeToPersist() {
36         return (int) DefaultListener.data.get(PERSIST_TIME);
37     }
38
39     public static double getAverageTimeToPersist() {
40         AtomicLongArray localdata = DefaultListener.data;
41         return (double) localdata.get(PERSIST_TIME) / localdata.get(PERSIST_OPS);
42     }
43
44
45     /**
46      * Clears the internal data structures that are used for storing the operations.
47      */
48     public static void clear() {
49         DefaultListener.data = new AtomicLongArray(DefaultListener.ATOMIC_ARRAY_SIZE);
50     }
51
52     /**
53      * Track operations + times.
54      */
55     @PostRemove
56     public void postRemove(Object obj) {
57         DefaultListener.data.incrementAndGet(REMOVE_OPS);
58     }
59
60     @PostUpdate
61     public void postUpdate(Object obj) {
62         DefaultListener.data.incrementAndGet(UPDATE_OPS);
63     }
64
65     @PostLoad
66     public void postLoad(Object obj) {
67         DefaultListener.data.incrementAndGet(LOAD_OPS);
68     }
69
70     @PrePersist
71     public void prePersist(Object obj) {
72         startTimes.put(obj, System.currentTimeMillis());
73     }
74
75     @PostPersist
76     public void postPersist(Object obj) {
77         long startTime = startTimes.remove(obj);
78
79         AtomicLongArray localdata = DefaultListener.data;
80         localdata.addAndGet(PERSIST_TIME, System.currentTimeMillis() - startTime);
81         localdata.incrementAndGet(PERSIST_OPS);
82     }
83 }