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 00:42:44 UTC

svn commit: r475059 - in /incubator/openjpa/trunk: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/ openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/ openjpa-kernel/src/main/ja...

Author: pcl
Date: Tue Nov 14 15:42:42 2006
New Revision: 475059

URL: http://svn.apache.org/viewvc?view=rev&rev=475059
Log:
made a number of configuration-related classes serializable to facilitate alternate means of configuration population; moved away from a couple more usages of commons collections LinkedMap; added new lifecycle callback to ProductDerivation interface

Modified:
    incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/NativeJDBCSeq.java
    incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/TableJDBCSeq.java
    incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ClassMapping.java
    incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/Joinable.java
    incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingDefaultsImpl.java
    incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingInfo.java
    incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingRepository.java
    incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/NoneMappingDefaults.java
    incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/Strategy.java
    incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/StrategyInstaller.java
    incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ValueHandler.java
    incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ValueMapping.java
    incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ValueMappingImpl.java
    incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/ColumnIO.java
    incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/DynamicSchemaFactory.java
    incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/ForeignKey.java
    incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/LazySchemaFactory.java
    incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/NameSet.java
    incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/ReferenceCounter.java
    incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Schema.java
    incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Table.java
    incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/BeanLifecycleCallbacks.java
    incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/LifecycleCallbacks.java
    incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/MethodLifecycleCallbacks.java
    incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractMetaDataFactory.java
    incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java
    incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/Extensions.java
    incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/FetchGroup.java
    incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/FieldMetaData.java
    incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/InheritanceComparator.java
    incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/LifecycleMetaData.java
    incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java
    incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/Order.java
    incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/QueryMetaData.java
    incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/SequenceMetaData.java
    incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ValueMetaData.java
    incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ValueMetaDataImpl.java
    incubator/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/AbstractProductDerivation.java
    incubator/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ProductDerivation.java

Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/NativeJDBCSeq.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/NativeJDBCSeq.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/NativeJDBCSeq.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/NativeJDBCSeq.java Tue Nov 14 15:42:42 2006
@@ -196,7 +196,7 @@
             : new Object[]{ name };
         _select = MessageFormat.format(_format, subs);
     }
