You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by cu...@apache.org on 2010/02/16 21:00:46 UTC
svn commit: r910667 - in /openjpa/trunk:
openjpa-kernel/src/main/java/org/apache/openjpa/datacache/
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/datacache/
openjpa-project/src/doc/manual/
Author: curtisr7
Date: Tue Feb 16 20:00:38 2010
New Revision: 910667
URL: http://svn.apache.org/viewvc?rev=910667&view=rev
Log:
OPENJPA-1515: Make CacheStatistics configurable.
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/AbstractDataCache.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/CacheStatistics.java
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/datacache/TestStatistics.java
openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_caching.xml
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/AbstractDataCache.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/AbstractDataCache.java?rev=910667&r1=910666&r2=910667&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/AbstractDataCache.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/AbstractDataCache.java Tue Feb 16 20:00:38 2010
@@ -19,12 +19,10 @@
package org.apache.openjpa.datacache;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.BitSet;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -40,8 +38,6 @@
import org.apache.openjpa.lib.util.Localizer;
import org.apache.openjpa.lib.util.concurrent.AbstractConcurrentEventManager;
-import serp.util.Strings;
-
/**
* Abstract {@link DataCache} implementation that provides various
* statistics, logging, and timeout functionality common across cache
@@ -82,6 +78,14 @@
public void setName(String name) {
_name = name;
}
+ public void setEnableStatistics(boolean enable){
+ if(enable == true){
+ stats.enable();
+ }
+ }
+ public void getEnableStatistics(){
+ stats.isEnabled();
+ }
public String getEvictionSchedule() {
return _schedule;
@@ -131,7 +135,9 @@
public boolean contains(Object key) {
DataCachePCData o = getInternal(key);
- stats.newGet(o == null ? null : o.getType(), o != null);
+ if (stats.isEnabled()) {
+ stats.newGet(o == null ? null : o.getType(), o != null);
+ }
if (o != null && o.isTimedOut()) {
o = null;
removeInternal(key);
@@ -167,7 +173,9 @@
else
log.trace(s_loc.get("cache-hit", key));
}
- stats.newGet((o == null) ? null : o.getType(), o != null);
+ if (stats.isEnabled()) {
+ stats.newGet((o == null) ? null : o.getType(), o != null);
+ }
return o;
}
@@ -183,7 +191,9 @@
}
public DataCachePCData put(DataCachePCData data) {
- stats.newPut(data.getType());
+ if (stats.isEnabled()) {
+ stats.newPut(data.getType());
+ }
DataCachePCData o = putInternal(data.getId(), data);
if (log.isTraceEnabled())
log.trace(s_loc.get("cache-put", data.getId()));
@@ -192,7 +202,9 @@
public void update(DataCachePCData data) {
if (recacheUpdates()) {
- stats.newPut(data.getType());
+ if (stats.isEnabled()) {
+ stats.newPut(data.getType());
+ }
putInternal(data.getId(), data);
}
}
@@ -381,7 +393,9 @@
*/
protected void putAllInternal(Collection<DataCachePCData> pcs) {
for (DataCachePCData pc : pcs) {
- stats.newPut(pc.getType());
+ if (stats.isEnabled()) {
+ stats.newPut(pc.getType());
+ }
putInternal(pc.getId(), pc);
}
}
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/CacheStatistics.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/CacheStatistics.java?rev=910667&r1=910666&r2=910667&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/CacheStatistics.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/CacheStatistics.java Tue Feb 16 20:00:38 2010
@@ -119,6 +119,11 @@
public void reset();
/**
+ * Returns whether or not statistics will be collected.
+ */
+ public boolean isEnabled();
+
+ /**
* A default implementation.
*
*/
@@ -129,7 +134,8 @@
private Map<Class, long[]> astats = new HashMap<Class, long[]>();
private Date start = new Date();
private Date since = new Date();
-
+ private boolean enabled = false;
+
private static final int READ = 0;
private static final int HIT = 1;
private static final int WRITE = 2;
@@ -201,6 +207,15 @@
since = new Date();
}
+ public boolean isEnabled() {
+ return enabled;
+ }
+ void enable(){
+ enabled = true;
+ }
+ void disable() {
+ enabled = false;
+ }
void newGet(Class cls, boolean hit) {
cls = (cls == null) ? Object.class : cls;
addSample(cls, READ);
Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/datacache/TestStatistics.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/datacache/TestStatistics.java?rev=910667&r1=910666&r2=910667&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/datacache/TestStatistics.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/datacache/TestStatistics.java Tue Feb 16 20:00:38 2010
@@ -18,6 +18,8 @@
*/
package org.apache.openjpa.persistence.datacache;
+import java.util.Arrays;
+
import javax.persistence.EntityManager;
import org.apache.openjpa.datacache.CacheStatistics;
@@ -40,9 +42,8 @@
private StoreCache cache;
CacheStatistics stats;
public void setUp() {
-
super.setUp(CLEAR_TABLES, CachedPerson.class,
- "openjpa.DataCache", "true",
+ "openjpa.DataCache", "true(EnableStatistics=true)",
"openjpa.QueryCache", "true",
"openjpa.RemoteCommitProvider", "sjvm");
cache = emf.getStoreCache();
@@ -51,36 +52,57 @@
assertNotNull(stats);
em = emf.createEntityManager();
- if (person == null) {
- person = createData();
- }
+ person = createData();
stats.reset();
em.clear();
}
- public CachedPerson createData() {
- em.getTransaction().begin();
- CachedPerson p = new CachedPerson();
- p.setId((int)System.currentTimeMillis());
- em.persist(p);
- em.getTransaction().commit();
- return p;
+ /**
+ * Test that the CacheStatistics is disabled by default.
+ */
+ public void testDefaultSettings() {
+ Object[] props = {"openjpa.DataCache", "true", "openjpa.RemoteCommitProvider", "sjvm"};
+ OpenJPAEntityManagerFactory emf1 = createNamedEMF("second-persistence-unit", props);
+
+ assertFalse(emf1.getStoreCache().getStatistics().isEnabled());
}
/**
* Finding an entity from a clean should hit the L2 cache.
*/
public void testFind() {
+ assertTrue(cache.getStatistics().isEnabled());
Object pid = person.getId();
- int N = 0;
- for (int i = 0; i < N; i++) {
- assertCached(person, pid, !L1Cached, L2Cached);
- long[] before = snapshot();
- CachedPerson p = em.find(CachedPerson.class, pid);
- long[] after = snapshot();
- assertDelta(before, after, 1, 1, 0); //READ:1 HIT:1, WRITE:0
- assertCached(p, pid, L1Cached, L2Cached);
- }
+ assertCached(person, pid, !L1Cached, L2Cached);
+
+ long[] before = snapshot();
+ CachedPerson p = em.find(CachedPerson.class, pid);
+ long[] after = snapshot();
+
+ assertDelta(before, after, 1, 1, 0); // READ:1 HIT:1, WRITE:0
+ assertCached(p, pid, L1Cached, L2Cached);
+
+ }
+
+ public void testMultipleUnits() {
+ String[] props = {"openjpa.DataCache", "true", "openjpa.RemoteCommitProvider", "sjvm"};
+ OpenJPAEntityManagerFactory emf1 = createNamedEMF("test", props);
+ OpenJPAEntityManagerFactory emf2 = createNamedEMF("empty-pu", props);
+ assertNotSame(emf1, emf2);
+ assertNotSame(emf1.getStoreCache(), emf2.getStoreCache());
+ assertNotSame(emf1.getStoreCache().getStatistics(), emf2.getStoreCache().getStatistics());
+ assertNotSame(((StoreCacheImpl)emf1.getStoreCache()).getDelegate(),
+ ((StoreCacheImpl)emf2.getStoreCache()).getDelegate());
+
+ }
+
+ CachedPerson createData() {
+ em.getTransaction().begin();
+ CachedPerson p = new CachedPerson();
+ p.setId((int)System.currentTimeMillis());
+ em.persist(p);
+ em.getTransaction().commit();
+ return p;
}
/**
@@ -121,16 +143,4 @@
System.err.println(msg + stats + " H:" + stats.getHitCount() + " R:" + stats.getReadCount() + " W:" +
stats.getWriteCount());
}
-
- public void testMultipleUnits() {
- String[] props = {"openjpa.DataCache", "true", "openjpa.RemoteCommitProvider", "sjvm"};
- OpenJPAEntityManagerFactory emf1 = createNamedEMF("test", props);
- OpenJPAEntityManagerFactory emf2 = createNamedEMF("empty-pu", props);
- assertNotSame(emf1, emf2);
- assertNotSame(emf1.getStoreCache(), emf2.getStoreCache());
- assertNotSame(emf1.getStoreCache().getStatistics(), emf2.getStoreCache().getStatistics());
- assertNotSame(((StoreCacheImpl)emf1.getStoreCache()).getDelegate(),
- ((StoreCacheImpl)emf2.getStoreCache()).getDelegate());
-
- }
}
Modified: openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_caching.xml
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_caching.xml?rev=910667&r1=910666&r2=910667&view=diff
==============================================================================
--- openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_caching.xml (original)
+++ openjpa/trunk/openjpa-project/src/doc/manual/ref_guide_caching.xml Tue Feb 16 20:00:38 2010
@@ -550,7 +550,17 @@
data cache is available via
<ulink url="../javadoc/org/apache/openjpa/datacache/CacheStatistics.html">
<classname>org.apache.openjpa.datacache.CacheStatistics</classname></ulink>
-interface. You can access this statistics via StoreCache
+interface. The collection of cache statistics is disabled by default and needs to be enabled on a per cache basis. By default
+all counts returned from the CacheStatistics interface will return 0.
+ <example id="ref_guide_cache_enablestats">
+ <title>
+ Configuring CacheStatistics
+ </title>
+ <programlisting>
+<property name="openjpa.DataCache" value="true(EnableStatistics=true)"/>
+</programlisting>
+ </example>
+Once cache statistics are enabled you can access them via StoreCache
<programlisting>
import org.apache.openjpa.datacache.CacheStatistics;
...
@@ -587,6 +597,9 @@
// Resets the statistics.
public void reset();
+
+ // Returns whether or not statistics will be collected.
+ public boolean isEnabled();
}
</programlisting>
Collecting per-class statistics depends on determining the runtime type of a