You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pp...@apache.org on 2008/09/13 22:08:53 UTC

svn commit: r695021 - in /openjpa/branches/sql-cache/openjpa-kernel/src/main: java/org/apache/openjpa/kernel/PreparedQueryCacheImpl.java resources/org/apache/openjpa/kernel/localizer.properties

Author: ppoddar
Date: Sat Sep 13 13:08:52 2008
New Revision: 695021

URL: http://svn.apache.org/viewvc?rev=695021&view=rev
Log:
Add logging to PreparedQueryCache

Modified:
    openjpa/branches/sql-cache/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PreparedQueryCacheImpl.java
    openjpa/branches/sql-cache/openjpa-kernel/src/main/resources/org/apache/openjpa/kernel/localizer.properties

Modified: openjpa/branches/sql-cache/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PreparedQueryCacheImpl.java
URL: http://svn.apache.org/viewvc/openjpa/branches/sql-cache/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PreparedQueryCacheImpl.java?rev=695021&r1=695020&r2=695021&view=diff
==============================================================================
--- openjpa/branches/sql-cache/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PreparedQueryCacheImpl.java (original)
+++ openjpa/branches/sql-cache/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/PreparedQueryCacheImpl.java Sat Sep 13 13:08:52 2008
@@ -28,7 +28,11 @@
 import java.util.concurrent.locks.ReentrantLock;
 
 import org.apache.commons.lang.StringUtils;
+import org.apache.openjpa.conf.OpenJPAConfiguration;
 import org.apache.openjpa.lib.conf.Configuration;
