After some reflection on this subject, I arrive to : getNextSeqId is use normaly to get an single id that identify an entity : Invoice.invoiceId, Order.orderId, Party.partyId etc ... It's easier to remove the problematic instruction but bypasses getNextSeqId purpose.
For multiple sequence on Entity I suggest to create new function on delegator : getNextSequence (String entityName, String diff, long staggerMax) that manage sequence as getNextSeqId but analyse just the validity of entityName and generate sequenceValueId : entityName.diff. As this, Delegator continue to work only on entity and not use for other not in relation with entitymodel. For sequence not in relation with entity, I can extend sequenceUtil to have a function SequenceUtil.getNextSequence(String key, long staggerMax). Brett can you give me an example for your proposal ? I don't really understand your improvement. If you wait to read, Have a nice end year ;) Nicolas Le mercredi 23 décembre 2009 à 13:49 -0700, Brett Palmer a écrit : > I confirmed that if you use the delegator.getNextSeqId() you will get an > exception every time it is used with a complaint that an entity doesn't > exist for the sequence you requested. It does give still generate an ID but > the exception is a little concerning when you are running in a production > environment. This exception probably isn't intended but is a consequence of > the call to look for the entity name. > > I would prefer we just outputted a warning log and not threw an exception. > > Another request for the sequence generator is the ability to specify the gap > between the next sequence ID update. This can be configured in the entity > engine but only for those IDs that have a corresponding entity. If you try > to use a generic sequencer with no attached entity the default is 10 which > can be low for a production environment with multiple servers. Could we add > a column to the SequenceValueItem to include the next increment value? > > > Brett > > Here is the stack trace: > > > ---- exception report > ---------------------------------------------------------- > Error getting entity definition from model > Exception: org.ofbiz.entity.GenericModelException > Message: Could not find definition for entity name DummySequence > ---- stack trace > --------------------------------------------------------------- > org.ofbiz.entity.GenericModelException: Could not find definition for entity > name DummySequence > org.ofbiz.entity.model.ModelReader.getModelEntity(ModelReader.java:451) > org.ofbiz.entity.DelegatorImpl.getModelEntity(DelegatorImpl.java:1544) > org.ofbiz.entity.DelegatorImpl.getNextSeqIdLong(DelegatorImpl.java:1693) > org.ofbiz.entity.DelegatorImpl.getNextSeqId(DelegatorImpl.java:1655) > org.ofbiz.entity.DelegatorImpl.getNextSeqId(DelegatorImpl.java:1651) > com.automationgroups.pe.util.InventoryContainer.start(InventoryContainer.java:27) > org.ofbiz.base.container.ContainerLoader.start(ContainerLoader.java:101) > org.ofbiz.base.start.Start.startStartLoaders(Start.java:272) > org.ofbiz.base.start.Start.startServer(Start.java:322) > org.ofbiz.base.start.Start.start(Start.java:326) > org.ofbiz.base.start.Start.main(Start.java:409) > -------------------------------------------------------------------------------- > > 2009-12-23 13:29:07,218 (main) [ SequenceUtil.java:236:WARN ] > [SequenceUtil.SequenceBank.fillBank] first select failed: will try to add > new row, result set was empty for sequence [DummySequence] > Used SQL: SELECT SEQ_ID FROM SEQUENCE_VALUE_ITEM WHERE > SEQ_NAME='DummySequence' > Thread Name is: main:Thread[main,5,main] > 2009-12-23 13:29:07,312 (main) [ SequenceUtil.java:341:INFO ] Got bank > of sequenced IDs for [DummySequence]; curSeqId=10000, maxSeqId=10010, > bankSize=10 > 2009-12-23 13:29:07,312 (main) [ InventoryContainer.java:28 :INFO ] Here is > the sample sequence Id: 10000 > 2009-12-23 13:29:07,343 (main) [ GenericDispatcher.java:61 :INFO ] Creating > new dispatcher [RMIDispatcher] (main) > > > > On Wed, Dec 23, 2009 at 12:54 PM, Scott Gray > <scott.g...@hotwaxmedia.com>wrote: > > > It looks to me as though an exception is being logged rather than thrown, > > is the id still being generated? > > > > Regards > > Scott > > > > HotWax Media > > http://www.hotwaxmedia.com > > > > > > On 24/12/2009, at 3:31 AM, Nicolas Malin wrote: > > > > Hi all, > >> > >> It's possible that this subject has been already discussed here but I > >> don't find any trace in the archives. > >> > >> A long time ago, I used delegator.getNextSeqId to use multiple sequences > >> in an entity like invoice (SALES, PURCHASE, ...). > >> Example : in France we use a sequence for all invoiceType and I call the > >> delegator this way : > >> invoiceId = delegator.getNextSeqId("Invoice." + invoiceTypeId); > >> To have : > >> for sales : VE10000, VE10001, VE10002, ... > >> for purchases : AC10000, AC10001, AC10002, ... > >> > >> Now when using this, GenericDelegator throws an exception : "Could not > >> find definition for entity name Invoice.PURCHASE_INVOICE" > >> > >> I checked the code (GenericDelegotor.java:3049 on trunk) and found : > >> // might be null, but will usually match the entity name > >> ModelEntity seqModelEntity = this.getModelEntity(seqName); > >> > >> I suppose that there are some reasons to check the seqName as an > >> entityName but I don't understand why. > >> > >> To manage many sequences for one entity, do you use directly the > >> sequenceUtil ? > >> > >> Is it possible to add an escape case before checking entity (as add test > >> if we find a point) ? Or extend getNextSeqId to manage prefix/suffix > >> parameters ? > >> > >> Nicolas > >> > >> -- > >> Nicolas MALIN > >> Consultant > >> Tél : 06.17.66.40.06 > >> Site projet : http://www.neogia.org/ > >> ------- > >> Société LibrenBerry > >> Tél : 02.48.02.56.12 > >> Site : http://www.librenberry.net/ > >> > >> > > -- Nicolas MALIN Consultant Tél : 06.17.66.40.06 Site projet : http://www.neogia.org/ ------- Société LibrenBerry Tél : 02.48.02.56.12 Site : http://www.librenberry.net/