I know this has come up before and some debate goes on and then no
decision is really made. Do we want to improve exception reporting?
I've always found this to be a weak point in Cayenne's game.
Fortunately, I've become more comfortable with loading up the source
code and stepping through things to see what's wrong, but it's normally
debugging time that could largely be saved. The root problem, I think,
is that where a failure actually occurs and where a failure are
introduced are normally far apart.
As a minimal example, I tried to create likeIgnoreCaseExp(), but passed
in null for the value. I received the following NPE:
Caused by: java.lang.NullPointerException
at
org.apache.cayenne.exp.parser.SimpleNode.connectChildren(SimpleNode.java
:276)
at
org.apache.cayenne.exp.parser.ASTLikeIgnoreCase.<init>(ASTLikeIgnoreCase
.java:43)
at
org.apache.cayenne.exp.ExpressionFactory.likeIgnoreCaseExp(ExpressionFac
tory.java:529)
at
com.servprise.www.pages.store.CheckOut.addCoupon(CheckOut.java:291)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav
a:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
Impl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.apache.tapestry.listener.ListenerMethodInvokerImpl.invokeTargetMetho
d(ListenerMethodInvokerImpl.java:214)
at
org.apache.tapestry.listener.ListenerMethodInvokerImpl.invokeListenerMet
hod(ListenerMethodInvokerImpl.java:155)
... 51 more
Now, had I not had the source loaded in Eclipse already, it would have
been awfully difficult to track down. Tapestry loading on its own
exception stuff doesn't help much.
On the other hand, if an IllegalArgumentException had been thrown in
likeIgnoreCaseExp indicating that value must not be null, my debugging
time would have been cut down considerably. I have run across many
similar situations in the past couple years.
If anyone has any thoughts on the matter, please chime in. It is
something I would like to see move forward with the 3.0 release.
-- Kevin Menard Servprise International, Inc. 800.832.3823 x308
This archive was generated by hypermail 2.0.0 : Fri Aug 03 2007 - 11:52:32 EDT