geronimo-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andrew Thorburn" <>
Subject Re: EAR can't find WEB-INF/classes or WEB-INF/lib
Date Tue, 27 May 2008 22:50:34 GMT
Yes, that helps a lot. It's not the answer I wanted, but it does answer the
question :).

I guess that means I'll have to play around and see what can be done.

How do separate classloaders work with statics (fields, etc). e.g. If I have
a class A with static field B in the WAR, and again in the EJB jar, will I
have two instances of that field, such that the WAR has one (because it has
it's own separate classloader), and the EJB will have another? If so, then
that's a problem.

I don't know much about Java Beans or Enterprise Java Beans, so this might
be a bit silly, but: Can I put the MDB in the WAR? Or does it *have to* have
it's own JAR?

On Tue, May 27, 2008 at 6:03 PM, David Jencks <>

> On May 26, 2008, at 6:28 PM, Andrew Thorburn wrote:
>  Ok, it now works. Well, kinda.
>> I think I must have originally also had a lib directory directly inside
>> the EAR, as well as in the WAR, which was what was confusing Geronimo.
>> Removed that, and my bean didn't start. Removed the (small but important)
>> bits of code that relied on that, and everything works. Except it doesn't do
>> logging anymore for my MDB. Works fine everywhere else.
>> Apologies for not having the faintest idea what my problem was, but there
>> we go. I now have a new problem, however: How do I reference the stuff in
>> the WAR from my MDB JAR? I'm sure I saw information on this somewhere, but I
>> closed it because I thought I had a different problem :(. I can't duplicate
>> the JARS, as I'm sure that'll cause a vast multitude of problems. I really
>> just want to be able to reference them easily, so that I don't have to worry
>> about this when coding my application. In fact, it's going to be very
>> necessary to communicate between the WAR and the MDB for it to be of any use
>> at all (AJAX stuff communicating between browser and database via Java app).
>> Basically need the WAR to be processed first, and then have the MDB JAR
>> processed, so that I can then reference all the classes in the WAR.
>> Is this possible? If not, what's the best alternative? Can I chuck my MDB
>> into the WAR? I'd be very surprised if I could do that. And I don't know if
>> that would solve any of my issues anyway...
>> The exact location of the classfiles doesn't matter, just so long as it
>> all works...
>> Feh. This is starting to do my head in. Won't be posting again for nearly
>> 24 hours (I only work part-time).
> I'm not sure I've understood clearly what problem you are having.  Maybe if
> I explain the classloader structure your app has and what I think you need
> to do it will help.
> For an ear based application with no javaee app clients, there is one
> "base" classloader that includes all the ejb jars, all the rars, and all the
> jars in the lib directory.
> Then for each war inside the ear, there is a separate classloader that is a
> child of the ear classloader that contains the jars in WEB-INF/lib and the
> classes in WEB-INF/classes.  Since this is a child of the ear classloader,
> all the code in the war can see the classes in the ear (ejb, connector, and
> lib).  Also, since these war classloaders  are  children of the ear, nothing
> in an ejb, connector or lib jar can see anything in any war classloader.
> I think what you need to do is put any classes that need to be accessible
> to both the ejb app (such as your mdb) and the war(s) in either the ejb jar
> or in a jar in the ear's lib directory.  Putting any such class anywhere in
> any war file will definitely prevent it being accessible from the ejb
> application.
> Hope this relates to what you are asking about :-)
> david jencks
>> Anyway, thanks again,
>> - Andrew

View raw message