Gary Shea wrote:

Hey Steve --

Thanks for the quick response!

Unfortunately for your hope of a quick and simple solution, I did read
the text in the kernel.xml file ;)


On Tue, 12 Nov 2002, at 03:00 [+0100], Stephen McConnell ([EMAIL PROTECTED]:


Gary Shea wrote:


This first attempt is a sort of merlin2 "hello world". I'm trying to
deploy a single component with no dependencies, and using only
DefaultContainer as in the demo.

I'm having problems with classloading, apparently. The message is:

Could not locate an extension for the stage:
org.apache.excalibur.merlin.container.Structural/1.0.0



It looks like your kernel is missing the declaration of the extensions
library.

I've tried messing around with <library/> and <classpath/>, although I
haven't figured out where in the code they are used, so it's been pretty
naive.

Presumably you have the demo running ok.
The demo file in src/etc/kernel.xml declares to the kernel that the runtime merlin depedencies are contained in a directory named "extensions". If that is not supplied then Merlin will not have required classes available.

At the moment I don't think I should need an 'extensions
library',
You don't - Merlin does.

since everything is in the main classloader.  Actually not
quite everything is in there; I added jars to the Class-Path: manifest
entry of the app as needed so the code would run, which eventually
sucked in all of the 'extensions' jars with the exception of excalibur
threadcontext, excalibur collections (which I assume is obsolete),
excalibur configuration, and excalibur container.  If the problem is
that one of them is missing, it's showing up in a very strange way!

Are you running with the merlin script ? It runs with a jar reference and the jar has jar depedecy declarations. Thos depedent jar files should not be in the classpath - thy should be in the "extensions" directory (and only get dragged in on demand).


No matter how I set the <library/> entry, I can't get merlin to run
without all the 'extension' jars in the manifest Class-Path:. I've
tried the experiment of removing one jar from the Class-Path and then
changing classpath and library to see if it would find the jar, and the
app always dies in early Merlin processing.

Class-path outside of merlin is the wronog thing to play with. If you look at the merlin.bat file you will see that it is booting itself with a single jar. The manifest of that jar contains the delcaration of the depedent jar files - and the JRE checks the extension directory for these. Remember - this is at the boot stage so I'm takling about the -Djava.ext.dirs=.\extensions parameter. After merlin boots, the kernel is loaded at which time you can declare more extension directories using the <library/> element or declare jars using the <classpath/>.


In the kernel.xml file you should see something like:

<!--
Declaration of installed extension directories and kernel level
classpath.
In this demo we are referencing the Merlin classes in the embedded
demo so
we need to include Merlin and its' extension depedencies in directory
referenced within the library element.
-->

<library dir=".">
<include name="extensions"/>
</library>

This tells Merlin where to look for dependent jar files.

Why does merlin.jar need to be found both in the main classloader
and then again (I'm guessing) by another classloader?  Jeez, I thought
the chaining worked the other way!

Because the extensions supplied on the java command declares the stuff prive to merlin. Whereas the extension declared inside the kernel and the classpath statements are all application space.


It's always like this...

This sounds like bootstrap to me - my guess is that your lauching Merlin differently. Anyway - its late and I could be wrong - if its the the boot then send me you kernel.xml (but if it was that you would be getting the info) and the log trace.

Cheers, Steve.


Gary



Cheers, Steve.



in the root profile. The class should be available through the main
classloader -- it's in the same jar that everything else is! Based on
what I've been able to figure out about the code, it's a matter of
getting a profile, but I'm not sure what profile.

I currently have no
profiles... but this didn't seem like something that would require a
profile from me!


--
To unsubscribe, e-mail: <mailto:avalon-users-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:avalon-users-help@;jakarta.apache.org>






--

Stephen J. McConnell

OSM SARL
digital products for a global economy
mailto:mcconnell@;osm.net
http://www.osm.net




--
To unsubscribe, e-mail: <mailto:avalon-users-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:avalon-users-help@;jakarta.apache.org>





--
To unsubscribe, e-mail: <mailto:avalon-users-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:avalon-users-help@;jakarta.apache.org>




--

Stephen J. McConnell

OSM SARL
digital products for a global economy
mailto:mcconnell@;osm.net
http://www.osm.net




--
To unsubscribe, e-mail:   <mailto:avalon-users-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:avalon-users-help@;jakarta.apache.org>

Reply via email to