Hi all,
Way back when 1.2B1 was released, I reported a weird fault
resolving
exception. I didn't have time then to look into it further. I
just tried
out cayenne 1.2RC2 and am still seeing the same weird behavior
(maybe
I'm doing something weird. ;). I do have time now to look into it
further, but am getting stuck before I can get started by a
separate
issue.
My code:
public List getTransactionsForCourse(Course course) {
List ret = this.getAssignmentTransactions();
ret =
ExpressionFactory.matchExp
("assignment.course.name",course.getName()).filterObjects(ret);
List orderings = new ArrayList();
orderings.add(new Ordering("assignment.name",true));
orderings.add(new Ordering("scoreAsFloat",false));
Ordering.orderList(ret,orderings);
return ret;
}
assignmentTransactions is a one to many relationship.
Calling said code is resulting in the following exception:
*
org.objectstyle.cayenne.property.AbstractCollectionProperty.ensureC
ollectionValueHolderSet(AbstractCollectionProperty.java:159)
*
org.objectstyle.cayenne.property.AbstractCollectionProperty.injectV
alueHolder(AbstractCollectionProperty.java:142)
*
org.objectstyle.cayenne.property.BaseClassDescriptor.injectValueHol
ders(BaseClassDescriptor.java:218)
*
org.objectstyle.cayenne.access.DataContext.localObject
(DataContext.java:1924)
*
org.objectstyle.cayenne.access.ObjectResolver.objectFromDataRow
(ObjectResolver.java:237)
*
org.objectstyle.cayenne.access.ObjectResolver.objectsFromDataRows
(ObjectResolver.java:155)
*
org.objectstyle.cayenne.access.ObjectResolver.synchronizedObjectsFr
omDataRows(ObjectResolver.java:134)
*
org.objectstyle.cayenne.access.DataDomainQueryAction.interceptObjec
tConversion(DataDomainQueryAction.java:373)
*
org.objectstyle.cayenne.access.DataDomainQueryAction.execute
(DataDomainQueryAction.java:151)
*
org.objectstyle.cayenne.access.DataDomain.onQuery
(DataDomain.java:766)
*
org.objectstyle.cayenne.util.ObjectContextQueryAction.runQuery
(ObjectContextQueryAction.java:253)
*
org.objectstyle.cayenne.access.DataContextQueryAction.execute
(DataContextQueryAction.java:90)
*
org.objectstyle.cayenne.access.DataContext.onQuery
(DataContext.java:1422)
*
org.objectstyle.cayenne.access.DataContext.performQuery
(DataContext.java:1411)
*
org.objectstyle.cayenne.access.ToManyList.resolvedObjectList
(ToManyList.java:343)
*
org.objectstyle.cayenne.access.ToManyList.size(ToManyList.java:296)
*
org.objectstyle.cayenne.exp.Expression.filterObjects
(Expression.java:458)
* org.eledge.domain.User.getTransactionsForCourse(User.java:92)
* org.eledge.domain.User.getGradebookGradedResponses
(User.java:197)
*
org.eledge.domain.User.getGradedGradebookGradedResponses
(User.java:192)
*
org.eledge.domain.User.getHasGradedGradebookGradedResponses
(User.java:188)
* sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
*
sun.reflect.NativeMethodAccessorImpl.invoke
(NativeMethodAccessorImpl.java:39)
*
sun.reflect.DelegatingMethodAccessorImpl.invoke
(DelegatingMethodAccessorImpl.java:25)
* java.lang.reflect.Method.invoke(Method.java:585)
* ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:491)
* ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:785)
* ognl.ObjectMethodAccessor.callMethod
(ObjectMethodAccessor.java:61)
* ognl.OgnlRuntime.callMethod(OgnlRuntime.java:819)
* ognl.ASTMethod.getValueBody(ASTMethod.java:75)
* ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:170)
* ognl.SimpleNode.getValue(SimpleNode.java:210)
* ognl.ASTChain.getValueBody(ASTChain.java:109)
* ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:170)
* ognl.SimpleNode.getValue(SimpleNode.java:210)
* ognl.Ognl.getValue(Ognl.java:333)
* ognl.Ognl.getValue(Ognl.java:310)
*
org.apache.tapestry.binding.ExpressionBinding.resolveProperty
(ExpressionBinding.java:201)
*
org.apache.tapestry.binding.ExpressionBinding.getObject
(ExpressionBinding.java:194)
*
org.apache.tapestry.binding.AbstractBinding.getBoolean
(AbstractBinding.java:77)
*
org.apache.tapestry.param.BooleanParameterConnector.setParameter
(BooleanParameterConnector.java:51)
*
org.apache.tapestry.param.ParameterManager.setParameters
(ParameterManager.java:105)
*
org.apache.tapestry.AbstractComponent.prepareForRender
(AbstractComponent.java:898)
*
org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:853)
*
org.apache.tapestry.AbstractComponent.renderBody
(AbstractComponent.java:624)
*
org.apache.tapestry.components.RenderBody.renderComponent
(RenderBody.java:45)
*
org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:857)
*
org.apache.tapestry.AbstractComponent.renderBody
(AbstractComponent.java:624)
*
org.apache.tapestry.components.RenderBody.renderComponent
(RenderBody.java:45)
*
org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:857)
*
org.apache.tapestry.AbstractComponent.renderBody
(AbstractComponent.java:624)
* org.apache.tapestry.html.Body.renderComponent(Body.java:269)
*
org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:857)
*
org.apache.tapestry.AbstractComponent.renderBody
(AbstractComponent.java:624)
*
org.apache.tapestry.components.RenderBody.renderComponent
(RenderBody.java:45)
*
org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:857)
*
org.apache.tapestry.AbstractComponent.renderBody
(AbstractComponent.java:624)
* org.apache.tapestry.html.Shell.renderComponent(Shell.java:
124)
*
org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:857)
*
org.apache.tapestry.BaseComponent.renderComponent
(BaseComponent.java:118)
*
org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:857)
*
org.apache.tapestry.BaseComponent.renderComponent
(BaseComponent.java:118)
*
org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:857)
*
org.apache.tapestry.AbstractComponent.renderBody
(AbstractComponent.java:624)
* org.mb.tapestry.base.IfBean.renderComponent(IfBean.java:83)
*
org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:857)
*
org.apache.tapestry.BaseComponent.renderComponent
(BaseComponent.java:118)
*
org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:857)
*
org.apache.tapestry.BaseComponent.renderComponent
(BaseComponent.java:118)
*
org.apache.tapestry.AbstractComponent.render
(AbstractComponent.java:857)
* org.apache.tapestry.AbstractPage.renderPage
(AbstractPage.java:300)
*
org.apache.tapestry.engine.RequestCycle.renderPage
(RequestCycle.java:368)
*
org.apache.tapestry.engine.AbstractEngine.renderResponse
(AbstractEngine.java:749)
*
org.apache.tapestry.engine.PageService.service(PageService.java:77)
*
org.apache.tapestry.engine.AbstractEngine.service
(AbstractEngine.java:889)
* org.eledge.EledgeEngine.service(EledgeEngine.java:60)
*
org.apache.tapestry.ApplicationServlet.doService
(ApplicationServlet.java:198)
*
org.apache.tapestry.ApplicationServlet.doGet
(ApplicationServlet.java:159)
* javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
* javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
*
org.mortbay.jetty.servlet.ServletHolder.handle
(ServletHolder.java:428)
*
org.mortbay.jetty.servlet.WebApplicationHandler
$CachedChain.doFilter(WebApplicationHandler.java:830)
*
org.eledge.OldEledgePagesFilter.doFilter
(OldEledgePagesFilter.java:64)
*
org.mortbay.jetty.servlet.WebApplicationHandler
$CachedChain.doFilter(WebApplicationHandler.java:821)
*
org.mortbay.jetty.servlet.WebApplicationHandler.dispatch
(WebApplicationHandler.java:471)
*
org.mortbay.jetty.servlet.ServletHandler.handle
(ServletHandler.java:568)
* org.mortbay.http.HttpContext.handle(HttpContext.java:1530)
*
org.mortbay.jetty.servlet.WebApplicationContext.handle
(WebApplicationContext.java:633)
* org.mortbay.http.HttpContext.handle(HttpContext.java:1482)
* org.mortbay.http.HttpServer.service(HttpServer.java:909)
* org.mortbay.http.HttpConnection.service
(HttpConnection.java:816)
*
org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:982)
* org.mortbay.http.HttpConnection.handle(HttpConnection.java:
833)
*
org.mortbay.http.SocketListener.handleConnection
(SocketListener.java:244)
* org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:
357)
* org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:
534)
This is a tapestry (3.0.3) webapp, running with the
JettyLauncher. I've
done a clean recompile, but no good. I dug into the code, and it
looks
like ensureCollectionValueHolderSet is trying to cast an
ArrayList as a
ValueHolder. In poking around, I saw a place where if something
was
transient, an ArrayList was returned... but I can't find it
again at the
moment; I'll look later tonight when I have a bit of time and
see if I
can find it again. Anyway... thoughts? Cayenne bug? Something I've
screwed up?
Robert