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]