1 21 package com.db4o.tools; 22 23 import com.db4o.ObjectContainer; 24 import com.db4o.events.Event4; 25 import com.db4o.events.EventArgs; 26 import com.db4o.events.EventListener4; 27 import com.db4o.events.EventRegistry; 28 import com.db4o.events.EventRegistryFactory; 29 import com.db4o.foundation.StopWatch; 30 31 34 public class QueryStats { 35 36 private EventRegistry _registry = null; 37 38 private int _activationCount; 39 40 private final StopWatch _watch = new StopWatch(); 41 42 private final EventListener4 _queryStarted = new EventListener4() { 43 public void onEvent(Event4 e, EventArgs args) { 44 _activationCount = 0; 45 _watch.start(); 46 } 47 }; 48 49 private final EventListener4 _queryFinished = new EventListener4() { 50 public void onEvent(Event4 e, EventArgs args) { 51 _watch.stop(); 52 } 53 }; 54 55 private final EventListener4 _activated = new EventListener4() { 56 public void onEvent(Event4 e, EventArgs args) { 57 ++_activationCount; 58 }; 59 }; 60 61 66 public long executionTime() { 67 return _watch.elapsed(); 68 } 69 70 73 public int activationCount() { 74 return _activationCount; 75 } 76 77 80 public void connect(ObjectContainer container) { 81 if (_registry != null) { 82 throw new IllegalArgumentException ("Already connected to an ObjectContainer"); 83 } 84 _registry = EventRegistryFactory.forObjectContainer(container); 85 _registry.queryStarted().addListener(_queryStarted); 86 _registry.queryFinished().addListener(_queryFinished); 87 _registry.activated().addListener(_activated); 88 } 89 90 93 public void disconnect() { 94 if (null != _registry) { 95 _registry.queryStarted().removeListener(_queryStarted); 96 _registry.queryFinished().removeListener(_queryFinished); 97 _registry.activated().removeListener(_activated); 98 _registry = null; 99 } 100 } 101 } | Popular Tags |