Author: arminw
Date: Fri Oct 13 12:55:34 2006
New Revision: 463805

URL: http://svn.apache.org/viewvc?view=rev&rev=463805
Log:
add support for per field sequence manager declaration

Modified:
    
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java
    
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/ConnectionDescriptorXmlHandler.java
    
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/FieldDescriptor.java
    
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/RepositoryXmlHandler.java
    
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/SequenceDescriptor.java

Modified: 
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java
URL: 
http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java?view=diff&rev=463805&r1=463804&r2=463805
==============================================================================
--- 
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java
 (original)
+++ 
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java
 Fri Oct 13 12:55:34 2006
@@ -72,6 +72,7 @@
 import org.apache.ojb.broker.metadata.FieldDescriptor;
 import org.apache.ojb.broker.metadata.MetadataManager;
 import org.apache.ojb.broker.metadata.ObjectReferenceDescriptor;
+import org.apache.ojb.broker.metadata.SequenceDescriptor;
 import org.apache.ojb.broker.metadata.fieldaccess.PersistentField;
 import org.apache.ojb.broker.query.Query;
 import org.apache.ojb.broker.query.QueryByIdentity;
@@ -85,7 +86,8 @@
 import org.apache.ojb.broker.util.logging.Logger;
 import org.apache.ojb.broker.util.logging.LoggerFactory;
 import org.apache.ojb.broker.util.sequence.SequenceManager;
-import org.apache.ojb.broker.util.sequence.SequenceManagerFactory;
+import org.apache.ojb.broker.util.sequence.SequenceManagerHelper;
+import org.apache.ojb.broker.util.sequence.PerFieldManager;
 
 /**
  * The PersistenceBrokerImpl is an implementation of the PersistenceBroker
@@ -220,7 +222,14 @@
         the new real two-level cache was introduced
         */
         objectCache = ObjectCacheFactory.getInstance().createObjectCache(this);
