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;
 
     /**