+import org.apache.openjpa.lib.log.Log;
+import org.apache.openjpa.lib.log.LogFactory;
+import org.apache.openjpa.lib.util.Localizer;
 
 /**
  * An implementation of the cache of {@link PreparedQuery prepared queries}. 
@@ -41,7 +45,7 @@
 public class PreparedQueryCacheImpl implements PreparedQueryCache {
 	private static final String PATTERN_SEPARATOR = "\\;";
 	private static final String EXLUDED_BY_USER = "Excluded by user";
-	
+
 	// Key: Query identifier 
 	private final Map<String, PreparedQuery> _delegate;
 	// Key: Query identifier Value: Reason why excluded
@@ -49,6 +53,8 @@
 	private List<String> _exclusionPatterns;
 	private final QueryStatistics _stats;
 	private ReentrantLock _lock = new ReentrantLock();
+	private Log _log;
+	private Localizer _loc = Localizer.forPackage(PreparedQueryCacheImpl.class);
 
 	public PreparedQueryCacheImpl() {
 		_delegate = new HashMap<String, PreparedQuery>();
@@ -78,13 +84,19 @@
 		lock();
 		try {
 			String id = q.getIdentifier();
-			if (isCachable(id) == Boolean.FALSE)
+			if (isCachable(id) == Boolean.FALSE) {
+				if (_log.isWarnEnabled())
+					_log.warn(_loc.get("prepared-query-not-cachable", id));
 				return false;
+			}
 			String pattern = getMatchedExclusionPattern(id);
 			if (pattern != null) {
 				markUncachable(q.getIdentifier(), pattern);
 				return false;
 			}
+			if (_log.isTraceEnabled())
+				_log.trace(_loc.get("prepared-query-cache", q.getIdentifier(), 
+					q.getDatastoreAction()));
 			_delegate.put(q.getIdentifier(), q);
 			return true;
 		} finally {
@@ -95,6 +107,8 @@
 	public boolean invalidate(String id) {
 		lock();
 		try {
+			if (_log.isTraceEnabled())
+				_log.trace(_loc.get("prepared-query-invalidate", id));
 			return _delegate.remove(id) != null;
 		} finally {
 			unlock();
@@ -127,11 +141,19 @@
 		return markUncachable(id, EXLUDED_BY_USER);
 	}
 	
-	private PreparedQuery markUncachable(String id, String pattern) {
+	private PreparedQuery markUncachable(String id, String reason) {
 		lock();
 		try {
-			if (_uncachables.get(id) != EXLUDED_BY_USER)
-				_uncachables.put(id, pattern);
+			boolean excludedByUser = _uncachables.get(id) == EXLUDED_BY_USER;
+			if (!excludedByUser)
+				_uncachables.put(id, reason);
+			if (_log.isInfoEnabled()) {
+				if (excludedByUser) 
+					_log.info(_loc.get("prepared-query-uncache-strong", id));
+				else 
+					_log.info(_loc.get("prepared-query-uncache-weak", id, 
+						reason));
+			}
 			return _delegate.remove(id);
 		} finally {
 			unlock();
@@ -174,6 +196,9 @@
 			_exclusionPatterns.add(pattern);
 			Collection<String> invalidKeys = getMatchedKeys(pattern, 
 					_delegate.keySet());
+			if (!invalidKeys.isEmpty() && _log.isInfoEnabled())
+				_log.info(_loc.get("prepared-query-add-pattern", pattern, 
+					invalidKeys.size(), invalidKeys));
 			for (String invalidKey : invalidKeys)
 				markUncachable(invalidKey, pattern);
 		} finally {
@@ -192,8 +217,11 @@
 			if (_exclusionPatterns == null)
 				return;
 			_exclusionPatterns.remove(pattern);
-			Collection<String> rebornKeys = getMatchedKeys(pattern, _uncachables);
-			for (String rebornKey : rebornKeys)
+			Collection<String> reborns = getMatchedKeys(pattern, _uncachables);
+			if (!reborns.isEmpty() && _log.isInfoEnabled())
+				_log.info(_loc.get("prepared-query-remove-pattern", pattern, 
+					reborns.size(), reborns));
+			for (String rebornKey : reborns)
 				_uncachables.remove(rebornKey);
 		} finally {
 			unlock();
@@ -268,6 +296,7 @@
 	// Configurable contract
 	//-------------------------------------------------------
     public void setConfiguration(Configuration conf) {
+    	_log = conf.getLog(OpenJPAConfiguration.LOG_RUNTIME);
     }
 
     public void startConfiguration() {

Modified: openjpa/branches/sql-cache/openjpa-kernel/src/main/resources/org/apache/openjpa/kernel/localizer.properties
URL: http://svn.apache.org/viewvc/openjpa/branches/sql-cache/openjpa-kernel/src/main/resources/org/apache/openjpa/kernel/localizer.properties?rev=695021&r1=695020&r2=695021&view=diff
==============================================================================
--- openjpa/branches/sql-cache/openjpa-kernel/src/main/resources/org/apache/openjpa/kernel/localizer.properties (original)
+++ openjpa/branches/sql-cache/openjpa-kernel/src/main/resources/org/apache/openjpa/kernel/localizer.properties Sat Sep 13 13:08:52 2008
@@ -404,4 +404,17 @@
 	bound parameters with following values "{3}". This can happen if you have \
 	declared but missed to bind values for one or more parameters.
 query-execution-error: Failed to execute query "{0}". Check the query syntax \
-	for correctness. See nested exception for details. 
\ No newline at end of file
+	for correctness. See nested exception for details. 
+prepared-query-cache: Adding query "{0}" to prepared query cache. The target \
+	database query is "{1}".
+prepared-query-not-cachable: Query "{0}" can not be cached.
+prepared-query-invalidate: Prepared Query "{0}" is invalidated 
+prepared-query-uncache-strong: Query "{0}" is marked permanently not to be \
+	cached.   
+prepared-query-uncache-weak: Query "{0}" is marked not to be cached because it \
+	matched exclusion pattern "{1}". This query can be cached if the exclusion \
+	pattern is removed later.
+prepared-query-add-pattern: Added exclusion pattern "{0}" which has removed \
+	following {1} prepared queries from the cache: "{2}"
+prepared-query-remove-pattern: Removed exclusion pattern "{0}" which has made \
+	following {1} queries again possible to be cached: "{2}"
\ No newline at end of file