-        sequenceManager = SequenceManagerFactory.getSequenceManager(this);
+        SequenceDescriptor sd = 
serviceConnectionManager().getConnectionDescriptor().getSequenceDescriptor();
+        if(logger.isDebugEnabled()) logger.debug("Create sequence manager for 
descriptor: " + sd);
+        sequenceManager = SequenceManagerHelper.createManager(this, sd);
+        if(sd.isPerFieldSequences())
+        {
+            if(logger.isDebugEnabled()) logger.debug("Enable per field 
sequence manager declaration");
+            sequenceManager = new PerFieldManager(this, sequenceManager);
+        }
         dbAccess = JdbcAccessFactory.getInstance().createJdbcAccess(this);
         statementManager = 
StatementManagerFactory.getInstance().createStatementManager(this);
         sqlGenerator = SqlGeneratorFactory.getInstance().createSqlGenerator(
@@ -1400,7 +1409,7 @@
     {
         if (logger.isDebugEnabled())
         {
-               logger.debug("Manually retrieving all references for object " + 
serviceIdentity().buildIdentity(pInstance));
+            logger.debug("Manually retrieving all references for object " + 
serviceIdentity().buildIdentity(pInstance));
         }
         ClassDescriptor cld = getClassDescriptor(pInstance.getClass());
         getInternalCache().enableMaterializationCache();
@@ -1439,8 +1448,8 @@
     {
         if (logger.isDebugEnabled())
         {
-               logger.debug("Retrieving reference named ["+pAttributeName+"] 
on object of type ["+
-                           pInstance.getClass().getName()+"]");
+            logger.debug("Retrieving reference named ["+pAttributeName+"] on 
object of type ["+
+                        pInstance.getClass().getName()+"]");
         }
         ClassDescriptor cld = getClassDescriptor(pInstance.getClass());
         CollectionDescriptor cod = 
cld.getCollectionDescriptorByName(pAttributeName);
@@ -2298,7 +2307,7 @@
         mtoNBroker.reset();
         objectCache.doLocalClear();
     }
-    
+
 
 
     /**
@@ -2314,13 +2323,13 @@
      */
     public void addMtoNImplementor(MtoNImplementor m2n) throws 
PersistenceBrokerException
     {
-               mtoNBroker.storeMtoNImplementor(m2n);
+        mtoNBroker.storeMtoNImplementor(m2n);
     }
 
     public ProxyFactory getProxyFactory() {
         return proxyFactory;
     }
-    
+
     /**
      * Creates a proxy instance.
      * 
@@ -2344,11 +2353,11 @@
                 return constructor.newInstance(new Object[]{ handler });
             }
             else
-            {                
+            {
                 return 
getProxyFactory().createProxy(baseClassForProxy,handler);
             }
 
-            
+
         }
         catch (Exception ex)
         {

Modified: 
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/ConnectionDescriptorXmlHandler.java
URL: 
http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/ConnectionDescriptorXmlHandler.java?view=diff&rev=463805&r1=463804&r2=463805
==============================================================================
--- 
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/ConnectionDescriptorXmlHandler.java
 (original)
+++ 
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/ConnectionDescriptorXmlHandler.java
 Fri Oct 13 12:55:34 2006
@@ -40,7 +40,6 @@
  * metadata, one for pc object metadata.
  * </p>
  *
- * @author <a href="mailto:[EMAIL PROTECTED]">Armin Waibel</a>
  * @version $Id$
  */
 public class ConnectionDescriptorXmlHandler
@@ -51,7 +50,6 @@
 
     private ConnectionRepository con_repository;
     private JdbcConnectionDescriptor m_CurrentJCD;
-    private SequenceDescriptor currentSequenceDescriptor;
     private List conDesList;
     private AttributeContainer currentAttributeContainer;
     private boolean defaultConnectionFound = false;
@@ -299,15 +297,15 @@
                     }
                 case SEQUENCE_MANAGER:
                     {
-                        String className = 
atts.getValue(tags.getTagById(SEQUENCE_MANAGER_CLASS));
-                        if(checkString(className))
+                        if(this.currentAttributeContainer != null)
                         {
-                            this.currentSequenceDescriptor = new 
SequenceDescriptor(this.m_CurrentJCD);
+                            String className = 
atts.getValue(tags.getTagById(SEQUENCE_MANAGER_CLASS));
+                            SequenceDescriptor currentSequenceDescriptor = new 
SequenceDescriptor();
                             this.currentAttributeContainer = 
currentSequenceDescriptor;
-                            
this.m_CurrentJCD.setSequenceDescriptor(this.currentSequenceDescriptor);
+                            
this.m_CurrentJCD.setSequenceDescriptor(currentSequenceDescriptor);
                             if (isDebug) logger.debug("    > " + 
tags.getTagById(SEQUENCE_MANAGER));
                             if (isDebug) logger.debug("     " + 
tags.getTagById(SEQUENCE_MANAGER_CLASS) + ": " + className);
-                            if (checkString(className)) 
currentSequenceDescriptor.setSequenceManagerClass(ClassHelper.getClass(className));
+                            if (checkString(className)) 
currentSequenceDescriptor.setSequenceManagerClass(className);
                         }
                         break;
                     }
@@ -419,8 +417,6 @@
                 case SEQUENCE_MANAGER:
                     {
                         if (isDebug) logger.debug("    < " + 
tags.getTagById(SEQUENCE_MANAGER));
-                        // set to null at the end of the tag!!
-                        this.currentSequenceDescriptor = null;
                         currentAttributeContainer = m_CurrentJCD;
                         break;
                     }

Modified: 
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/FieldDescriptor.java
URL: 
http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/FieldDescriptor.java?view=diff&rev=463805&r1=463804&r2=463805
==============================================================================
--- 
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/FieldDescriptor.java
 (original)
+++ 
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/FieldDescriptor.java
 Fri Oct 13 12:55:34 2006
@@ -80,6 +80,7 @@
     // dbms to update all lock columns eg using triggers
     private boolean updateLock = true;
     private String m_access;
+    private SequenceDescriptor sequenceDescriptor;
 
     /**
      * returns a comparator that allows to sort a Vector of 
FieldMappingDecriptors
@@ -614,6 +615,25 @@
             val = broker.serviceLobHelper().wrapLobField(this, val);
         }
         return val;
+    }
+
+    /**
+     * Get the associated [EMAIL PROTECTED] SequenceDescriptor} or 
<em>null</em>
+     * if not specified.
+     */
+    public SequenceDescriptor getSequenceDescriptor()
+    {
+        return sequenceDescriptor;
+    }
+
+    /**
+     * Set the associated [EMAIL PROTECTED] SequenceDescriptor}, if not set the
+     * [EMAIL PROTECTED] org.apache.ojb.broker.util.sequence.SequenceManager} 
specified
+     * in [EMAIL PROTECTED] JdbcConnectionDescriptor} is used.
+     */
+    public void setSequenceDescriptor(SequenceDescriptor sequenceDescriptor)
+    {
+        this.sequenceDescriptor = sequenceDescriptor;
     }
 
     /*

Modified: 
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/RepositoryXmlHandler.java
URL: 
http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/RepositoryXmlHandler.java?view=diff&rev=463805&r1=463804&r2=463805
==============================================================================
--- 
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/RepositoryXmlHandler.java
 (original)
+++ 
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/RepositoryXmlHandler.java
 Fri Oct 13 12:55:34 2006
@@ -38,8 +38,7 @@
  * classes. In further versions we should split repository.dtd in two parts, 
one for connetion
  * metadata, one for pc object metadata.
  * </p>
- * @author <a href="mailto:[EMAIL PROTECTED]">Thomas Mahler<a>
- * @author Jakob Br?uchi
+ * 
  * @version $Id$
  */
 public class RepositoryXmlHandler
@@ -485,6 +484,24 @@
                         break;
                     }
 
+                case SEQUENCE_MANAGER:
+                    {
+                        if(m_CurrentFLD != null)
+                        {
+                            String className = 
atts.getValue(tags.getTagById(SEQUENCE_MANAGER_CLASS));
+                            if(checkString(className))
+                            {
+                                SequenceDescriptor currentSequenceDescriptor = 
new SequenceDescriptor();
+                                m_CurrentAttrContainer = 
currentSequenceDescriptor;
+                                
m_CurrentFLD.setSequenceDescriptor(currentSequenceDescriptor);
+                                if (isDebug) logger.debug("    > " + 
tags.getTagById(SEQUENCE_MANAGER));
+                                if (isDebug) logger.debug("     " + 
tags.getTagById(SEQUENCE_MANAGER_CLASS) + ": " + className);
+                                
currentSequenceDescriptor.setSequenceManagerClass(className);
+                            }
+                        }
+                        break;
+                    }
+
                 case REFERENCE_DESCRIPTOR:
                     {
                         if (isDebug) logger.debug("    > " + 
tags.getTagById(REFERENCE_DESCRIPTOR));
@@ -1029,6 +1046,12 @@
                         if (isDebug) logger.debug("    < " + 
tags.getTagById(FIELD_DESCRIPTOR));
                         m_CurrentFLD = null;
                         m_CurrentAttrContainer = m_CurrentCLD;
+                        break;
+                    }
+                case SEQUENCE_MANAGER:
+                    {
+                        if (isDebug) logger.debug("    < " + 
tags.getTagById(SEQUENCE_MANAGER));
+                        m_CurrentAttrContainer = m_CurrentFLD;
                         break;
                     }
                 case REFERENCE_DESCRIPTOR:

Modified: 
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/SequenceDescriptor.java
URL: 
http://svn.apache.org/viewvc/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/SequenceDescriptor.java?view=diff&rev=463805&r1=463804&r2=463805
==============================================================================
--- 
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/SequenceDescriptor.java
 (original)
+++ 
db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/SequenceDescriptor.java
 Fri Oct 13 12:55:34 2006
@@ -15,12 +15,24 @@
  * limitations under the License.
  */
 
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Properties;
 
+import org.apache.commons.lang.BooleanUtils;
 import org.apache.commons.lang.SystemUtils;
 import org.apache.commons.lang.builder.ToStringBuilder;
 import org.apache.commons.lang.builder.ToStringStyle;
+import org.apache.ojb.broker.util.ClassHelper;
 import org.apache.ojb.broker.util.XmlHelper;
+import org.apache.ojb.broker.util.sequence.SequenceManager;
+import org.apache.ojb.broker.util.sequence.SequenceManagerHighLowImpl;
+import org.apache.ojb.broker.util.sequence.SequenceManagerIdentityImpl;
+import org.apache.ojb.broker.util.sequence.SequenceManagerInMemoryImpl;
+import org.apache.ojb.broker.util.sequence.SequenceManagerMSSQLGuidImpl;
+import org.apache.ojb.broker.util.sequence.SequenceManagerNextValImpl;
+import org.apache.ojb.broker.util.sequence.SequenceManagerSeqHiLoImpl;
+import org.apache.ojb.broker.util.sequence.SequenceManagerStoredProcedureImpl;
 
 /**
  * Encapsulates sequence manager configuration properties managed by
@@ -31,32 +43,78 @@
  * <code>Properties</code> object and could be reached via
  * [EMAIL PROTECTED] #getConfigurationProperties} or [EMAIL PROTECTED] 
#getAttribute(String key)}.
  *
- * @author <a href="mailto:[EMAIL PROTECTED]">Armin Waibel</a>
  * @version $Id$
  */
 public class SequenceDescriptor extends  DescriptorBase implements XmlCapable
 {
+    private static final long serialVersionUID = -5161713731380949398L;
+
+    /**
+     * Attribute string used to enable/disable per field
+     * sequence manager instance support.
+     */
+    public static final String ATTRIBUTE_PER_FIELD = "seq.perField";
+
+    public static final String SHORTCUT_SM_IN_MEMORY = "memory";
+    public static final String SHORTCUT_SM_HIGH_LOW = "hilo";
+    public static final String SHORTCUT_SM_SEQ_HIGH_LOW = "seqhilo";
+    public static final String SHORTCUT_SM_IDENTITY = "identity";
+    public static final String SHORTCUT_SM_NEXT_VAL = "nextval";
+    public static final String SHORTCUT_SM_PROCEDURE = "procedure";
+    public static final String SHORTCUT_SM_MS_GUID = "msguid";
+
+    private static Map shortcutNamesMap = new HashMap();
+    static
+    {
+        shortcutNamesMap.put(SHORTCUT_SM_HIGH_LOW, 
SequenceManagerHighLowImpl.class);
+        shortcutNamesMap.put(SHORTCUT_SM_SEQ_HIGH_LOW, 
SequenceManagerSeqHiLoImpl.class);
+        shortcutNamesMap.put(SHORTCUT_SM_IN_MEMORY, 
SequenceManagerInMemoryImpl.class);
+        shortcutNamesMap.put(SHORTCUT_SM_MS_GUID, 
SequenceManagerMSSQLGuidImpl.class);
+        shortcutNamesMap.put(SHORTCUT_SM_IDENTITY, 
SequenceManagerIdentityImpl.class);
+        shortcutNamesMap.put(SHORTCUT_SM_NEXT_VAL, 
SequenceManagerNextValImpl.class);
+        shortcutNamesMap.put(SHORTCUT_SM_PROCEDURE, 
SequenceManagerStoredProcedureImpl.class);
+    }
 
-       private static final long serialVersionUID = -5161713731380949398L;
     private JdbcConnectionDescriptor jcd;
-    private Class sequenceManagerClass;
+    private Class sequenceManagerClass = SequenceManagerInMemoryImpl.class;
+
+    public SequenceDescriptor()
+    {
+    }
 
+    public SequenceDescriptor(Class sequenceManagerClass)
+    {
+        setSequenceManagerClass(sequenceManagerClass);
+    }
+
+    /**
+     * @deprecated
+     */
     public SequenceDescriptor(JdbcConnectionDescriptor jcd)
     {
-        this.jcd = jcd;
+        setJdbcConnectionDescriptor(jcd);
     }
 
+    /**
+     * @deprecated
+     */
     public SequenceDescriptor(JdbcConnectionDescriptor jcd, Class 
sequenceManagerClass)
     {
-        this(jcd);
-        this.sequenceManagerClass = sequenceManagerClass;
+        setJdbcConnectionDescriptor(jcd);
+        setSequenceManagerClass(sequenceManagerClass);
     }
 
+    /**
+     * @deprecated
+     */
     public JdbcConnectionDescriptor getJdbcConnectionDescriptor()
     {
         return jcd;
     }
 
+    /**
+     * @deprecated
+     */
     public void setJdbcConnectionDescriptor(JdbcConnectionDescriptor jcd)
     {
         this.jcd = jcd;
@@ -69,9 +127,34 @@
 
     public void setSequenceManagerClass(Class sequenceManagerClass)
     {
+        if(!(SequenceManager.class.isAssignableFrom(sequenceManagerClass)))
+        {
+            throw new MetadataException("Wrong class type. Expect sub-class of 
"
+                    + SequenceManager.class.getName() + ", specified: " + 
sequenceManagerClass);
+        }
         this.sequenceManagerClass = sequenceManagerClass;
     }
 
+    public void setSequenceManagerClass(String sequenceManagerName)
+    {
+        Class sc = (Class) shortcutNamesMap.get(sequenceManagerName);
+        if(sc != null)
+        {
+            this.sequenceManagerClass = sc;
+        }
+        else
+        {
+            try
+            {
+                this.sequenceManagerClass = 
ClassHelper.getClass(sequenceManagerName);
+            }
+            catch(ClassNotFoundException e)
+            {
+                throw new MetadataException("Can't find/resolve sequence 
manager class '" + sequenceManagerName + "'");
+            }
+        }
+    }
+
     public Properties getConfigurationProperties()
     {
         return getProperties();
@@ -80,6 +163,17 @@
     public void setConfigurationProperties(Properties configurationProperties)
     {
         setProperties(configurationProperties);
+    }
+
+    public boolean isPerFieldSequences()
+    {
+        String result = getAttribute(ATTRIBUTE_PER_FIELD, "false");
+        return BooleanUtils.toBoolean(result);
+    }
+
+    public void setPerFieldSequences(boolean enable)
+    {
+        addAttribute(ATTRIBUTE_PER_FIELD, 
BooleanUtils.toStringTrueFalse(enable));
     }
 
     public String toString()



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to