You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pc...@apache.org on 2007/07/03 16:26:10 UTC
svn commit: r552850 - in /openjpa/trunk:
openjpa-kernel/src/main/java/org/apache/openjpa/datacache/
openjpa-kernel/src/main/java/org/apache/openjpa/event/
openjpa-lib/src/main/java/org/apache/openjpa/lib/util/concurrent/
Author: pcl
Date: Tue Jul 3 07:26:09 2007
New Revision: 552850
URL: http://svn.apache.org/viewvc?view=rev&rev=552850
Log:
Guarantee that remote commit events are fired against OpenJPA internal data structures before externally-registered listeners. This means that externally-registered listeners can rely on the OpenJPA data structures being up-to-date by the time that they are fired.
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/ConcurrentDataCache.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/ConcurrentQueryCache.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/RemoteCommitEventManager.java
openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/concurrent/AbstractConcurrentEventManager.java
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/ConcurrentDataCache.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/ConcurrentDataCache.java?view=diff&rev=552850&r1=552849&r2=552850
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/ConcurrentDataCache.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/ConcurrentDataCache.java Tue Jul 3 07:26:09 2007
@@ -89,7 +89,7 @@
public void initialize(DataCacheManager mgr) {
super.initialize(mgr);
- conf.getRemoteCommitEventManager().addListener(this);
+ conf.getRemoteCommitEventManager().addInternalListener(this);
}
public void unpinAll(Class cls, boolean subs) {
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/ConcurrentQueryCache.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/ConcurrentQueryCache.java?view=diff&rev=552850&r1=552849&r2=552850
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/ConcurrentQueryCache.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/ConcurrentQueryCache.java Tue Jul 3 07:26:09 2007
@@ -90,7 +90,7 @@
public void initialize(DataCacheManager mgr) {
super.initialize(mgr);
- conf.getRemoteCommitEventManager().addListener(this);
+ conf.getRemoteCommitEventManager().addInternalListener(this);
}
public void writeLock() {
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/RemoteCommitEventManager.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/RemoteCommitEventManager.java?view=diff&rev=552850&r1=552849&r2=552850
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/RemoteCommitEventManager.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/RemoteCommitEventManager.java Tue Jul 3 07:26:09 2007
@@ -93,6 +93,21 @@
_transmitPersIds = transmit;
}
+ /**
+ * Adds an OpenJPA-internal listener to this RemoteCommitEventManager.
+ * Listeners so registered will be fired before any that are registered
+ * via {@link #addListener}. This means that the external listeners can
+ * rely on internal caches and data structures being up-to-date by the
+ * time that they are invoked.
+ *
+ * @since 1.0.0
+ */
+ public void addInternalListener(RemoteCommitListener listen) {
+ if (_provider == null)
+ throw new UserException(_loc.get("no-provider"));
+ ((List) _listeners).add(0, listen);
+ }
+
public void addListener(RemoteCommitListener listen) {
if (_provider == null)
throw new UserException(_loc.get("no-provider"));
@@ -120,6 +135,8 @@
/**
* Fire an event to local listeners only notifying them of a detected
* stale record.
+ *
+ * @since 1.0.0
*/
public void fireLocalStaleNotification(Object oid) {
RemoteCommitEvent ev = new RemoteCommitEvent(
Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/concurrent/AbstractConcurrentEventManager.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/concurrent/AbstractConcurrentEventManager.java?view=diff&rev=552850&r1=552849&r2=552850
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/concurrent/AbstractConcurrentEventManager.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/concurrent/AbstractConcurrentEventManager.java Tue Jul 3 07:26:09 2007
@@ -39,7 +39,7 @@
private static Exception[] EMPTY_EXCEPTIONS = new Exception[0];
- private final Collection _listeners;
+ protected final Collection _listeners;
private boolean _failFast = false;
/**