You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by ar...@apache.org on 2005/12/31 20:02:20 UTC
cvs commit: db-ojb/src/java/org/apache/ojb/broker/cache MaterializationCache.java ObjectCacheDefaultImpl.java ObjectCacheTwoLevelImpl.java
arminw 2005/12/31 11:02:20
Modified: src/java/org/apache/ojb/broker/cache Tag: OJB_1_0_RELEASE
MaterializationCache.java
ObjectCacheDefaultImpl.java
ObjectCacheTwoLevelImpl.java
Log:
minor performance improvement
Revision Changes Path
No revision
No revision
1.1.2.7 +10 -13 db-ojb/src/java/org/apache/ojb/broker/cache/MaterializationCache.java
Index: MaterializationCache.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/cache/MaterializationCache.java,v
retrieving revision 1.1.2.6
retrieving revision 1.1.2.7
diff -u -r1.1.2.6 -r1.1.2.7
--- MaterializationCache.java 21 Dec 2005 22:24:15 -0000 1.1.2.6
+++ MaterializationCache.java 31 Dec 2005 19:02:20 -0000 1.1.2.7
@@ -142,14 +142,8 @@
public Object lookup(Identity oid)
{
Object result = null;
- if(enabledReadCache)
- {
- result = doLocalLookup(oid);
- }
- if(result == null)
- {
- result = cacheDistributor.lookup(oid);
- }
+ if(enabledReadCache) result = doLocalLookup(oid);
+ if(result == null) result = cacheDistributor.lookup(oid);
return result;
}
@@ -175,10 +169,13 @@
*/
public void doLocalClear()
{
- if(log.isDebugEnabled()) log.debug("Clear materialization cache");
- invokeCounter = 0;
- enabledReadCache = false;
- objectBuffer.clear();
+ if(enabledReadCache)
+ {
+ if(log.isDebugEnabled()) log.debug("Clear materialization cache");
+ invokeCounter = 0;
+ enabledReadCache = false;
+ if(objectBuffer.size() > 0) objectBuffer.clear();
+ }
}
public void clear()
1.24.2.8 +19 -9 db-ojb/src/java/org/apache/ojb/broker/cache/ObjectCacheDefaultImpl.java
Index: ObjectCacheDefaultImpl.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/cache/ObjectCacheDefaultImpl.java,v
retrieving revision 1.24.2.7
retrieving revision 1.24.2.8
diff -u -r1.24.2.7 -r1.24.2.8
--- ObjectCacheDefaultImpl.java 21 Dec 2005 22:24:15 -0000 1.24.2.7
+++ ObjectCacheDefaultImpl.java 31 Dec 2005 19:02:20 -0000 1.24.2.8
@@ -138,7 +138,9 @@
* static Map held all cached objects
*/
protected static final Map objectTable = new Hashtable();
+ private static final Object lock = new Object();
private static final ReferenceQueue queue = new ReferenceQueue();
+ private volatile static short counter;
private static long hitCount = 0;
private static long failCount = 0;
@@ -200,7 +202,7 @@
{
//processQueue();
objectTable.clear();
- identitiesInWork.clear();
+ if(identitiesInWork.size() > 0) identitiesInWork.clear();
}
public void doInternalCache(Identity oid, Object obj, int type)
@@ -341,7 +343,7 @@
public void beforeRollback(PBStateEvent event)
{
synchronizeWithTracedObjects();
- identitiesInWork.clear();
+ if(identitiesInWork.size() > 0) identitiesInWork.clear();
}
public void beforeCommit(PBStateEvent event)
@@ -358,7 +360,7 @@
*/
if(!broker.isInTransaction())
{
- identitiesInWork.clear();
+ if(identitiesInWork.size() > 0) identitiesInWork.clear();
}
}
@@ -368,7 +370,7 @@
public void afterCommit(PBStateEvent event)
{
- identitiesInWork.clear();
+ if(identitiesInWork.size() > 0) identitiesInWork.clear();
}
public void afterBegin(PBStateEvent event)
@@ -397,11 +399,19 @@
private void processQueue()
{
- CacheEntry sv;
- while((sv = (CacheEntry) queue.poll()) != null)
+ // TODO: check this code block.
+ if(counter++ > 500)
{
- removeTracedIdentity(sv.getOid());
- objectTable.remove(buildKey(sv.getOid()));
+ counter = 0;
+ synchronized(lock)
+ {
+ CacheEntry sv;
+ while((sv = (CacheEntry) queue.poll()) != null)
+ {
+ removeTracedIdentity(sv.getOid());
+ objectTable.remove(buildKey(sv.getOid()));
+ }
+ }
}
}
1.1.2.17 +22 -11 db-ojb/src/java/org/apache/ojb/broker/cache/Attic/ObjectCacheTwoLevelImpl.java
Index: ObjectCacheTwoLevelImpl.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/cache/Attic/ObjectCacheTwoLevelImpl.java,v
retrieving revision 1.1.2.16
retrieving revision 1.1.2.17
diff -u -r1.1.2.16 -r1.1.2.17
--- ObjectCacheTwoLevelImpl.java 21 Dec 2005 22:24:15 -0000 1.1.2.16
+++ ObjectCacheTwoLevelImpl.java 31 Dec 2005 19:02:20 -0000 1.1.2.17
@@ -118,6 +118,7 @@
// private boolean enabledReadCache;
private int invokeCounter;
private ReferenceQueue queue = new ReferenceQueue();
+ private short counter;
private ObjectCacheInternal applicationCache;
private CopyStrategy copyStrategy;
private PersistenceBrokerImpl broker;
@@ -173,10 +174,10 @@
{
applicationCacheName = DEF_APP_CACHE;
}
-
+
String forceProxyValue = prop.getProperty(FORCE_PROXIES, "false").trim();
forceProxies = Boolean.valueOf(forceProxyValue).booleanValue();
-
+
if (forceProxies && broker.getProxyFactory().interfaceRequiredForProxyGeneration()){
log.warn("'" + FORCE_PROXIES + "' is set to true, however a ProxyFactory implementation " +
"[" + broker.getProxyFactory().getClass().getName() +"] " +
@@ -184,7 +185,7 @@
"that all persistent objects implement an interface, or change the ProxyFactory setting to a dynamic " +
"proxy generator (like ProxyFactoryCGLIBImpl).");
}
-
+
Class[] type = new Class[]{PersistenceBroker.class, Properties.class};
Object[] objects = new Object[]{broker, prop};
try
@@ -221,7 +222,7 @@
/**
* Returns the application cache that this 2-level cache uses.
- *
+ *
* @return The application cache
*/
public ObjectCacheInternal getApplicationCache()
@@ -410,7 +411,7 @@
}else{
broker.getReferenceBroker().retrieveReferences(target, cld, forced);
broker.getReferenceBroker().retrieveCollections(target, cld, forced);
- }
+ }
}
/**
@@ -477,10 +478,14 @@
*/
private void processQueue()
{
- CacheEntry sv;
- while((sv = (CacheEntry) queue.poll()) != null)
+ if(counter++ > 500)
{
- sessionCache.remove(sv.oid);
+ counter = 0;
+ CacheEntry sv;
+ while((sv = (CacheEntry) queue.poll()) != null)
+ {
+ sessionCache.remove(sv.oid);
+ }
}
}
@@ -636,7 +641,7 @@
// copy the field value
if(value != null) value = fld.getJdbcType().getFieldType().copy(value);
// now make a field-conversion to java-type, because we only
- // the sql type of the field
+ // know the sql type of the field
value = fld.getFieldConversion().sqlToJava(value);
// set the copied field value in new object
fld.getPersistentField().set(target, value);
@@ -653,12 +658,18 @@
FieldDescriptor[] flds = cld.getFieldDescriptor(true);
FieldDescriptor fld;
int length = flds.length;
+ /*
+ TODO: in further OJB versions enhance FieldConversion with a FieldConversion#copy()
+ method. In this case we can use copies of the java fields instead of tear down fields to
+ sql-level for copy. This could speed up two-level cache.
+ */
for(int i = 0; i < length; i++)
{
fld = flds[i];
// get the value
Object value = fld.getPersistentField().get(obj);
- // convert value to a supported sql type
+ // convert value to a supported sql type, because we only
+ // can copy this type
value = fld.getFieldConversion().javaToSql(value);
// copy the sql type
value = fld.getJdbcType().getFieldType().copy(value);
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org