Hi Phil,

sorry for the late reply.
Can you try to run your test against rc6 or better against latest from CVS to see if the problem still exists?
Since rc5 many changes are made, so maybe this will be fixed.


regards,
Armin

Phil Armour wrote:
Update part 2:

I now believe this to be a bug. I am currently using rc5.

I have debugged and ended up replacing the line that retrieves the
base_alias in the buildSuperJoinTree method of SqlQueryStatement. My
code is in between the *********** rows.


I have not tested it thoroughly nor have I looked at the ramifications
that I could have on other code.  I am merely suggesting it as a
potential fix to a potential bug.  I am requesting someone please look
at this case and (a) verify that it is a bug and (b) verify that my fix
is a valid fix.

My code for the method would be:


protected void buildSuperJoinTree( TableAlias left, ClassDescriptor cld, String name ) {

        Iterator objRefs =
cld.getObjectReferenceDescriptors().iterator();
        while( objRefs.hasNext() )
        {
            ObjectReferenceDescriptor objRef =
(ObjectReferenceDescriptor) objRefs.next();

            FieldDescriptor[] leftFields =
objRef.getForeignKeyFieldDescriptors(cld);

            ClassDescriptor refCld =
cld.getRepository().getDescriptorFor(objRef.getItemClassName());

            if (objRef.getPersistentField() instanceof
AnonymousPersistentFieldForInheritance)
            {

/**********************/

//The other methods store the alias/path in the map using only
the first part of // the path string as the key. e.g. "objectA" instead of
"objectA.objectB"
// This fix takes the first part of the existing path
string.
String shrtName = name;
int sepPos = shrtName.indexOf(".");
if (sepPos >= 0){
shrtName = shrtName.substring(0, sepPos);
}
TableAlias base_alias = getTableAliasForPath( shrtName, null );


          //commented out the old version
          //TableAlias base_alias = getTableAliasForPath( name, null );

/**********************/



String aliasName = String.valueOf(getAliasChar()) +
m_aliasCount++;
TableAlias right = new TableAlias( refCld, aliasName,
false, null );


Join join1to1 = new Join(left, leftFields, right,
refCld.getPkFields(), false, "superClass");
base_alias.addJoin( join1to1 );


buildSuperJoinTree( right, refCld, name);
}
}
}




-----Original Message-----
From: Phil Armour Sent: Monday, April 12, 2004 1:50 PM
To: OJB Users List
Subject: RE: addEqualTo throws Exception on 2-deep reference-descriptor


Update on my search:

I have began going through the source and the null pointer is a result
of the following line in buildSuperJoinTree() in class
SqlQueryStatement:

TableAlias base_alias = getTableAliasForPath( name, null );

What is happening is that the variable 'name' is set to the value:
"mStakeholder.mTopicsOfInterest"
The result of calling the method getTableAliasForPath with that string
is a null value is set to base_alias.  This obviously results in a NPE.
If someone could advise me which direction I should look for the problem
from here.  I see it as two options: check the getTableAliasForPath()
method to see why it returns null; Find out why the variable name is set
to "mStakeholder.mTopicsOfInterest".

Thanks.


-----Original Message----- From: Phil Armour Sent: Monday, April 12, 2004 12:12 PM To: [EMAIL PROTECTED] Subject: addEqualTo throws Exception on 2-deep reference-descriptor

Hi,
I am getting a null pointer exception when adding an EqualTo query term
that references the second embedded object. For example: I have a
Contact object that contains a reference-descriptor to a Stakeholder.
This stakeholder then contains a collection-descriptor to other Objects
(TopicsOfInterest). What I am trying to do is add the following
criteria term:
crit.addEqualTo("mStakeholder.mTopicsOfInterest.mId",new
Long(getDdid()));


