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/06/29 13:04:52 UTC

svn commit: r551849 - in /openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa: event/BrokerFactoryListener.java kernel/AbstractBrokerFactory.java kernel/BrokerFactory.java kernel/DelegatingBrokerFactory.java

Author: pcl
Date: Fri Jun 29 04:04:51 2007
New Revision: 551849

URL: http://svn.apache.org/viewvc?view=rev&rev=551849
Log:
OPENJPA-262. Added transaction callback registry to BrokerFactory as well, to parallel lifecycle callback structure

Modified:
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/BrokerFactoryListener.java
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerFactory.java
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingBrokerFactory.java

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/BrokerFactoryListener.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/BrokerFactoryListener.java?view=diff&rev=551849&r1=551848&r2=551849
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/BrokerFactoryListener.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/BrokerFactoryListener.java Fri Jun 29 04:04:51 2007
@@ -28,7 +28,7 @@
 public interface BrokerFactoryListener {
 
     /**
-     * Invoked after a {@link AbstractBrokerFactory} has been fully created.
+     * Invoked after a {@link BrokerFactory} has been fully created.
      * This happens after the factory has been made read-only.
      */
     public void afterBrokerFactoryCreate(BrokerFactoryEvent event);

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java?view=diff&rev=551849&r1=551848&r2=551849
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/AbstractBrokerFactory.java Fri Jun 29 04:04:51 2007
@@ -26,6 +26,8 @@
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Properties;
+import java.util.LinkedList;
+import java.util.List;
 import javax.transaction.Status;
 import javax.transaction.Synchronization;
 import javax.transaction.Transaction;
@@ -91,6 +93,9 @@
     // lifecycle listeners to pass to each broker
     private transient Map _lifecycleListeners = null;
 
+    // transaction listeners to pass to each broker
+    private transient List _transactionListeners = null;
+
     /**
      * Return the pooled factory matching the given configuration, or null
      * if none.
@@ -174,7 +179,7 @@
 
                 broker = newBrokerImpl(user, pass);
                 broker.initialize(this, dsm, managed, connRetainMode);
-                addLifecycleListeners(broker);
+                addListeners(broker);
 
                 // if we're using remote events, register the event manager so
                 // that it can broadcast commit notifications from the broker
@@ -198,16 +203,24 @@
     /**
      * Add factory-registered lifecycle listeners to the broker.
      */
-    protected void addLifecycleListeners(BrokerImpl broker) {
-        if (_lifecycleListeners == null || _lifecycleListeners.isEmpty())
-            return;
+    protected void addListeners(BrokerImpl broker) {
+        if (_lifecycleListeners != null && !_lifecycleListeners.isEmpty()) {
+            Map.Entry entry;
+            for (Iterator itr = _lifecycleListeners.entrySet().iterator();
+                itr.hasNext();) {
+                entry = (Map.Entry) itr.next();
+                broker.addLifecycleListener(entry.getKey(), (Class[])
+                    entry.getValue());
+            }
+        }
 
-        Map.Entry entry;
-        for (Iterator itr = _lifecycleListeners.entrySet().iterator();
-            itr.hasNext();) {
-            entry = (Map.Entry) itr.next();
-            broker.addLifecycleListener(entry.getKey(), (Class[])
-                entry.getValue());
+        if (_transactionListeners != null && !_transactionListeners.isEmpty()) {
+            Map.Entry entry;
+            for (Iterator itr = _transactionListeners.iterator();
+                itr.hasNext(); ) {
+                entry = (Map.Entry) itr.next();
+                broker.addTransactionListener(entry.getKey());
+            }
         }
     }
 
@@ -269,6 +282,29 @@
             assertOpen();
             if (_lifecycleListeners != null)
                 _lifecycleListeners.remove(listener);
+        } finally {
+            unlock();
+        }
+    }
+
+    public void addTransactionListener(Object listener) {
+        lock();
+        try {
+            assertOpen();
+            if (_transactionListeners == null)
+                _transactionListeners = new LinkedList();
+            _transactionListeners.add(listener);
+        } finally {
+            unlock();
+        }
+    }
+
+    public void removeTransactionListener(Object listener) {
+        lock();
+        try {
+            assertOpen();
+            if (_transactionListeners != null)
+                _transactionListeners.remove(listener);
         } finally {
             unlock();
         }

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerFactory.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerFactory.java?view=diff&rev=551849&r1=551848&r2=551849
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerFactory.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerFactory.java Fri Jun 29 04:04:51 2007
@@ -83,6 +83,23 @@
     public void removeLifecycleListener(Object listener);
 
     /**
+     * Register a listener for transaction-related events on the specified
+     * classes. It will be registered with all {@link Broker}s created
+     * from this instance moving forward.
+     *
+     * @since 1.0.0
+     */
+    public void addTransactionListener(Object listener);
+
+    /**
+     * Remove a listener for transaction-related events. It will no longer
+     * be registered with new {@link Broker}s created from this instance.
+     *
+     * @since 1.0.0
+     */
+    public void removeTransactionListener(Object listener);
+
+    /**
      * Close the factory.
      */
     public void close();

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingBrokerFactory.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingBrokerFactory.java?view=diff&rev=551849&r1=551848&r2=551849
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingBrokerFactory.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/DelegatingBrokerFactory.java Fri Jun 29 04:04:51 2007
@@ -162,6 +162,22 @@
         }
     }
 
+    public void addTransactionListener(Object listener) {
+        try {
+            _factory.addTransactionListener(listener);
+        } catch (RuntimeException re) {
+            throw translate(re);
+        }
+    }
+
+    public void removeTransactionListener(Object listener) {
+        try {
+            _factory.removeTransactionListener(listener);
+        } catch (RuntimeException re) {
+            throw translate(re);
+        }
+    }
+
     public void close() {
         try {
             _factory.close();