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]