hi,

on the cvs head, something has been broken regarding dynamically 
changing mappings in the repository.

in a testcase of mine, i have a empty classdescriptor (only an 
id field is declared).
in the test, dynamically a collection descriptor is added, 
and a query is build using criteria on the items in the related
collection, this is done using path-expressions in the criteria.

in rc6 release (which we currently use), there is no problem,
testing against cvs head i get the following stacktrace:

Caused by: java.lang.ClassCastException
        at
org.apache.ojb.broker.metadata.ObjectReferenceDescriptor.getForeignKeyTarget
FieldDescriptors(Unknown Source)
        at
org.apache.ojb.broker.accesslayer.sql.TableAliasHandler.getTableAlias(Unknow
n Source)
        at
org.apache.ojb.broker.accesslayer.sql.TableAliasHandler.buildJoinTreeForAttr
ibute(Unknown Source)
        at
org.apache.ojb.broker.accesslayer.sql.TableAliasHandler.buildJoinTree(Unknow
n Source)
        at
org.apache.ojb.broker.accesslayer.sql.TableAliasHandler.buildJoinTree(Unknow
n Source)
        at
org.apache.ojb.broker.accesslayer.sql.TableAliasHandler.splitCriteria(Unknow
n Source)
        at
org.apache.ojb.broker.accesslayer.sql.TableAliasHandler.<init>(Unknown
Source)
        at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.<init>(Unknown
Source)
        at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.<init>(Unknown
Source)
        at
org.apache.ojb.broker.accesslayer.sql.SqlSelectStatement.<init>(Unknown
Source)
        at
org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl.getPreparedSel
ectStatement(Unknown Source)
        at
org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeQuery(Unknown
Source)
        at
org.apache.ojb.broker.accesslayer.batch.BatchManagerImpl.executeQuery(Unknow
n Source)
        at
org.apache.ojb.broker.accesslayer.RsQueryObject.performQuery(Unknown Source)
        at org.apache.ojb.broker.accesslayer.RsIterator.<init>(Unknown
Source)
        at
org.apache.ojb.broker.accesslayer.RsIteratorFactoryImpl.createRsIterator(Unk
nown Source)
        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getRsIteratorFromQuery(Unkn
own Source)
        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getIteratorFromQuery(Unknow
n Source)
        at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown
Source)
        at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown
Source)
        ... 19 more


some analysis revealed that in class
org.apache.ojb.broker.metadata.ObjectReferenceDescriptor
in method FieldDescriptor[]
getForeignKeyTargetFieldDescriptors(ClassDescriptor targetCld)
the given argument targetCld object does not appear as key in the map

after adding

        if (m_fkTargetFieldMap.containsKey(targetCld))
        {
                ....
                <body>
                ...
        }

to this method, i get the following stacktrace:

Caused by: java.lang.NullPointerException
        at
org.apache.ojb.broker.accesslayer.sql.TableAliasHandler$Join.getColumns(Unkn
own Source)
        at
org.apache.ojb.broker.accesslayer.sql.TableAliasHandler$Join.<init>(Unknown
Source)
        at
org.apache.ojb.broker.accesslayer.sql.TableAliasHandler.addJoin(Unknown
Source)
        at
org.apache.ojb.broker.accesslayer.sql.TableAliasHandler.getTableAlias(Unknow
n Source)
        at
org.apache.ojb.broker.accesslayer.sql.TableAliasHandler.buildJoinTreeForAttr
ibute(Unknown Source)
        at
org.apache.ojb.broker.accesslayer.sql.TableAliasHandler.buildJoinTree(Unknow
n Source)
        at
org.apache.ojb.broker.accesslayer.sql.TableAliasHandler.buildJoinTree(Unknow
n Source)
        at
org.apache.ojb.broker.accesslayer.sql.TableAliasHandler.splitCriteria(Unknow
n Source)
        at
org.apache.ojb.broker.accesslayer.sql.TableAliasHandler.<init>(Unknown
Source)
        at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.<init>(Unknown
Source)
        at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.<init>(Unknown
Source)
        at
org.apache.ojb.broker.accesslayer.sql.SqlSelectStatement.<init>(Unknown
Source)
        at
org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl.getPreparedSel
ectStatement(Unknown Source)
        at
org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeQuery(Unknown
Source)
        at
org.apache.ojb.broker.accesslayer.batch.BatchManagerImpl.executeQuery(Unknow
n Source)
        at
org.apache.ojb.broker.accesslayer.RsQueryObject.performQuery(Unknown Source)
        at org.apache.ojb.broker.accesslayer.RsIterator.<init>(Unknown
Source)
        at
org.apache.ojb.broker.accesslayer.RsIteratorFactoryImpl.createRsIterator(Unk
nown Source)
        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getRsIteratorFromQuery(Unkn
own Source)
        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getIteratorFromQuery(Unknow
n Source)
        at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown
Source)
        at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown
Source)
        ... 19 more


the same holds for method FieldDescriptor[]
getForeignKeyFieldDescriptors(ClassDescriptor cld).

querying for objects using the same dynamically changed repository, but not
querying 
for classes affected by that change, there are no problems, so only the by
changes affected
descriptors in the repositoty seem to give me problems.

so, if you guys are refactoring stuff and you were not aware of this
problem, now you are :)

Roger Janssen

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to