Hi again,
false alarm - no development will be necessary.
I found an undocumented attribute for the entity definition which does
exactly the same job:
sequence-bank-size
Here's an example ( how it can be done for
applications/party/entitydef/entitymodel.xml )
<entity entity-name="Party"
package-name="org.ofbiz.party.party"
title="Party Entity"
sequence-bank-size="1">
Perhaps I should focus more on documenting :))
Thanks for your support,
Deyan
On Thu, 2009-06-25 at 15:14 +0200, Jacques Le Roux wrote:
> Yes please do
>
> Jacques
>
> From: "Deyan Tsvetanov" <[email protected]>
> > Hi guys,
> >
> > so - any comments on the suggested improvement ?
> >
> > If no than probably I could open a jira enhancement issue and attach a
> > patch ?
> >
> > -- deyan
> >
> > On Mon, 2009-06-22 at 22:46 +0300, Deyan Tsvetanov wrote:
> >> Hi David,
> >>
> >> i am currently not referring only business organizations but government
> >> organizations as well. Ridiculous but still organizations ( and
> >> customers :)
> >>
> >> I'll give you an example: documents management - each incoming document
> >> MUST get an incoming number which MUST be sequential with no gaps ( so
> >> they can track the order the docs were received and make sure nobody
> >> fakes the date, or at least this was the way it was done 100 years ago
> >> when all the registers were on paper :)
> >>
> >> then you get outgoing documents - same thing.
> >>
> >> Then you get support ticket numbers: the organization must issue an
> >> incoming ticket number to the ticket creator - either on paper, signed
> >> and stamped, or via e-mail - digitally signed. The number has to has no
> >> gaps - in case it gets argued or goes to court ... or whatever.
> >>
> >> I could quote hundreds of cases which no gaps are required by our lovely
> >> government agencies and organizations. The country is called Bulgaria :)
> >>
> >> So my current project is related to bailiffs. These guys in general are
> >> a private business, but most of their activities are defined by the law.
> >> So the law tells them how they should number their cases - I can't argue
> >> - i'm just a programmer :) Neither could they - they'll loose their
> >> license if they don't comply.
> >>
> >> It's the same story with invoicing, it's the same story even with bus or
> >> cinema tickets printing ! :)
> >>
> >> Did I manage to answer your question ?
> >>
> >>
> >>
> >> On Mon, 2009-06-22 at 13:02 -0600, David E Jones wrote:
> >> > Deyan,
> >> >
> >> > I still can't figure out what you are trying to do. You mentioned
> >> > that countries have a requirement for no gaps in ID values, but which
> >> > ID values are you referring to? I know such requirements exist for
> >> > things like invoice IDs and even certain others like returns and
> >> > orders, and that is why code exists to take care of those cases.
> >> >
> >> > Which other cases are you trying to address?
> >> >
> >> > -David
> >> >
> >> >
> >> > On Jun 22, 2009, at 12:39 PM, Deyan Tsvetanov wrote:
> >> >
> >> > > well,
> >> > > it's easier for me to just copy+paste the getNextInvoiceSeq service,
> >> > > but i wanted to use a general sollution - less code to worry
> >> > > about :) and it thist feature would be definitelly used, lot of
> >> > > countries have the requirement for no gaps in ids.
> >> > >
> >> > > also there is an requirement to re-start the counter on certain
> >> > > periods. for example id should be year+sequence id.
> >> > >
> >> > > in getNextInvoiceId that's implemented. i thought of suggesting this
> >> > > feature as well, but theb i thought - it's pretty easy to make a
> >> > > service and schedule it yearly... so that goes away. but the
> >> > > SequenceBankSize prop i do think will be useful, so if you guyz
> >> > > agree than i'll go ahead and implement it. i'll do it anyway - i
> >> > > need this feature for a project :)
> >> > >
> >> > > -- deyan
> >> > > ------- Original message -------
> >> > >> From: David E Jones <[email protected]>
> >> > >> To: [email protected]
> >> > >> Cc: [email protected]
> >> > >> Sent: 22.6.'09, 21:22
> >> > >>
> >> > >> an interesting idea, although it makes me wonder... why not just
> >> > >> use the same technique that the getNextInvoiceId service uses?
> >> > >>
> >> > >> -David
> >> > >>
> >> > >>
> >> > >> On Jun 22, 2009, at 9:01 AM, Deyan Tsvetanov wrote:
> >> > >>
> >> > >>> I recall my comment about the sequences thread safety - in case we
> >> > >>> start
> >> > >>> 2 ofbiz instances against the same database :)
> >> > >>>
> >> > >>> But the 1st issue remains - configuring the sequence bank size for
> >> > >>> specific entities.
> >> > >>>
> >> > >>> I suggest adding a new column in SequenceValueItem - bank_size.
> >> > >>> If it is set to 0 than SequenceUtil will not create a SequenceBank
> >> > >>> for
> >> > >>> that entity but will read the current seq_id from the database
> >> > >>> instead.
> >> > >>> This is needed to ensure there will be no gaps in the sequence IDs
> >> > >>> for
> >> > >>> entities that do require no gaps because of legal requirements in
> >> > >>> some
> >> > >>> countries :)
> >> > >>>
> >> > >>> -- deyan
> >> > >>>
> >> > >>> On Mon, 2009-06-22 at 17:30 +0300, Deyan Tsvetanov wrote:
> >> > >>>> Hi again,
> >> > >>>>
> >> > >>>> finally I used GenericDelegator.getNextSeqIdLong() when creating
> >> > >>>> entities.
> >> > >>>>
> >> > >>>> It does increment the sequence by 1.
> >> > >>>>
> >> > >>>> However today I noticed, that in the database - sequence_value_item
> >> > >>>> table - the seq_id value gets incremented by 10.
> >> > >>>>
> >> > >>>> The reason is that the org.ofbiz.entity.util.SequenceUtil class
> >> > >>>> creates
> >> > >>>> a SequenceBank with the default value ot 10 IDs.
> >> > >>>>
> >> > >>>> This is a MAJOR problem. It would appear if the server dies or
> >> > >>>> gets a
> >> > >>>> hard restart for some reason ( or even JVM error ) - we'll end
> >> > >>>> up with
> >> > >>>> gaps.
> >> > >>>>
> >> > >>>> I couldn't find any API that forces the SequenceUtil to create a
> >> > >>>> SequnenceBank sized to 1 . Is there a way to do it ?
> >> > >>>>
> >> > >>>>
> >> > >>>> Also:
> >> > >>>>
> >> > >>>> I couldn't find any info in the mail threads regarding this
> >> > >>>> sequencing
> >> > >>>> mechanism being thread safe.
> >> > >>>> Although I ran several threads requesting next ID from the same
> >> > >>>> sequence
> >> > >>>> - and it works OK - I am not quite convinced what would happen
> >> > >>>> if we
> >> > >>>> have 2 ofbiz instances running against the same database. Is this
> >> > >>>> setup
> >> > >>>> supported ?
> >> > >>>>
> >> > >>>> Thanks in advance,
> >> > >>>> Deyan
> >> > >>>>
> >> > >>>> On Sat, 2009-06-13 at 15:27 +0200, Jacques Le Roux wrote:
> >> > >>>>> This has been already dicussed many times. You may find
> >> > >>>>> information using MarMail or Nable, some threads are even very
> >> > >>>>> detailled
> >> > >>>>>
> >> > >>>>> Good luck
> >> > >>>>>
> >> > >>>>> Jacques
> >> > >>>>>
> >> > >>>>> From: "Deyan Tsvetanov" <[email protected]>
> >> > >>>>>> Exactly, I knew I've seen it somewhere :)
> >> > >>>>>> "Enforced Sequence (no gaps, per organization)"
> >> > >>>>>>
> >> > >>>>>> Thanks guys,
> >> > >>>>>> I'll have a look at it.
> >> > >>>>>>
> >> > >>>>>> Another question: do you have any idea how this enforced
> >> > >>>>>> sequence might
> >> > >>>>>> behave in case of two ofbiz servers - in a cluster or sharing a
> >> > >>>>>> database ?
> >> > >>>>>>
> >> > >>>>>> My goal is to generate IDs without absolutely any gaps.
> >> > >>>>>>
> >> > >>>>>> Another very important requirement is that the order of the
> >> > >>>>>> record's
> >> > >>>>>> CREATED_DATE should match the order of the IDs. It is not
> >> > >>>>>> possible to go
> >> > >>>>>> back and fill a gap.
> >> > >>>>>>
> >> > >>>>>> Example:
> >> > >>>>>>
> >> > >>>>>> A good example:
> >> > >>>>>> ID | CREATED_DATE
> >> > >>>>>> ---------------------------------------------
> >> > >>>>>> 1 | 1 June 9:00 AM
> >> > >>>>>> 2 | 1 June 10:00 AM
> >> > >>>>>>
> >> > >>>>>> A bad example:
> >> > >>>>>>
> >> > >>>>>> ID | CREATED_DATE
> >> > >>>>>> ---------------------------------------------
> >> > >>>>>> 1 | 1 June 10:00 AM
> >> > >>>>>> 2 | 1 June 9:00 AM
> >> > >>>>>>
> >> > >>>>>>
> >> > >>>>>> I already have an idea of a workaround,
> >> > >>>>>> but I'll investigate the enforced sequence first.
> >> > >>>>>>
> >> > >>>>>> Thanks again,
> >> > >>>>>> Deyan
> >> > >>>>>>
> >> > >>>>>>
> >> > >>>>>>
> >> > >>>>>> On Sat, 2009-06-13 at 05:42 -0700, BJ Freeman wrote:
> >> > >>>>>>> Organization GL Settings >Available Internal
> >> > >>>>>>> Organizations>Company>Setup>Accounting Preferences
> >> > >>>>>>>
> >> > >>>>>>> David E Jones sent the following on 6/13/2009 5:15 AM:
> >> > >>>>>>>>
> >> > >>>>>>>> Take a look at the party/organization accounting preferences
> >> > >>>>>>>> in the
> >> > >>>>>>>> Accounting Manager. If you're looking for this sort of
> >> > >>>>>>>> sequencing for
> >> > >>>>>>>> invoices, orders, etc then it is already supported.
> >> > >>>>>>>>
> >> > >>>>>>>> -David
> >> > >>>>>>>>
> >> > >>>>>>>>
> >> > >>>>>>>> On Jun 13, 2009, at 5:44 AM, Deyan Tsvetanov wrote:
> >> > >>>>>>>>
> >> > >>>>>>>>> Hi list,
> >> > >>>>>>>>>
> >> > >>>>>>>>> I'd like to use a custom ID generator - for instance rather
> >> > >>>>>>>>> to start
> >> > >>>>>>>>> from 10000 and increment by 10 I'd like to start from 0,
> >> > >>>>>>>>> increment by 1
> >> > >>>>>>>>> leaving no empty values and probably append some other rules
> >> > >>>>>>>>> - like to
> >> > >>>>>>>>> reset to 0 in the beginning of each year and prefix the
> >> > >>>>>>>>> returned ID by
> >> > >>>>>>>>> the current year.
> >> > >>>>>>>>>
> >> > >>>>>>>>> Example:
> >> > >>>>>>>>>
> >> > >>>>>>>>> 200900001
> >> > >>>>>>>>> 200900002
> >> > >>>>>>>>> ....
> >> > >>>>>>>>> 200932110
> >> > >>>>>>>>> ....
> >> > >>>>>>>>> 201000001 <--- a new year starts.
> >> > >>>>>>>>>
> >> > >>>>>>>>> I know it may sound pretty dumb, but the law makers in some
> >> > >>>>>>>>> countries
> >> > >>>>>>>>> are not so smart.
> >> > >>>>>>>>>
> >> > >>>>>>>>> So - could somebody give me some hints - is it possible to
> >> > >>>>>>>>> specify a
> >> > >>>>>>>>> custom ID generator per field typed "id-ne" in the
> >> > >>>>>>>>> entitymodel.xml ?
> >> > >>>>>>>>>
> >> > >>>>>>>>> Thanks in advance,
> >> > >>>>>>>>> Deyan
> >> > >>>>>>>>>
> >> > >>>>>>>>
> >> > >>>>>>>>
> >> > >>>>>>>
> >> > >>>>>>
> >> > >>>>>
> >> > >>>>
> >> > >>>
> >> > >>
> >> > >
> >> >
> >>
> >
>