Craig,
Noncontiguous sequence will usually occur when the jdo impl or database
reserves N number of identifiers out of the JDO transaction but does not
use all of them. The second case occurs when the increment value is
greater than one.
Erik Bengtson
-----Original Message-----
Sent: Thursday, September 15, 2005 6:57 PM
Subject: Specification issues with Sequence
Hi Andy,
I'm reading the description of the three strategies again and I can't
figure it out. I think I understand nontransactional and contiguous, but
don't understand noncontiguous.
Obtaining a sequence number within the transaction implies an update of
the sequence so that no other transaction gets the same number. This
sounds like exclusive use of the sequence is required.
I agree with you that a no-args construction static method newInstance
is not sufficient to the task. I think we need a newInstance method that
at least supplies the name and strategy. So I'd propose
newInstance(String name, String strategy). The reason for String
strategy is that the xml is not exhaustive. It just provides values that
are "standard".
The xml and the text are in conflict. The text says "The strategy
attribute specifies the strategy for generating sequence numbers.
Standard values are...". This implies that the strategy is not
restricted to these three. But the xml says <!ATTLIST sequence strategy
(nontransactional|contiguous|noncontiguous) #REQUIRED> which implies
that only these three can be used.
I also don't know how the factory implementation can implement the
different strategies without some help from the JDOImplHelper. I suspect
that there is some design work needed here.
Other experts,
Any insights here?
Craig
On Sep 15, 2005, at 1:12 AM, Andy Jefferson wrote:
*** For factory sequences (not defined in the database) is the API
sufficient to use the sequence in the three modes: nontransactional,
contiguous, and noncontiguous? ***
Well, the implementation has to call factory.newInstance() to create the
sequence, but has no way of telling the factory whether it wants a
contiguous, noncontiguous, or nontransactional sequence.
Really depends whether the users sequence that is created by the factory
will
typically be able to operate in all 3 strategies. I would guess that
most
sequences would support one of the 3 strategies, so by saying that they
want
to use a particular factory, then they are implicitly electing the
strategy
that will be used.
If it is really necessary to allow a factory to create a sequence in any
of
the 3 strategies then we could add a requirement on the factory of
having a
static newInstance(int strategy) method, and the "strategy" value
specified
in the metadata could be passed in. If the metadata has no value for
strategy
then the newInstance() method is called.
*** Does Derby support sequences? ***
No.
DB2, PostgreSQL, Oracle, Firebird, SAPDB, McKoi and maybe some others
do.
The JDO impl can clearly generate a sequence using other means where
there is
no native RDBMS support.
--
Andy
Craig Russell
P.S. A good JDO? O, Gasp!