At 09:25 PM 12/30/2002 +0100, Armin Waibel wrote:
It didn't use to. Plus we allow for other OR mapping tools andHi again,> > > > > > > > > I see what the problem is, but am not sure what the solution is. > > > > > > > > > > I have a an abstract class that is implemented with a number of > > > >classes. > > > > > I'm trying to create a unique key for an instance class, but when > >I > > > > > check there are no field descriptors for the base class. > > > > > > > >Have you tried > > > >Class realClass = abstractBaseClass.getClass(); > > > >ClassDescriptor cld = broker.getClassDescriptor(realClass); > > > >to get the real class descriptor? Then it should possible to get the > > > >field. > > > > > > This doesn't help because I'm just calling the getUniqueId within OJB > > > and I don't have any control over what it does except through > > > the repository. > > > > > >I do not understand this. You declare your 'valueId' as a autoincrement > >field, but in your stack trace it seems you do a direct call > >PB.getUniqueId? > > Well I did add this because 0.9.8 was complaining about this field being > absent. I have removed it without any change in the behavior. > > > > > > > > >>>org.apache.ojb.broker.singlevm.DelegatingPersistenceBroker.getUniqueI > > > > > >>> > > > > >gov.lanl.Database.OJBDatabaseMgr.getNextSeq(OJBDatabaseMgr.java:582) > > > > > >>> > at > > > > > >>> > > > > > > > > > > > > >>>gov.lanl.COAS.AbstractObservationValue_.<init>(AbstractObservationVal > > > >Could you post a code snip to ease my understanding? > >But by the way this seems to be a bug. > > I'm not sure what you mean by a code snippet. When I call the class > constructor, > I call getUniqueId with the class name and attribute: > > This is the specific method I call . > /** > * return next number in a persistent sequence > */ > public long getNextSeq(Class clazz, String fieldName) { > cat.debug("getNextSeq: "+clazz.getName() + " "+fieldName); > // return sequenceManager.getUniqueId(clazz, fieldName); > try { // get the CLD for the base class ClassDescriptor cld = broker.getClassDescriptor(clazz); if( (cld.isAbstract || cld.isInterface()) && cld.isExtent()) { // get the first found extent class clazz = cld.getExtentClasses().get(0) // we grap the first } > return broker.getUniqueId(clazz, fieldName); > } catch (org.apache.ojb.broker.PersistenceBrokerException e) { > cat.error("Can't get ID from broker: " + clazz.getName() + " " > + fieldName, e); > > // System.exit(1); > return 0; > } > } > Maybe this could be a workaround for your problem. Keep in mind that getUniqueId(clazz, fieldName) was deprecated and will be replaced by getUniqueId(FieldDescriptor field). What I don't understand is, why you need a getNextSeq method, when you define autoincrement fields? OJB does all sequence key generation automatic for you.
need some level of control of ids, independent of the tool.
OK. I made this change and that problem went away, but another
one came up. I now get an error from hsqldb that the requested function
is not supported:
[org.apache.ojb.broker.accesslayer.JdbcAccess] ERROR: SQLException during the ex
ecution of the insert (for a gov.lanl.COAS.String_): This function is not supported
This function is not supported
java.sql.SQLException: This function is not supported
at org.hsqldb.Trace.getError(Trace.java:180)
at org.hsqldb.Trace.getError(Trace.java:144)
at org.hsqldb.Trace.error(Trace.java:192)
at org.hsqldb.jdbcPreparedStatement.getNotSupported(jdbcPreparedStatemen
t.java:1602)
at org.hsqldb.jdbcPreparedStatement.setCharacterStream(jdbcPreparedStatement.java:1375)
at org.apache.ojb.broker.platforms.PlatformDefaultImpl.setObjectForStatement(PlatformDefaultImpl.java:216)
at org.apache.ojb.broker.accesslayer.StatementManager.bindInsert(StatementManager.java:487)
at org.apache.ojb.broker.accesslayer.JdbcAccess.executeInsert(JdbcAccess.java:194)
at org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.storeToDb(PersistenceBrokerImpl.java:1966)
at org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.store(PersistenceBrokerImpl.java:1905)
at org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.store(PersistenceBrokerImpl.java:614)
at org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.storeReferences(PersistenceBrokerImpl.java:641)
at org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.storeToDb(PersistenceBrokerImpl.java:1938)
at org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.store(PersistenceBrokerImpl.java:1905)
at org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.store(PersistenceBrokerImpl.java:614)
at org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.storeCollectionObject(PersistenceBrokerImpl.java:789)
at org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.storeCollections(PersistenceBrokerImpl.java:769)
at org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.storeToDb(PersistenceBrokerImpl.java:1989)
at org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.store(PersistenceBrokerImpl.java:1905)
at org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.store(PersistenceBrokerImpl.java:614)
at org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.store(PersistenceBrokerImpl.java:588)
at org.apache.ojb.broker.singlevm.DelegatingPersistenceBroker.store(DelegatingPersistenceBroker.java:123)
at gov.lanl.Database.OJBDatabaseMgr.insertElement(OJBDatabaseMgr.java:30
Thanks,
Dave
HTH
regards,
Armin
> thanks,
>
> Dave
>
>
> >Armin
> >
> >
> > >
> > > >Or define your base class with all fields in the repository file
and
> > > >declare
> > > >all extent-classes in the class-descriptor. Then the default
sequence
> > > >manager implementations should be able to generate a id unique
> > > >across all extents.
> > > >Or define only the abstract class with all extent-classes, then
you
> > > >should be
> > > >able to get one of the extent classes.
> > >
> > > This is how I have it defined in my repository_user.xml
> > >
> > > <class-descriptor class="gov.lanl.COAS.ObservationValue_">
> > > <extent-class class-ref="gov.lanl.COAS.Multimedia_"/>
> > > <extent-class class-ref="gov.lanl.COAS.NoInformation_"/>
> > > <extent-class class-ref="gov.lanl.COAS.Numeric_"/>
> > > <extent-class class-ref="gov.lanl.COAS.ObservationId_"/>
> > > <extent-class class-ref="gov.lanl.COAS.QualifiedCodeInfo_"/>
> > > <extent-class class-ref="gov.lanl.COAS.QualifiedPersonId_"/>
> > > <extent-class class-ref="gov.lanl.COAS.Range_"/>
> > > <extent-class class-ref="gov.lanl.COAS.String_"/>
> > > <extent-class class-ref="gov.lanl.COAS.TimeSpan_"/>
> > > <extent-class
> >class-ref="gov.lanl.COAS.UniversalResourceIdentifier_"/>
> > > <extent-class class-ref="gov.lanl.COAS.Empty_"/>
> > > </class-descriptor>
> > >
> > > and an example for one of the extent classes
> > >
> > > <class-descriptor
> > > isolation-level="read-uncommitted"
> > > class="gov.lanl.COAS.Empty_"
> > > table="OjbEmpty_"
> > > >
> > > <field-descriptor id="1"
> > > name="valueId"
> > > jdbc-type="INTEGER"
> > > column="valueId"
> > > primarykey="true"
> > > autoincrement="true"
> > > />
> > >
> > > </class-descriptor>
> > >
> > > there is no table for the ObservationValue_ class because it is an
> >Abstract
> > > Class.
> > > this is what I've been using for 0.9.7 and it works fine. this
fails
> >under
> > > 0.9.8
> > > when trying to get a uniqueid for each of the extent classes. I
think
> >this
> > > is what
> > > you are describing in your last suggestion.
> > >
> > > thanks,
> > > Dave
> > >
> > >
> > > >HTH
> > > >regards,
> > > >Armin
> > > >
> > > > >
> > > > > This all worked fine in 0.9.7, but perhaps there has been some
> >change
> > > > > in the semantics? We put the necessary table elements in each
> > > >instance
> > > > > of the class but not in the table for the base class (which
> >actually
> > > > > doesn't exist).
> > > > >
> > > > > Thanks,
> > > > >
> > > > > Dave
> > > > >
> > > > > At 11:35 AM 12/30/2002 -0700, David Forslund wrote:
> > > > > >When I put a check inside of the getFieldDescriptor, I find
that
> >it
> > > >is
> > > > > >being called by HighLowSequence
> > > > > >with the argument ojbConcreteClass and is returning a null
for
> >the
> > > > > >field. Is this what is expected?
> > > > > >
> > > > > >Dave
> > > > > >
> > > > > >At 10:43 AM 12/30/2002 -0700, David Forslund wrote:
> > > > > >>It wasn't null in my code that called the OJB code. This
code
> >has
> > > >been
> > > > > >>working fine in 0.9.7. If the xml needed to change for
some
> > > >reason,
> > > > > >>it might have caused this. I'm passing in a string of a
> >variable
> > > >that
> > > > > >>is defined in my table. Whether OJB properly connects a
> >"Field"
> > > > > >>to that table is where the problem may be. It did in the
past
> > > >without
> > > > > >>any problem. I have a hard time telling exactly what
changed
> > > >between
> > > > > >>these two versions.
> > > > > >>
> > > > > >>Thanks,
> > > > > >>
> > > > > >>Dave
> > > > > >>At 01:49 PM 12/30/2002 +0100, Armin Waibel wrote:
> > > > > >>>Hi David,
> > > > > >>>
> > > > > >>>the sequence generator implementation now only generate
> > > > > >>>id's for fields declared in the repository.
> > > > > >>>I think you got this NullPointerException, because SM get a
> > > > > >>>'null' field:
> > > > > >>>
> > > > > >>><snip SequenceManagerHelper>
> > > > > >>>public static String buildSequenceName(
> > > > > >>>PersistenceBroker brokerForClass, FieldDescriptor field)
> > > > > >>> {
> > > > > >>>48--->!!! ClassDescriptor cldTargetClass =
> > > >field.getClassDescriptor();
> > > > > >>> String seqName = field.getSequenceName();
> > > > > >>>.....
> > > > > >>></snip>
> > > > > >>>
> > > > > >>>So check your code if the given FiledDescriptor wasn't
null.
> > > > > >>>
> > > > > >>>HTH
> > > > > >>>
> > > > > >>>regards,
> > > > > >>>Armin
> > > > > >>>
> > > > > >>>----- Original Message -----
> > > > > >>>From: "David Forslund" <[EMAIL PROTECTED]>
> > > > > >>>To: "OJB Users List" <[EMAIL PROTECTED]>
> > > > > >>>Sent: Monday, December 30, 2002 1:33 AM
> > > > > >>>Subject: Re: problems with ojb 0.9.8
> > > > > >>>
> > > > > >>>
> > > > > >>> > I'm trying to upgrade from 0.9.7 to 0.9.8 and am having
some
> > > >problems
> > > > > >>>that
> > > > > >>> > I don't understand yet.
> > > > > >>> >
> > > > > >>> > I'm getting the warning about not finding an
autoincrement
> > > >attribute
> > > > > >>>for a
> > > > > >>> > class. I'm not sure when
> > > > > >>> > I have to have an autoincrement attribute, but the
> >primarykey
> > > >for the
> > > > > >>>class
> > > > > >>> > I'm using is a varchar
> > > > > >>> > so that autoincrement doesn't seem appropriate.
> > > > > >>> >
> > > > > >>> > Subsequently, I get an null pointer exception error in
the
> > > > > >>> > SequenceManagerHelper that I don't understand:
> > > > > >>> > java.lang.NullPointerException
> > > > > >>> > at
> > > > > >>> >
> > > > >
> > > >
> >
>>>org.apache.ojb.broker.util.sequence.SequenceManagerHelper.buildSequen
> > > >ceN
> > > > > >>>ame(SequenceManagerHelper.java:48)
> > > > > >>> > at
> > > > > >>> >
> > > > >
> > > >
> >
>>>org.apache.ojb.broker.util.sequence.SequenceManagerHiLoImpl.getUnique
> > > >Id(
> > > > > >>>SequenceManagerHiLoImpl.java:49)
> > > > > >>> > at
> > > > > >>> >
> > > > >
> > > >
> >
>>>org.apache.ojb.broker.singlevm.PersistenceBrokerImpl.getUniqueId(Pers
> > > >ist
> > > > > >>>enceBrokerImpl.java:2258)
> > > > > >>> > at
> > > > > >>> >
> > > > >
> > > >
> >
>>>org.apache.ojb.broker.singlevm.DelegatingPersistenceBroker.getUniqueI
> > > >d(D
> > > > > >>>elegatingPersistenceBroker.java:242)
> > > > > >>> > at
> > > > > >>> >
> > >
>gov.lanl.Database.OJBDatabaseMgr.getNextSeq(OJBDatabaseMgr.java:582)
> > > > > >>> > at
> > > > > >>> >
> > > > >
> > > >
> >
>>>gov.lanl.COAS.AbstractObservationValue_.<init>(AbstractObservationVal
> > > >ue_
> > > > > >>>.java:54)
> > > > > >>> > at gov.lanl.COAS.Empty_.<init>(Empty_.java:31)
> > > > > >>> >
> > > > > >>> > I'm pretty sure that it is being called correctly from
my
> >code
> > > >(which
> > > > > >>>works
> > > > > >>> > fine in 0.9.7), but it is failing now.
> > > > > >>> >
> > > > > >>> > An unrelated warning in a different application is that
OJB
> >says
> > > >I
> > > > > >>>should
> > > > > >>> > use addLike() for using LIKE, but it
> > > > > >>> > seems to use the right code anyway. Is this just a
> >deprecation
> > > >issue?
> > > > > >>>I
> > > > > >>> > don't see why it bothers
> > > > > >>> > to tell me this, if it can figure what to do anyway.
> > > > > >>> >
> > > > > >>> > Thanks,
> > > > > >>> >
> > > > > >>> > Dave
> > > > > >>> >
> > > > > >>> >
> > > > > >>> > --
> > > > > >>> > To unsubscribe, e-mail:
> > > > > >>><mailto:[EMAIL PROTECTED]>
> > > > > >>> > For additional commands, e-mail:
> > > > > >>><mailto:[EMAIL PROTECTED]>
> > > > > >>> >
> > > > > >>> >
> > > > > >>> >
> > > > > >>>
> > > > > >>>
> > > > > >>>--
> > > > > >>>To unsubscribe, e-mail:
> > > ><mailto:[EMAIL PROTECTED]>
> > > > > >>>For additional commands, e-mail:
> > > ><mailto:[EMAIL PROTECTED]>
> > > > > >>
> > > > > >>
> > > > > >>--
> > > > > >>To unsubscribe, e-mail:
> > > ><mailto:[EMAIL PROTECTED]>
> > > > > >>For additional commands, e-mail:
> > > ><mailto:[EMAIL PROTECTED]>
> > > > > >
> > > > > >
> > > > > >--
> > > > > >To unsubscribe, e-mail:
> > > ><mailto:[EMAIL PROTECTED]>
> > > > > >For additional commands, e-mail:
> > > ><mailto:[EMAIL PROTECTED]>
> > > > >
> > > > >
> > > > > --
> > > > > To unsubscribe, e-mail:
> > > ><mailto:[EMAIL PROTECTED]>
> > > > > For additional commands, e-mail:
> > > ><mailto:[EMAIL PROTECTED]>
> > > > >
> > > > >
> > > > >
> > > >
> > > >
> > > >--
> > > >To unsubscribe, e-mail:
> ><mailto:[EMAIL PROTECTED]>
> > > >For additional commands, e-mail:
> ><mailto:[EMAIL PROTECTED]>
> > >
> > >
> > > --
> > > To unsubscribe, e-mail:
> ><mailto:[EMAIL PROTECTED]>
> > > For additional commands, e-mail:
> ><mailto:[EMAIL PROTECTED]>
> > >
> > >
> > >
> >
> >
> >--
> >To unsubscribe, e-mail:
<mailto:[EMAIL PROTECTED]>
> >For additional commands, e-mail:
<mailto:[EMAIL PROTECTED]>
>
>
> --
> To unsubscribe, e-mail:
<mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail:
<mailto:[EMAIL PROTECTED]>
>
>
>
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