The Exception I get is:
java.lang.NullPointerException
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.buildSuperJoinTr
ee(SqlQueryStatement.java:1531)
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.getTableAlias(Sq
lQueryStatement.java:1006)
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.buildJoinTreeFor
Column(SqlQueryStatement.java:1501)
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.buildJoinTree(Sq
lQueryStatement.java:1478)
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.buildJoinTree(Sq
lQueryStatement.java:1467)
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.splitCriteria(Sq
lQueryStatement.java:1556)
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.<init>(SqlQueryS
tatement.java:155)
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.<init>(SqlQueryS
tatement.java:111)
at
org.apache.ojb.broker.accesslayer.sql.SqlSelectStatement.<init>(SqlSelec
tStatement.java:89)
at
org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl.getPrepare
dSelectStatement(SqlGeneratorDefaultImpl.java:196)
at
org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeQuery(JdbcAccess
Impl.java:306)
at
org.apache.ojb.broker.accesslayer.RsIterator.<init>(RsIterator.java:209)
at
org.apache.ojb.broker.core.RsIteratorFactoryImpl.createRsIterator(RsIter
atorFactoryImpl.java:95)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getRsIteratorFromQuery(
PersistenceBrokerImpl.java:2426)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getIteratorFromQuery(Pe
rsistenceBrokerImpl.java:1766)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Pe
rsistenceBrokerImpl.java:1372)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Pe
rsistenceBrokerImpl.java:1563)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Pe
rsistenceBrokerImpl.java:1599)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Pe
rsistenceBrokerImpl.java:1588)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQu
ery(DelegatingPersistenceBroker.java:322)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQu
ery(DelegatingPersistenceBroker.java:322)
at
appian.tracking.services.TrackingService.getCollection(TrackingService.j
ava:94)
at
appian.tracking.services.CaseService.getCasesByFolder(CaseService.java:3
58)
at
appian.tracking.services.CaseService.getCasesByFolder(CaseService.java:3
36)
at
appian.tracking.cases.case056.TOISearch.generate(TOISearch.java:62)
at
appian.tracking.actions.CustomCaseReportAction.execute(CustomCaseReportA
ction.java:40)
at
org.apache.struts.action.RequestProcessor.processActionPerform(RequestPr
ocessor.java:484)
at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:
274)
at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:284)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:204)
at
appian.tracking.util.loginFilter.doFilter(loginFilter.java:104)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:233)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:204)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValv
e.java:257)
at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:151)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5
64)
at
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardCon
textValve.java:245)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValv
e.java:199)
at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:151)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5
64)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
:195)
at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:151)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java
:164)
at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:149)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5
64)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.
java:156)
at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:151)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5
64)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:972)
at
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:206)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:82
8)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processC
onnection(Http11Protocol.java:700)
at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:58
4)
at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool
.java:683)
at java.lang.Thread.run(Thread.java:534)
rethrown as
org.apache.ojb.broker.PersistenceBrokerException
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Pe
rsistenceBrokerImpl.java:1570)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Pe
rsistenceBrokerImpl.java:1599)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Pe
rsistenceBrokerImpl.java:1588)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQu
ery(DelegatingPersistenceBroker.java:322)
at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQu
ery(DelegatingPersistenceBroker.java:322)
at
appian.tracking.services.TrackingService.getCollection(TrackingService.j
ava:94)
at
appian.tracking.services.CaseService.getCasesByFolder(CaseService.java:3
58)
at
appian.tracking.services.CaseService.getCasesByFolder(CaseService.java:3
36)
at
appian.tracking.cases.case056.TOISearch.generate(TOISearch.java:62)
at
appian.tracking.actions.CustomCaseReportAction.execute(CustomCaseReportA
ction.java:40)
at
org.apache.struts.action.RequestProcessor.processActionPerform(RequestPr
ocessor.java:484)
at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:
274)
at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:284)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:204)
at
appian.tracking.util.loginFilter.doFilter(loginFilter.java:104)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:233)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:204)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValv
e.java:257)
at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:151)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5
64)
at
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardCon
textValve.java:245)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValv
e.java:199)
at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:151)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5
64)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
:195)
at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:151)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java
:164)
at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:149)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5
64)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.
java:156)
at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:151)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5
64)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:972)
at
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:206)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:82
8)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processC
onnection(Http11Protocol.java:700)
at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:58
4)
at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool
.java:683)
at java.lang.Thread.run(Thread.java:534)
Caused by: java.lang.NullPointerException
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.buildSuperJoinTr
ee(SqlQueryStatement.java:1531)
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.getTableAlias(Sq
lQueryStatement.java:1006)
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.buildJoinTreeFor
Column(SqlQueryStatement.java:1501)
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.buildJoinTree(Sq
lQueryStatement.java:1478)
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.buildJoinTree(Sq
lQueryStatement.java:1467)
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.splitCriteria(Sq
lQueryStatement.java:1556)
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.<init>(SqlQueryS
tatement.java:155)
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.<init>(SqlQueryS
tatement.java:111)
at
org.apache.ojb.broker.accesslayer.sql.SqlSelectStatement.<init>(SqlSelec
tStatement.java:89)
at
org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl.getPrepare
dSelectStatement(SqlGeneratorDefaultImpl.java:196)
at
org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeQuery(JdbcAccess
Impl.java:306)
at
org.apache.ojb.broker.accesslayer.RsIterator.<init>(RsIterator.java:209)
at
org.apache.ojb.broker.core.RsIteratorFactoryImpl.createRsIterator(RsIter
atorFactoryImpl.java:95)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getRsIteratorFromQuery(
PersistenceBrokerImpl.java:2426)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getIteratorFromQuery(Pe
rsistenceBrokerImpl.java:1766)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Pe
rsistenceBrokerImpl.java:1372)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Pe
rsistenceBrokerImpl.java:1563)
... 42 more
I have no problems when querying for Stakeholders given the
TopicOfInterest or for Contacts given the Stakeholder. My problem only
arises when going the extra level of depth. Such a query seems like a
common requirement so I am wondering if anyone has encountered this
error, or more likely, can point out where I am missing something
obvious.
Further I tested with just a regular reference-descriptor (instead of
the collection) and got the same error. Another note is that the Contact and Stakeholder are implementations of
an abstract class and they each use separate tables.


_________________________________________

Phil Armour




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


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




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



Reply via email to