On 3/29/06, Frank W. Zammetti <[EMAIL PROTECTED]> wrote:
>
> Hey all,
>
> I just spent about 20 minutes working through a problem with FileUpload...
> turned out to be my fault entirely, I didn't include Commons IO (FYI, I'm
> not seeing a dependency list on the FileUpload site... maybe I missed it).


You did. See:

http://jakarta.apache.org/commons/fileupload/dependencies.html

This is the standard location for the dependency list for all Commons
components.

The problem is, it was one of those aggrevating problems to track down
> because the stack trace didn't reveal the actual line where the failure
> occured, and catching Exception didn't get triggered.  I wound up catching
> Throwable, and I was then able to figure it out.


The stack trace should have shown a NoClassDefFoundError indicating a class
in Commons IO. I haven't seen a situation where that's not the case, and
that's also been the case for all of the people who've asked about it on the
list, at least that I can recall.

I know that missing dependencies is always a b**ch, and they tend to be
> these annoying problems with no error messages or anything (sure, a
> debugger helps, but that doesn't seem like the best answer to me).  So, I
> have a suggestion that could well go all across Commons, or any other
> project for that matter.
>
> In Java Web Parts, we've gotten into the habit of putting this in all
> classes:
>
> /**
> * This static initializer block tries to load all the classes this one
> * depends on (those not from standard Java anyway) and prints an error
> * meesage if any cannot be loaded for any reason.
> */
> static {
>   try {
>     Class.forName("org.apache.commons.logging.Log");
>     Class.forName("org.apache.commons.logging.LogFactory");
>   } catch (ClassNotFoundException e) {
>     System.err.println("CacheControlFilter" +
>       " could not be loaded by classloader because classes it depends" +
>       " on could not be found in the classpath...");
>     e.printStackTrace();
>   }
> }


Aside from the fact that Class.forName is generally not a good idea in a
J2EE environment, I personally have a strong dislike for static
initialisers, so I'm not inclined to do something like this for components I
work on. Other folks may like it, though. ;-)

--
Martin Cooper


It's just echoing the import list, minus classes found in the SDK (if
> that's missing, you aren't getting *this* far!).  This saves a lot of time
> and headache when you are missing a dependency.  I know that adds
> something additional to maintain in the class, but it seems a fair
> trade-off to me.
>
> Does anyone see this as being something that might be helpful for Commons?
> If there is a better way to get the same effect I'm all ears too (I could
> see setting a string to the name of the class being checked so that it
> could be output as part of the error message, but I'm talking about a
> whole other way to check for dependencies).
>
> --
> Frank W. Zammetti
> Founder and Chief Software Architect
> Omnytex Technologies
> http://www.omnytex.com
> AIM: fzammetti
> Yahoo: fzammetti
> MSN: [EMAIL PROTECTED]
> Java Web Parts -
> http://javawebparts.sourceforge.net
> Supplying the wheel, so you don't have to reinvent it!
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to