-
+    
     protected Object nextInternal(JDBCStore store, ClassMapping mapping)
         throws SQLException {
         Connection conn = getConnection(store);

Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/TableJDBCSeq.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/TableJDBCSeq.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/TableJDBCSeq.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/TableJDBCSeq.java Tue Nov 14 15:42:42 2006
@@ -15,6 +15,7 @@
  */
 package org.apache.openjpa.jdbc.kernel;
 
+import java.io.Serializable;
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
@@ -69,8 +70,8 @@
     private static final Localizer _loc = Localizer.forPackage
         (TableJDBCSeq.class);
 
-    private JDBCConfiguration _conf = null;
-    private Log _log = null;
+    private transient JDBCConfiguration _conf = null;
+    private transient Log _log = null;
     private int _alloc = 50;
     private final Status _stat = new Status();
 
@@ -188,7 +189,7 @@
     public void endConfiguration() {
         buildTable();
     }
-
+    
     public void addSchema(ClassMapping mapping, SchemaGroup group) {
         // table already exists?
         if (group.isKnownTable(_table))
@@ -624,7 +625,8 @@
     /**
      * Helper struct to hold status information.
      */
-    protected static class Status {
+    protected static class Status
+        implements Serializable {
 
         public long seq = 1L;
         public long max = 0L;

Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ClassMapping.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ClassMapping.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ClassMapping.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ClassMapping.java Tue Nov 14 15:42:42 2006
@@ -21,13 +21,12 @@
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Iterator;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.commons.collections.set.ListOrderedSet;
 import org.apache.openjpa.enhance.PersistenceCapable;
 import org.apache.openjpa.jdbc.kernel.JDBCFetchConfiguration;
 import org.apache.openjpa.jdbc.kernel.JDBCStore;
@@ -621,8 +620,7 @@
                     _assignMaps = subs;
             } else {
                 int size = (int) (subs.length * 1.33 + 2);
-                Set independent = ListOrderedSet.decorate(new HashSet(size),
-                    new ArrayList(subs.length + 1));
+                Set independent = new LinkedHashSet(size);
                 if (isMapped())
                     independent.add(this);
                 independent.addAll(Arrays.asList(subs));

Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/Joinable.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/Joinable.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/Joinable.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/Joinable.java Tue Nov 14 15:42:42 2006
@@ -15,6 +15,7 @@
  */
 package org.apache.openjpa.jdbc.meta;
 
+import java.io.Serializable;
 import java.sql.SQLException;
 
 import org.apache.openjpa.jdbc.kernel.JDBCStore;
@@ -38,7 +39,8 @@
  *
  * @author Abe White
  */
-public interface Joinable {
+public interface Joinable 
+    extends Serializable {
 
     /**
      * Return the field index of this joinable, or -1 if not a field.

Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingDefaultsImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingDefaultsImpl.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingDefaultsImpl.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingDefaultsImpl.java Tue Nov 14 15:42:42 2006
@@ -44,7 +44,7 @@
 public class MappingDefaultsImpl
     implements MappingDefaults, Configurable {
 
-    protected DBDictionary dict = null;
+    protected transient DBDictionary dict = null;
     private String _baseClassStrategy = null;
     private String _subclassStrategy = null;
     private String _versionStrategy = null;

Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingInfo.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingInfo.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingInfo.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingInfo.java Tue Nov 14 15:42:42 2006
@@ -15,6 +15,7 @@
  */
 package org.apache.openjpa.jdbc.meta;
 
+import java.io.Serializable;
 import java.sql.Types;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -47,7 +48,8 @@
  *
  * @author Abe White
  */
-public abstract class MappingInfo {
+public abstract class MappingInfo
+    implements Serializable {
 
     public static final int JOIN_NONE = 0;
     public static final int JOIN_FORWARD = 1;

Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingRepository.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingRepository.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingRepository.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/MappingRepository.java Tue Nov 14 15:42:42 2006
@@ -65,6 +65,7 @@
 import org.apache.openjpa.jdbc.schema.SchemaGroup;
 import org.apache.openjpa.jdbc.sql.DBDictionary;
 import org.apache.openjpa.jdbc.sql.JoinSyntaxes;
+import org.apache.openjpa.lib.conf.Configurable;
 import org.apache.openjpa.lib.conf.Configurations;
 import org.apache.openjpa.lib.util.Localizer;
 import org.apache.openjpa.meta.ClassMetaData;
@@ -94,8 +95,9 @@
             "org.apache.openjpa.jdbc.meta.strats.EnumValueHandler");
     }
 
-    private DBDictionary _dict = null;
-    private MappingDefaults _defaults = null;
+    private transient DBDictionary _dict = null;
+    private transient MappingDefaults _defaults = null;
+    
     private Map _results = new HashMap(); // object->queryresultmapping
     private SchemaGroup _schema = null;
     private StrategyInstaller _installer = null;
@@ -1158,7 +1160,7 @@
                 return NoneVersionStrategy.getInstance();
         }
     }
-
+    
     public void endConfiguration()
     {
         super.endConfiguration();
@@ -1167,5 +1169,10 @@
         _dict = conf.getDBDictionaryInstance();
         if (_defaults == null)
             _defaults = conf.getMappingDefaultsInstance();
+        if (_schema != null && _schema instanceof Configurable) {
+            ((Configurable) _schema).setConfiguration(conf);
+            ((Configurable) _schema).startConfiguration();
+            ((Configurable) _schema).endConfiguration();
+        }            
     }
-}
+}
\ No newline at end of file

Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/NoneMappingDefaults.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/NoneMappingDefaults.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/NoneMappingDefaults.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/NoneMappingDefaults.java Tue Nov 14 15:42:42 2006
@@ -21,6 +21,7 @@
 import org.apache.openjpa.jdbc.schema.Schema;
 import org.apache.openjpa.jdbc.schema.Table;
 import org.apache.openjpa.jdbc.schema.Unique;
+
 import serp.util.Strings;
 
 /**

Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/Strategy.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/Strategy.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/Strategy.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/Strategy.java Tue Nov 14 15:42:42 2006
@@ -15,6 +15,7 @@
  */
 package org.apache.openjpa.jdbc.meta;
 
+import java.io.Serializable;
 import java.sql.SQLException;
 
 import org.apache.openjpa.jdbc.kernel.JDBCStore;
@@ -28,7 +29,8 @@
  * @author Abe White
  * @since 0.4.0
  */
-public interface Strategy {
+public interface Strategy 
+    extends Serializable {
 
     /**
      * Return the alias of this strategy. For custom strategies, return the

Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/StrategyInstaller.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/StrategyInstaller.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/StrategyInstaller.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/StrategyInstaller.java Tue Nov 14 15:42:42 2006
@@ -15,7 +15,7 @@
  */
 package org.apache.openjpa.jdbc.meta;
 
-import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
+import java.io.Serializable;
 
 /**
  * Installs mapping strategies.
@@ -24,9 +24,9 @@
  * @nojavadoc
  * @since 0.4.0
  */
-public abstract class StrategyInstaller {
+public abstract class StrategyInstaller 
+    implements Serializable {
 
-    protected final JDBCConfiguration conf;
     protected final MappingRepository repos;
 
     /**
@@ -34,7 +34,6 @@
      */
     public StrategyInstaller(MappingRepository repos) {
         this.repos = repos;
-        this.conf = (JDBCConfiguration) repos.getConfiguration();
     }
 
     /**

Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ValueHandler.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ValueHandler.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ValueHandler.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ValueHandler.java Tue Nov 14 15:42:42 2006
@@ -15,6 +15,7 @@
  */
 package org.apache.openjpa.jdbc.meta;
 
+import java.io.Serializable;
 import java.sql.SQLException;
 
 import org.apache.openjpa.jdbc.kernel.JDBCFetchConfiguration;
@@ -30,7 +31,8 @@
  * @author Abe White
  * @since 0.4.0
  */
-public interface ValueHandler {
+public interface ValueHandler
+    extends Serializable {
 
     /**
      * Map the given value and return all mapped columns, or simply return an

Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ValueMapping.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ValueMapping.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ValueMapping.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ValueMapping.java Tue Nov 14 15:42:42 2006
@@ -15,6 +15,7 @@
  */
 package org.apache.openjpa.jdbc.meta;
 
+import java.io.Serializable;
 import java.sql.SQLException;
 
 import org.apache.openjpa.jdbc.schema.Column;
@@ -34,7 +35,7 @@
  * @since 0.4.0
  */
 public interface ValueMapping
-    extends ValueMetaData, MetaDataContext {
+    extends ValueMetaData, MetaDataContext, Serializable {
 
     /**
      * Standard forward join.

Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ValueMappingImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ValueMappingImpl.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ValueMappingImpl.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/ValueMappingImpl.java Tue Nov 14 15:42:42 2006
@@ -48,7 +48,7 @@
     private static final Localizer _loc = Localizer.forPackage
         (ValueMappingImpl.class);
 
-    private final ValueMappingInfo _info;
+    private ValueMappingInfo _info;
     private ValueHandler _handler = null;
     private ClassMapping[] _typeArr = null;
 
@@ -70,6 +70,13 @@
         _info = owner.getMappingRepository().newMappingInfo(this);
         _info.setUseClassCriteria(owner.getMappingRepository().
             getMappingDefaults().useClassCriteria());
+    }
+    
+    /**
+     * Constructor for deserialization.
+     */
+    protected ValueMappingImpl() {
+        super();
     }
 
     public ValueMappingInfo getValueInfo() {

Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/ColumnIO.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/ColumnIO.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/ColumnIO.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/ColumnIO.java Tue Nov 14 15:42:42 2006
@@ -15,6 +15,8 @@
  */
 package org.apache.openjpa.jdbc.schema;
 
+import java.io.Serializable;
+
 /**
  * Metadata about column I/O in a specific context. In the context of
  * a foreign key, the standard foreign key columns are indexed first, then
@@ -22,7 +24,8 @@
  *
  * @author Abe White
  */
-public class ColumnIO {
+public class ColumnIO
+    implements Serializable {
 
     public static final ColumnIO UNRESTRICTED = new ColumnIO() {
         public void setInsertable(int col, boolean insertable) {

Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/DynamicSchemaFactory.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/DynamicSchemaFactory.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/DynamicSchemaFactory.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/DynamicSchemaFactory.java Tue Nov 14 15:42:42 2006
@@ -35,7 +35,7 @@
     extends SchemaGroup
     implements SchemaFactory, Configurable {
 
-    private DBDictionary _dict = null;
+    private transient DBDictionary _dict = null;
     private String _schema = null;
 
     public void setConfiguration(Configuration conf) {
@@ -49,7 +49,7 @@
 
     public void endConfiguration() {
     }
-
+    
     public SchemaGroup readSchema() {
         return this;
     }

Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/ForeignKey.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/ForeignKey.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/ForeignKey.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/ForeignKey.java Tue Nov 14 15:42:42 2006
@@ -19,8 +19,8 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.LinkedHashMap;
 
-import org.apache.commons.collections.map.LinkedMap;
 import org.apache.commons.lang.ObjectUtils;
 import org.apache.openjpa.lib.util.Localizer;
 import org.apache.openjpa.lib.util.StringDistance;
@@ -65,17 +65,18 @@
      */
     public static final int ACTION_DEFAULT = 5;
 
-    private static Localizer _loc = Localizer.forPackage(ForeignKey.class);
+    private static final Localizer _loc = 
+        Localizer.forPackage(ForeignKey.class);
 
     private String _pkTableName = null;
     private String _pkSchemaName = null;
     private String _pkColumnName = null;
     private int _seq = 0;
 
-    private LinkedMap _joins = null;
-    private LinkedMap _joinsPK = null;
-    private LinkedMap _consts = null;
-    public LinkedMap _constsPK = null;
+    private LinkedHashMap _joins = null;
+    private LinkedHashMap _joinsPK = null;
+    private LinkedHashMap _consts = null;
+    private LinkedHashMap _constsPK = null;
     private int _delAction = ACTION_NONE;
     private int _upAction = ACTION_NONE;
     private int _index = 0;
@@ -525,10 +526,10 @@
 
         _pkTable = pkTable;
         if (_joins == null)
-            _joins = new LinkedMap();
+            _joins = new LinkedHashMap();
         _joins.put(local, toPK);
         if (_joinsPK == null)
-            _joinsPK = new LinkedMap();
+            _joinsPK = new LinkedHashMap();
         _joinsPK.put(toPK, local);
 
         // force re-cache
@@ -550,7 +551,7 @@
 
         _pkTable = pkTable;
         if (_constsPK == null)
-            _constsPK = new LinkedMap();
+            _constsPK = new LinkedHashMap();
         _constsPK.put(toPK, val);
 
         // force re-cache
@@ -564,7 +565,7 @@
      */
     public void joinConstant(Column col, Object val) {
         if (_consts == null)
-            _consts = new LinkedMap();
+            _consts = new LinkedHashMap();
         _consts.put(col, val);
 
         // force re-cache

Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/LazySchemaFactory.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/LazySchemaFactory.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/LazySchemaFactory.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/LazySchemaFactory.java Tue Nov 14 15:42:42 2006
@@ -36,10 +36,11 @@
     extends SchemaGroup
     implements SchemaFactory, Configurable {
 
-    private JDBCConfiguration _conf = null;
-    private SchemaGenerator _gen = null;
-    private Connection _conn = null;
-    private DatabaseMetaData _meta = null;
+    private transient JDBCConfiguration _conf = null;
+    private transient Connection _conn = null;
+    private transient DatabaseMetaData _meta = null;
+    private transient SchemaGenerator _gen = null;
+    
     private boolean _indexes = false;
     private boolean _pks = false;
     private boolean _fks = false;

Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/NameSet.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/NameSet.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/NameSet.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/NameSet.java Tue Nov 14 15:42:42 2006
@@ -15,6 +15,7 @@
  */
 package org.apache.openjpa.jdbc.schema;
 
+import java.io.Serializable;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -28,7 +29,8 @@
  *
  * @author Abe White
  */
-public class NameSet {
+public class NameSet
+    implements Serializable {
 
     private static final Localizer _loc = Localizer.forPackage(NameSet.class);
 

Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/ReferenceCounter.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/ReferenceCounter.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/ReferenceCounter.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/ReferenceCounter.java Tue Nov 14 15:42:42 2006
@@ -15,13 +15,16 @@
  */
 package org.apache.openjpa.jdbc.schema;
 
+import java.io.Serializable;
+
 /**
  * Some schema components count references so that unused components
  * can be detected.
  *
  * @author Abe White
  */
-class ReferenceCounter {
+class ReferenceCounter 
+    implements Serializable {
 
     private int _count = 0;
 

Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Schema.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Schema.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Schema.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Schema.java Tue Nov 14 15:42:42 2006
@@ -15,6 +15,7 @@
  */
 package org.apache.openjpa.jdbc.schema;
 
+import java.io.Serializable;
 import java.util.Map;
 import java.util.TreeMap;
 
@@ -26,7 +27,7 @@
  * @author Abe White
  */
 public class Schema
-    implements Comparable {
+    implements Comparable, Serializable {
 
     private String _name = null;
     private SchemaGroup _group = null;

Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Table.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Table.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Table.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Table.java Tue Nov 14 15:42:42 2006
@@ -21,8 +21,8 @@
 import java.util.Iterator;
 import java.util.Map;
 import java.util.TreeMap;
+import java.util.LinkedHashMap;
 
-import org.apache.commons.collections.map.LinkedMap;
 import org.apache.commons.lang.StringUtils;
 import org.apache.openjpa.lib.meta.SourceTracker;
 
@@ -269,7 +269,7 @@
         else
             col = new Column(name, this);
         if (_colMap == null)
-            _colMap = new LinkedMap();
+            _colMap = new LinkedHashMap();
         _colMap.put(name.toUpperCase(), col);
         _cols = null;
         return col;

Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/BeanLifecycleCallbacks.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/BeanLifecycleCallbacks.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/BeanLifecycleCallbacks.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/BeanLifecycleCallbacks.java Tue Nov 14 15:42:42 2006
@@ -15,6 +15,9 @@
  */
 package org.apache.openjpa.event;
 
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.lang.reflect.Method;
 
 import org.apache.openjpa.lib.util.Localizer;
@@ -31,7 +34,7 @@
     private static final Localizer _loc = Localizer.forPackage
         (BeanLifecycleCallbacks.class);
 
-    private Object _listener;
+    private transient Object _listener;
 
     /**
      * Constructor. Make the callback on an instance of the given type.
@@ -49,8 +52,12 @@
      */
     public BeanLifecycleCallbacks(Class cls, Method method, boolean arg) {
         super(method, arg);
+        _listener = newListener(cls);
+    }
+    
+    private Object newListener(Class cls) {
         try {
-            _listener = cls.newInstance();
+            return cls.newInstance();
         } catch (Throwable t) {
             throw new UserException(_loc.get("bean-constructor",
                 cls.getName()), t);
@@ -66,5 +73,18 @@
             callback.invoke(_listener, new Object[]{ obj, rel });
         else
             callback.invoke(_listener, new Object[]{ obj });
+    }
+
+    public void readExternal(ObjectInput in)
+        throws IOException, ClassNotFoundException {
+        super.readExternal(in);
+        Class cls = (Class) in.readObject();
+        _listener = newListener(cls);
+    }
+
+    public void writeExternal(ObjectOutput out)
+        throws IOException {
+        super.writeExternal(out);
+        out.writeObject(_listener.getClass());
     }
 }

Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/LifecycleCallbacks.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/LifecycleCallbacks.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/LifecycleCallbacks.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/LifecycleCallbacks.java Tue Nov 14 15:42:42 2006
@@ -15,12 +15,15 @@
  */
 package org.apache.openjpa.event;
 
+import java.io.Serializable;
+
 /**
  * A lifecycle listener that responds to callbacks rather than events.
  *
  * @author Steve Kim
  */
-public interface LifecycleCallbacks {
+public interface LifecycleCallbacks
+    extends Serializable {
 
     /**
      * Return whether the given instance has a callback for the given

Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/MethodLifecycleCallbacks.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/MethodLifecycleCallbacks.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/MethodLifecycleCallbacks.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/event/MethodLifecycleCallbacks.java Tue Nov 14 15:42:42 2006
@@ -15,6 +15,10 @@
  */
 package org.apache.openjpa.event;
 
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.lang.reflect.Method;
 import java.util.Arrays;
 
@@ -27,12 +31,12 @@
  * @author Steve Kim
  */
 public class MethodLifecycleCallbacks
-    implements LifecycleCallbacks {
+    implements LifecycleCallbacks, Externalizable {
 
     private static final Localizer _loc = Localizer.forPackage
         (MethodLifecycleCallbacks.class);
 
-    private Method _callback;
+    private transient Method _callback;
     private boolean _arg;
 
     /**
@@ -137,5 +141,22 @@
         }
 
         return true;
+    }
+
+    public void readExternal(ObjectInput in)
+        throws IOException, ClassNotFoundException {
+        Class cls = (Class) in.readObject();
+        String methName = (String) in.readObject();
+        _arg = in.readBoolean();
+
+        Class[] args = _arg ? new Class[]{ Object.class } : null;
+        _callback = getMethod(cls, methName, args);
+    }
+
+    public void writeExternal(ObjectOutput out)
+        throws IOException {
+        out.writeObject(_callback.getClass());
+        out.writeObject(_callback.getName());
+        out.writeBoolean(_arg);
     } 
 }

Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractMetaDataFactory.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractMetaDataFactory.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractMetaDataFactory.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/AbstractMetaDataFactory.java Tue Nov 14 15:42:42 2006
@@ -38,11 +38,12 @@
     implements MetaDataFactory {
 
     protected MetaDataRepository repos = null;
-    protected Log log = null;
+    protected transient Log log = null;
     protected File dir = null;
     protected int store = STORE_DEFAULT;
     protected boolean strict = false;
     protected Set types = null;
+
 
     /**
      * Set of persistent type names supplied by user.

Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java Tue Nov 14 15:42:42 2006
@@ -111,11 +111,11 @@
     private static final Localizer _loc = Localizer.forPackage
         (ClassMetaData.class);
 
-    // the repository this class belongs to, if any, and source file
-    private final MetaDataRepository _repos;
+    private MetaDataRepository _repos;
+    private transient ClassLoader _loader = null;
+
     private final ValueMetaData _owner;
     private final LifecycleMetaData _lifeMeta = new LifecycleMetaData(this);
-    private ClassLoader _loader = null;
     private File _srcFile = null;
     private int _srcType = SRC_OTHER;
     private String[] _comments = null;
@@ -537,7 +537,7 @@
      * The datastore identity sequence name, or null for none.
      */
     public String getIdentitySequenceName() {
-        if (_seqName == DEFAULT_STRING) {
+        if (DEFAULT_STRING.equals(_seqName)) {
             if (_super != null)
                 _seqName = getPCSuperclassMetaData().getIdentitySequenceName();
             else
@@ -1279,7 +1279,7 @@
      * The name of the datacache to use for this class, or null if none.
      */
     public String getDataCacheName() {
-        if (_cacheName == DEFAULT_STRING) {
+        if (DEFAULT_STRING.equals(_cacheName)) {
             if (_super != null)
                 _cacheName = getPCSuperclassMetaData().getDataCacheName();
             else
@@ -1353,7 +1353,7 @@
      * The name of the detach state field, or null if none.
      */
     public String getDetachedState() {
-        if (_detachState == DEFAULT_STRING) {
+        if (DEFAULT_STRING.equals(_detachState)) {
             ClassMetaData sup = getPCSuperclassMetaData();
             if (sup != null && sup.isDetachable() == isDetachable())
                 _detachState = sup.getDetachedState();
@@ -2246,13 +2246,13 @@
 
         // only copy this information if it wasn't set explicitly for this
         // instance
-        if (_cacheName == DEFAULT_STRING)
+        if (DEFAULT_STRING.equals(_cacheName))
             _cacheName = meta.getDataCacheName();
         if (_cacheTimeout == Integer.MIN_VALUE)
             _cacheTimeout = meta.getDataCacheTimeout();
         if (_detachable == null)
             _detachable = meta._detachable;
-        if (_detachState == DEFAULT_STRING)
+        if (DEFAULT_STRING.equals(_detachState))
             _detachState = meta.getDetachedState();
 
         // synch field information; first remove extra fields

Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/Extensions.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/Extensions.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/Extensions.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/Extensions.java Tue Nov 14 15:42:42 2006
@@ -15,6 +15,7 @@
  */
 package org.apache.openjpa.meta;
 
+import java.io.Serializable;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -35,7 +36,8 @@
  *
  * @author Abe White
  */
-public abstract class Extensions {
+public abstract class Extensions
+    implements Serializable {
 
     public static final String OPENJPA = "openjpa";
 
@@ -412,7 +414,8 @@
     /**
      * Key class.
      */
-    private static class HashKey {
+    private static class HashKey 
+        implements Serializable {
 
         public final String vendor;
         public final String key;

Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/FetchGroup.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/FetchGroup.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/FetchGroup.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/FetchGroup.java Tue Nov 14 15:42:42 2006
@@ -15,6 +15,7 @@
  */
 package org.apache.openjpa.meta;
 
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -30,7 +31,8 @@
 /**
  * Captures fetch group metadata.
  */
-public class FetchGroup {
+public class FetchGroup 
+    implements Serializable {
 
     /**
      * Name of the default fetch group.

Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/FieldMetaData.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/FieldMetaData.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/FieldMetaData.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/FieldMetaData.java Tue Nov 14 15:42:42 2006
@@ -15,6 +15,10 @@
  */
 package org.apache.openjpa.meta;
 
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
@@ -62,7 +66,7 @@
 public class FieldMetaData
     extends Extensions
     implements ValueMetaData, MetaDataContext, MetaDataModes, Commentable {
-
+    
     /**
      * Constant specifying that no null-value was given.
      */
@@ -156,13 +160,19 @@
     private String   _lfg = null;
     private Boolean _lrs = null;
     private String _extName = null;
-    private Method _extMethod = DEFAULT_METHOD;
     private String _factName = null;
-    private Member _factMethod = DEFAULT_METHOD;
     private String _extString = null;
     private Map _extValues = Collections.EMPTY_MAP;
     private Map _fieldValues = Collections.EMPTY_MAP;
-    private Member _backingMember = null;
+
+    // Members aren't serializable. Use a proxy that can provide a Member
+    // to avoid writing the full Externalizable implementation.
+    private transient MemberProvider _backingMember = null;
+    
+    // Members aren't serializable. Initializing _extMethod and _factMethod to 
+    // DEFAULT_METHOD is sufficient to trigger lazy population of these fields.
+    private transient Method _extMethod = DEFAULT_METHOD;
+    private transient Member _factMethod = DEFAULT_METHOD;
 
     // intermediate and impl data
     private boolean _intermediate = true;
@@ -213,7 +223,7 @@
         if (Modifier.isTransient(member.getModifiers()))
             _transient = true;
 
-        _backingMember = member;
+        _backingMember = new MemberProvider(member);
 
         Class type;
         Class[] types;
@@ -245,7 +255,7 @@
      * Return the backing member supplied in {@link #backingMember}.
      */
     public Member getBackingMember() {
-        return _backingMember;
+        return _backingMember.getMember();
     }
 
     /**
@@ -782,7 +792,7 @@
      * Logical inverse field.
      */
     public String getInverse() {
-        if (_inverse == ClassMetaData.DEFAULT_STRING)
+        if (ClassMetaData.DEFAULT_STRING.equals(_inverse))
             _inverse = null;
         return _inverse;
     }
@@ -906,7 +916,7 @@
      * The value sequence name, or null for none.
      */
     public String getValueSequenceName() {
-        if (_seqName == ClassMetaData.DEFAULT_STRING)
+        if (ClassMetaData.DEFAULT_STRING.equals(_seqName))
             _seqName = null;
         return _seqName;
     }
@@ -1487,10 +1497,6 @@
         return StoreContext.class.getName().equals(type.getName());
     }
 
-    public int hashCode() {
-        return getFullName(true).hashCode();
-    }
-
     public boolean equals(Object other) {
         if (other == this)
             return true;
@@ -1713,7 +1719,7 @@
         _extValues = Collections.EMPTY_MAP;
         _fieldValues = Collections.EMPTY_MAP;
         _primKey = field.isPrimaryKey();
-        _backingMember = field.getBackingMember();
+        _backingMember = field._backingMember;
 
         // embedded fields can't be versions
         if (_owner.getEmbeddingMetaData() == null && _version == null)
@@ -1735,11 +1741,11 @@
             _valStrategy = field.getValueStrategy();
         if (_upStrategy == -1)
             _upStrategy = field.getUpdateStrategy();
-        if (_seqName == ClassMetaData.DEFAULT_STRING) {
+        if (ClassMetaData.DEFAULT_STRING.equals(_seqName)) {
             _seqName = field.getValueSequenceName();
             _seqMeta = null;
         }
-        if (_inverse == ClassMetaData.DEFAULT_STRING)
+        if (ClassMetaData.DEFAULT_STRING.equals(_inverse))
             _inverse = field.getInverse();
 
         // copy value metadata
@@ -1919,4 +1925,62 @@
 	{
 		_val.copy (vmd);
 	}
+
+    /**
+     * Serializable wrapper around a {@link Method} or {@link Field}. For 
+     * space considerations, this does not support {@link Constructor}s.
+     */
+	private static class MemberProvider 
+        implements Externalizable {
+
+        private transient Member _member;
+        
+        private MemberProvider(Member member) {
+            if (_member instanceof Constructor)
+                throw new IllegalArgumentException();
+
+            _member = member;
+        }
+        
+        public Member getMember() {
+            return _member;
+        }
+
+        public void readExternal(ObjectInput in)
+            throws IOException, ClassNotFoundException {
+            boolean isField = in.readBoolean();
+            Class cls = _member.getDeclaringClass();
+            String memberName = (String) in.readObject();
+            try {
+                if (isField)
+                    _member = cls.getDeclaredField(memberName);
+                else {
+                    Class[] parameterTypes = (Class[]) in.readObject();
+                    _member = cls.getDeclaredMethod(memberName, parameterTypes);
+                }
+            } catch (SecurityException e) {
+                IOException ioe = new IOException(e.getMessage());
+                ioe.initCause(e);
+                throw ioe;
+            } catch (NoSuchFieldException e) {
+                IOException ioe = new IOException(e.getMessage());
+                ioe.initCause(e);
+                throw ioe;
+            } catch (NoSuchMethodException e) {
+                IOException ioe = new IOException(e.getMessage());
+                ioe.initCause(e);
+                throw ioe;
+            }
+        }
+
+        public void writeExternal(ObjectOutput out)
+            throws IOException {
+            boolean isField = _member instanceof Field;
+            out.writeBoolean(isField);
+            out.writeObject(_member.getDeclaringClass());
+            out.writeObject(_member.getName());
+            if (!isField)
+                out.writeObject(((Method) _member).getParameterTypes());
+        }
+    }
 }

Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/InheritanceComparator.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/InheritanceComparator.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/InheritanceComparator.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/InheritanceComparator.java Tue Nov 14 15:42:42 2006
@@ -15,6 +15,7 @@
  */
 package org.apache.openjpa.meta;
 
+import java.io.Serializable;
 import java.util.Comparator;
 
 /**
@@ -24,7 +25,7 @@
  * @nojavadoc
  */
 public class InheritanceComparator
-    implements Comparator {
+    implements Comparator, Serializable {
 
     private Class _base = Object.class;
 

Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/LifecycleMetaData.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/LifecycleMetaData.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/LifecycleMetaData.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/LifecycleMetaData.java Tue Nov 14 15:42:42 2006
@@ -15,6 +15,7 @@
  */
 package org.apache.openjpa.meta;
 
+import java.io.Serializable;
 import java.util.Arrays;
 
 import org.apache.openjpa.event.LifecycleCallbacks;
@@ -28,7 +29,8 @@
  * @author Steve Kim
  * @author Abe White
  */
-public class LifecycleMetaData {
+public class LifecycleMetaData
+    implements Serializable {
 
     public static final int IGNORE_NONE = 0;
     public static final int IGNORE_HIGH = 2 << 0;

Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java Tue Nov 14 15:42:42 2006
@@ -15,6 +15,7 @@
  */
 package org.apache.openjpa.meta;
 
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -53,7 +54,7 @@
  */
 public class MetaDataRepository
     implements PCRegistry.RegisterClassListener, Configurable, Closeable, 
-    MetaDataModes {
+    MetaDataModes, Serializable {
 
     /**
      * Constant to not validate any metadata.
@@ -109,10 +110,11 @@
     // map of classes to lists of their subclasses
     private final Map _subs = Collections.synchronizedMap(new HashMap());
 
-    private OpenJPAConfiguration _conf = null;
-    private Log _log = null;
-    private MetaDataFactory _factory = null;
-    private InterfaceImplGenerator _implGen = null;
+    private transient OpenJPAConfiguration _conf = null;
+    private transient Log _log = null;
+    private transient InterfaceImplGenerator _implGen = null;
+    private transient MetaDataFactory _factory = null;
+
     private int _resMode = MODE_META | MODE_MAPPING;
     private int _sourceMode = MODE_META | MODE_MAPPING | MODE_QUERY;
     private int _validate = VALIDATE_META | VALIDATE_UNENHANCED;
@@ -1458,6 +1460,10 @@
     }
 
     public void endConfiguration() {
+        initializeMetaDataFactory();
+    }
+
+    private void initializeMetaDataFactory() {
         if (_factory == null) {
             MetaDataFactory mdf = _conf.newMetaDataFactoryInstance();
             if (mdf == null)
@@ -1789,7 +1795,8 @@
     /**
      * Query key struct.
      */
-    private static class QueryKey {
+    private static class QueryKey
+        implements Serializable {
 
         public String clsName;
         public String name;

Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/Order.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/Order.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/Order.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/Order.java Tue Nov 14 15:42:42 2006
@@ -15,6 +15,7 @@
  */
 package org.apache.openjpa.meta;
 
+import java.io.Serializable;
 import java.util.Comparator;
 
 /**
@@ -22,7 +23,8 @@
  *
  * @author Abe White
  */
-public interface Order {
+public interface Order
+    extends Serializable {
 
     /**
      * Token denoting to order by the element value.

Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/QueryMetaData.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/QueryMetaData.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/QueryMetaData.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/QueryMetaData.java Tue Nov 14 15:42:42 2006
@@ -16,6 +16,7 @@
 package org.apache.openjpa.meta;
 
 import java.io.File;
+import java.io.Serializable;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -32,7 +33,7 @@
  * @author Steve Kim
  */
 public class QueryMetaData
-    implements MetaDataModes, SourceTracker, Commentable {
+    implements MetaDataModes, SourceTracker, Commentable, Serializable {
 
     private static final String[] EMPTY_KEYS = new String[0];
     private static final Object[] EMPTY_VALS = new Object[0];

Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/SequenceMetaData.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/SequenceMetaData.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/SequenceMetaData.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/SequenceMetaData.java Tue Nov 14 15:42:42 2006
@@ -16,6 +16,7 @@
 package org.apache.openjpa.meta;
 
 import java.io.File;
+import java.io.Serializable;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.openjpa.conf.SeqValue;
@@ -36,7 +37,8 @@
  * @since 0.4.0
  */
 public class SequenceMetaData
-    implements SourceTracker, MetaDataContext, Closeable, Commentable {
+    implements SourceTracker, MetaDataContext, Closeable, Commentable,
+    Serializable {
 
     /**
      * Sequence name that means to use the system default sequence.
@@ -63,11 +65,12 @@
     private static final Localizer _loc = Localizer.forPackage
         (SequenceMetaData.class);
 
-    private final MetaDataRepository _repos;
+    private MetaDataRepository _repos;
+    private SequenceFactory _factory = null;
+    
     private final String _name;
     private int _type = Seq.TYPE_DEFAULT;
     private String _plugin = IMPL_NATIVE;
-    private SequenceFactory _factory = null;
     private File _source = null;
     private Object _scope = null;
     private int _srcType = SRC_OTHER;
@@ -78,7 +81,7 @@
     private int _initial = -1;
 
     // instantiated lazily
-    private Seq _instance = null;
+    private transient Seq _instance = null;
 
     /**
      * Constructor; supply sequence name.
@@ -341,12 +344,13 @@
     public void setComments(String[] comments) {
         _comments = comments;
     }
-
+    
     /**
      * Allow facades to supply adapters from a spec sequence type to the
      * OpenJPA sequence type.
      */
-    public static interface SequenceFactory {
+    public static interface SequenceFactory 
+        extends Serializable {
 
         /**
          * Transform the given class named in metadata into a sequence.

Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ValueMetaData.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ValueMetaData.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ValueMetaData.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ValueMetaData.java Tue Nov 14 15:42:42 2006
@@ -15,6 +15,8 @@
  */
 package org.apache.openjpa.meta;
 
+import java.io.Serializable;
+
 /**
  * Holds metadata on a value; this could be a field value, key value, or
  * element value.
@@ -23,7 +25,7 @@
  * @author Abe White
  */
 public interface ValueMetaData
-    extends MetaDataContext, MetaDataModes {
+    extends MetaDataContext, MetaDataModes, Serializable {
 
     /**
      * The operation is not cascaded to this field.

Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ValueMetaDataImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ValueMetaDataImpl.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ValueMetaDataImpl.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ValueMetaDataImpl.java Tue Nov 14 15:42:42 2006
@@ -36,7 +36,7 @@
     // embedded metadata, make sure to add it to the copy() method
     ///////////////////////////////////////////////////////////////
 
-    private final FieldMetaData _owner;
+    private FieldMetaData _owner;
     private Class _decType = Object.class;
     private int _decCode = JavaTypes.OBJECT;
     private ClassMetaData _decTypeMeta = null;
@@ -57,6 +57,12 @@
 
     protected ValueMetaDataImpl(FieldMetaData owner) {
         _owner = owner;
+    }
+    
+    /**
+     * Constructor for serialization.
+     */
+    protected ValueMetaDataImpl() {
     }
 
     public FieldMetaData getFieldMetaData() {

Modified: incubator/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/AbstractProductDerivation.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/AbstractProductDerivation.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/AbstractProductDerivation.java (original)
+++ incubator/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/AbstractProductDerivation.java Tue Nov 14 15:42:42 2006
@@ -1,69 +1,72 @@
-/*
- * Copyright 2006 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.openjpa.lib.conf;
-
-import java.io.File;
-
-/**
- * Abstract no-op product derivation for easy extension.
- *
- * @author Pinaki Poddar
- * @since 0.4.1
- */
-public abstract class AbstractProductDerivation
-    implements ProductDerivation {
-
-    public String getConfigurationPrefix() {
-        return null;
-    }
-
-    public void validate() 
-        throws Exception {
-    }
-
-    public ConfigurationProvider loadGlobals(ClassLoader loader)
-        throws Exception {
-        return null;
-    }
-
-    public ConfigurationProvider loadDefaults(ClassLoader loader)
-        throws Exception {
-        return null;
-    }
-
-    public ConfigurationProvider load(String resource, String anchor,
-        ClassLoader loader) 
-        throws Exception {
-        return null;
-    }
-
-    public ConfigurationProvider load(File file, String anchor)
-        throws Exception {
-        return null;
-    }
-
-    public boolean beforeConfigurationConstruct(ConfigurationProvider cp) {
-        return false;
-    }
-
-    public boolean beforeConfigurationLoad(Configuration conf) {
-        return false;
-    }
-
-    public boolean afterSpecificationSet(Configuration conf) {
-        return false;
-    }
-}
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openjpa.lib.conf;
+
+import java.io.File;
+
+/**
+ * Abstract no-op product derivation for easy extension.
+ *
+ * @author Pinaki Poddar
+ * @since 0.4.1
+ */
+public abstract class AbstractProductDerivation
+    implements ProductDerivation {
+
+    public String getConfigurationPrefix() {
+        return null;
+    }
+
+    public void validate() 
+        throws Exception {
+    }
+
+    public ConfigurationProvider loadGlobals(ClassLoader loader)
+        throws Exception {
+        return null;
+    }
+
+    public ConfigurationProvider loadDefaults(ClassLoader loader)
+        throws Exception {
+        return null;
+    }
+
+    public ConfigurationProvider load(String resource, String anchor,
+        ClassLoader loader) 
+        throws Exception {
+        return null;
+    }
+
+    public ConfigurationProvider load(File file, String anchor)
+        throws Exception {
+        return null;
+    }
+
+    public boolean beforeConfigurationConstruct(ConfigurationProvider cp) {
+        return false;
+    }
+
+    public boolean beforeConfigurationLoad(Configuration conf) {
+        return false;
+    }
+
+    public boolean afterSpecificationSet(Configuration conf) {
+        return false;
+    }
+    
+    public void beforeConfigurationClose(Configuration conf) {
+    }
+}

Modified: incubator/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ProductDerivation.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ProductDerivation.java?view=diff&rev=475059&r1=475058&r2=475059
==============================================================================
--- incubator/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ProductDerivation.java (original)
+++ incubator/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/conf/ProductDerivation.java Tue Nov 14 15:42:42 2006
@@ -112,4 +112,11 @@
      * @return true if given Configuration has been mutated.
      */
     public boolean afterSpecificationSet(Configuration conf);
+    
+    /**
+     * Called before the given Configuration is closed.
+     * 
+     * @since 0.9.7
+     */
+    public void beforeConfigurationClose(Configuration conf);
 }