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 2006/11/15 05:20:30 UTC

svn commit: r475115 - in /incubator/openjpa/trunk: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/conf/ openjpa-kernel/src/main/java/org/apache/openjpa/conf/ openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ openjpa-lib/src/main/resources/org/...

Author: pcl
Date: Tue Nov 14 20:20:30 2006
New Revision: 475115

URL: http://svn.apache.org/viewvc?view=rev&rev=475115
Log:
invoke the close() callback at the beginning of ConfigurationImpl.close(); change other ConfigurationImpl subtypes to use preClose() instead of now-final close(); add test case for close callbacks.

Modified:
    incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/conf/JDBCConfigurationImpl.java
    incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java
    incubator/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ConfigurationImpl.java
    incubator/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ProductDerivations.java
    incubator/openjpa/trunk/openjpa-lib/src/main/resources/org/apache/openjpa/lib/conf/localizer.properties
    incubator/openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/conf/test/ConfigurationTestProductDerivation.java
    incubator/openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/conf/test/TestConfigurationImpl.java

Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/conf/JDBCConfigurationImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/conf/JDBCConfigurationImpl.java?view=diff&rev=475115&r1=475114&r2=475115
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/conf/JDBCConfigurationImpl.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/conf/JDBCConfigurationImpl.java Tue Nov 14 20:20:30 2006
@@ -853,7 +853,7 @@
     /**
      * Free the data sources.
      */
-    public void close() {
+    protected void preClose() {
         if (dataSource != null) {
             getDBDictionaryInstance().closeDataSource(dataSource);
             connectionFactory.set(null, true); // so super doesn't close it
@@ -862,7 +862,7 @@
             getDBDictionaryInstance().closeDataSource(dataSource);
             connectionFactory2.set(null, true); // so super doesn't close it
         }
-        super.close();
+        super.preClose();
     }
 
     protected boolean isInvalidProperty(String propName) {

Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java?view=diff&rev=475115&r1=475114&r2=475115
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/conf/OpenJPAConfigurationImpl.java Tue Nov 14 20:20:30 2006
@@ -1411,10 +1411,10 @@
         getRemoteCommitEventManager();
     }
 
-    public void close() {
+    protected void preClose() {
         ImplHelper.close(metaRepository);
         ImplHelper.close(remoteEventManager);
-        super.close();
+        super.preClose();
     }
 
     public Log getConfigurationLog() {

Modified: incubator/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ConfigurationImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ConfigurationImpl.java?view=diff&rev=475115&r1=475114&r2=475115
==============================================================================
--- incubator/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ConfigurationImpl.java (original)
+++ incubator/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ConfigurationImpl.java Tue Nov 14 20:20:30 2006
@@ -329,7 +329,11 @@
     /**
      * Closes all closeable values and plugins.
      */
-    public void close() {
+    public final void close() {
+        ProductDerivations.beforeClose(this);
+        
+        preClose();
+        
         ObjectValue val;
         for (int i = 0; i < _vals.size(); i++) {
             if (_vals.get(i) instanceof Closeable) {
@@ -349,6 +353,16 @@
                 }
             }
         }
+    }
+    
+    /**
+     * Invoked by final method {@link #close} after invoking the 
+     * {@link ProductDerivation#beforeConfigurationClose} callbacks
+     * but before performing internal close operations.
+     * 
+     * @since 0.9.7
+     */
+    protected void preClose() {
     }
 
     ///////////////////////////

Modified: incubator/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ProductDerivations.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ProductDerivations.java?view=diff&rev=475115&r1=475114&r2=475115
==============================================================================
--- incubator/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ProductDerivations.java (original)
+++ incubator/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ProductDerivations.java Tue Nov 14 20:20:30 2006
@@ -151,6 +151,22 @@
     }
 
     /**
+     * Called as the first step of a Configuration's close() method. 
+     * Exceptions are swallowed.
+     * 
+     * @since 0.9.7
+     */
+    public static void beforeClose(Configuration conf) {
+        for (int i = 0; i < _derivations.length; i++) {
+            try {
+                _derivations[i].beforeConfigurationClose(conf);
+            } catch (Exception e) {
+                conf.getConfigurationLog().warn(_loc.get("before-close-ex"), e);
+            }
+        }
+    }
+
+    /**
      * Load the given given resource, or return false if it is not a resource
      * this provider understands. The given class loader may be null.
      *

Modified: incubator/openjpa/trunk/openjpa-lib/src/main/resources/org/apache/openjpa/lib/conf/localizer.properties
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-lib/src/main/resources/org/apache/openjpa/lib/conf/localizer.properties?view=diff&rev=475115&r1=475114&r2=475115
==============================================================================
--- incubator/openjpa/trunk/openjpa-lib/src/main/resources/org/apache/openjpa/lib/conf/localizer.properties (original)
+++ incubator/openjpa/trunk/openjpa-lib/src/main/resources/org/apache/openjpa/lib/conf/localizer.properties Tue Nov 14 20:20:30 2006
@@ -84,6 +84,8 @@
     is an overly-restrictive security manager.\n{1}
 bad-product-derivations: Some product derivations are being skipped. For \
     information about product derivation status, run:\njava {0}
+before-close-ex: An exception occurred during ProductDerivations.beforeClose().\
+	This exception will be ignored, and is logged along with this message.
 
 Log-name: Log factory
 Log-desc: LogFactory and configuration

Modified: incubator/openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/conf/test/ConfigurationTestProductDerivation.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/conf/test/ConfigurationTestProductDerivation.java?view=diff&rev=475115&r1=475114&r2=475115
==============================================================================
--- incubator/openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/conf/test/ConfigurationTestProductDerivation.java (original)
+++ incubator/openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/conf/test/ConfigurationTestProductDerivation.java Tue Nov 14 20:20:30 2006
@@ -22,6 +22,7 @@
 import java.util.Properties;
 
 import org.apache.openjpa.lib.conf.AbstractProductDerivation;
+import org.apache.openjpa.lib.conf.Configuration;
 import org.apache.openjpa.lib.conf.ConfigurationProvider;
 import org.apache.openjpa.lib.conf.MapConfigurationProvider;
 import org.apache.openjpa.lib.conf.ProductDerivation;
@@ -37,8 +38,14 @@
 public class ConfigurationTestProductDerivation 
     extends AbstractProductDerivation {
     
+    public static boolean closed = false;
+
     public int getType() {
         return ProductDerivation.TYPE_PRODUCT;
+    }
+    
+    public void beforeConfigurationClose(Configuration conf) {
+        closed = true;
     }
 
     public ConfigurationProvider loadGlobals(ClassLoader loader)

Modified: incubator/openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/conf/test/TestConfigurationImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/conf/test/TestConfigurationImpl.java?view=diff&rev=475115&r1=475114&r2=475115
==============================================================================
--- incubator/openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/conf/test/TestConfigurationImpl.java (original)
+++ incubator/openjpa/trunk/openjpa-lib/src/test/java/org/apache/openjpa/lib/conf/test/TestConfigurationImpl.java Tue Nov 14 20:20:30 2006
@@ -234,6 +234,13 @@
         assertEquals("java.lang.StringBuffer", copy2.getPluginKey());
         assertEquals("", copy2.getPluginKeyInstance().toString());
     }
+    
+    public void testProductDerivationCloseCallback() {
+        // toggle the static. This will be reset by the close invocation.
+        ConfigurationTestProductDerivation.closed = false;
+        _conf.close();
+        assertTrue(ConfigurationTestProductDerivation.closed);
+    }
 
     public static void main(String[] args) {
         main();