You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jo...@apache.org on 2007/09/08 07:32:55 UTC
svn commit: r573785 - in /ofbiz/trunk/framework/entity: dtd/entitymodel.xsd
src/org/ofbiz/entity/GenericDelegator.java
src/org/ofbiz/entity/model/ModelEntity.java
src/org/ofbiz/entity/util/SequenceUtil.java
Author: jonesde
Date: Fri Sep 7 22:32:53 2007
New Revision: 573785
URL: http://svn.apache.org/viewvc?rev=573785&view=rev
Log:
Added sequence-bank-size to configure sequence bank sizes on a per-entity basis
Modified:
ofbiz/trunk/framework/entity/dtd/entitymodel.xsd
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericDelegator.java
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelEntity.java
ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/SequenceUtil.java
Modified: ofbiz/trunk/framework/entity/dtd/entitymodel.xsd
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/dtd/entitymodel.xsd?rev=573785&r1=573784&r2=573785&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/dtd/entitymodel.xsd (original)
+++ ofbiz/trunk/framework/entity/dtd/entitymodel.xsd Fri Sep 7 22:32:53 2007
@@ -65,6 +65,7 @@
<xs:attribute type="xs:string" name="package-name" use="required"/>
<xs:attribute type="xs:string" name="default-resource-name"/>
<xs:attribute type="xs:string" name="dependent-on"/>
+ <xs:attribute type="xs:string" name="sequence-bank-size"/>
<xs:attribute name="enable-lock" default="false">
<xs:simpleType>
<xs:restriction base="xs:token">
Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericDelegator.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericDelegator.java?rev=573785&r1=573784&r2=573785&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericDelegator.java (original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/GenericDelegator.java Fri Sep 7 22:32:53 2007
@@ -2480,8 +2480,11 @@
}
}
}
+
+ // might be null, but will usually match the entity name
+ ModelEntity seqModelEntity = this.getModelEntity(seqName);
- Long newSeqId = sequencer == null ? null : sequencer.getNextSeqId(seqName, staggerMax);
+ Long newSeqId = sequencer == null ? null : sequencer.getNextSeqId(seqName, staggerMax, seqModelEntity);
return newSeqId;
} catch (GenericEntityException e) {
Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelEntity.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelEntity.java?rev=573785&r1=573784&r2=573785&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelEntity.java (original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/model/ModelEntity.java Fri Sep 7 22:32:53 2007
@@ -76,6 +76,9 @@
/** The entity-name of the Entity that this Entity is dependent on, if empty then no dependency */
protected String dependentOn = "";
+ /** The sequence-bank-size of the Entity */
+ protected Integer sequenceBankSize = null;
+
/** A List of the Field objects for the Entity */
protected List fields = FastList.newInstance();
protected Map fieldsMap = null;
@@ -237,6 +240,15 @@
this.noAutoStamp = UtilXml.checkBoolean(entityElement.getAttribute("no-auto-stamp"), false);
this.neverCache = UtilXml.checkBoolean(entityElement.getAttribute("never-cache"), false);
this.autoClearCache = UtilXml.checkBoolean(entityElement.getAttribute("auto-clear-cache"), true);
+
+ String sequenceBankSizeStr = UtilXml.checkEmpty(entityElement.getAttribute("sequence-bank-size"));
+ if (UtilValidate.isNotEmpty(sequenceBankSizeStr)) {
+ try {
+ this.sequenceBankSize = Integer.valueOf(sequenceBankSizeStr);
+ } catch (NumberFormatException e) {
+ Debug.logError("Error parsing sequence-bank-size value [" + sequenceBankSizeStr + "] for entity [" + this.entityName + "]", module);
+ }
+ }
}
@@ -400,6 +412,10 @@
}
}
+ public Integer getSequenceBankSize() {
+ return this.sequenceBankSize;
+ }
+
public void updatePkLists() {
pks = FastList.newInstance();
nopks = FastList.newInstance();
@@ -1222,6 +1238,10 @@
if (!this.getAutoClearCache()) {
root.setAttribute("auto-clear-cache", "false");
+ }
+
+ if (this.getSequenceBankSize() != null) {
+ root.setAttribute("sequence-bank-size", this.getSequenceBankSize().toString());
}
if (UtilValidate.isNotEmpty(this.getTitle())) {
Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/SequenceUtil.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/SequenceUtil.java?rev=573785&r1=573784&r2=573785&view=diff
==============================================================================
--- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/SequenceUtil.java (original)
+++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/SequenceUtil.java Fri Sep 7 22:32:53 2007
@@ -75,14 +75,14 @@
this.idColName = idField.getColName();
}
- public Long getNextSeqId(String seqName, long staggerMax) {
+ public Long getNextSeqId(String seqName, long staggerMax, ModelEntity seqModelEntity) {
SequenceBank bank = (SequenceBank) sequences.get(seqName);
if (bank == null) {
synchronized(this) {
bank = (SequenceBank) sequences.get(seqName);
if (bank == null) {
- bank = new SequenceBank(seqName, this);
+ bank = new SequenceBank(seqName, seqModelEntity, this);
sequences.put(seqName, bank);
}
}
@@ -93,6 +93,7 @@
class SequenceBank {
public static final long defaultBankSize = 10;
+ public static final long maxBankSize = 5000;
public static final long startSeqId = 10000;
public static final int minWaitMillis = 5;
public static final int maxWaitMillis = 50;
@@ -102,13 +103,15 @@
long maxSeqId;
String seqName;
SequenceUtil parentUtil;
+ ModelEntity seqModelEntity;
- public SequenceBank(String seqName, SequenceUtil parentUtil) {
+ public SequenceBank(String seqName, ModelEntity seqModelEntity, SequenceUtil parentUtil) {
this.seqName = seqName;
this.parentUtil = parentUtil;
+ this.seqModelEntity = seqModelEntity;
curSeqId = 0;
maxSeqId = 0;
- fillBank(1);
+ fillBank(1, seqModelEntity);
}
public synchronized Long getNextSeqId(long staggerMax) {
@@ -123,7 +126,7 @@
curSeqId += stagger;
return retSeqId;
} else {
- fillBank(stagger);
+ fillBank(stagger, seqModelEntity);
if ((curSeqId + stagger) <= maxSeqId) {
Long retSeqId = new Long(curSeqId);
curSeqId += stagger;
@@ -135,18 +138,23 @@
}
}
- protected synchronized void fillBank(long stagger) {
+ protected synchronized void fillBank(long stagger, ModelEntity seqModelEntity) {
//Debug.logWarning("[SequenceUtil.SequenceBank.fillBank] Starting fillBank Thread Name is: " + Thread.currentThread().getName() + ":" + Thread.currentThread().toString(), module);
+ // no need to get a new bank, SeqIds available
+ if ((curSeqId + stagger) <= maxSeqId) return;
+
long bankSize = defaultBankSize;
+ if (seqModelEntity != null && seqModelEntity.getSequenceBankSize() != null) {
+ bankSize = seqModelEntity.getSequenceBankSize().longValue();
+ }
if (stagger > 1) {
// NOTE: could use staggerMax for this, but if that is done it would be easier to guess a valid next id without a brute force attack
bankSize = stagger * defaultBankSize;
}
+
+ if (bankSize > maxBankSize) bankSize = maxBankSize;
- // no need to get a new bank, SeqIds available
- if ((curSeqId + stagger) <= maxSeqId) return;
-
long val1 = 0;
long val2 = 0;