That was an awesome piece of information. The wizard that Niclas mentioned seems to have shared some of the secrets with you.
Or maybe you are wizard. Niclas ????? Thanks for your help. I plan to summarize this in the wiki, if it is not already there. Vikas -----Original Message----- From: Stephen McConnell [mailto:[EMAIL PROTECTED] Sent: Friday, February 20, 2004 12:27 PM To: Avalon framework users Subject: Re: merlin jar downloads Vikas Phonsa wrote: > Guys, > Pls tell me what's going on here. When you run the merlin tutorial examples > using the Merlin CLI for the first time lots of jars are downloaded to the > local repository from dpml ( or whatever ) and ibiblio. > > What is there in the CLI code that is doing that. What step does that. There are two steps which trigger jar downloading. The first step concerns the creation of an InitialContext. The InitialContext is supplied with a directory pointing to the merlin system repository (this is the merlin/system directory). The initial context implementation uses this to load up a repository implementation. If you look inside the merlin-cli jar file you will find a properties file called avalon.properties. This contains the following line: avalon.repository.implementation = avalon-repository:avalon-repository-impl;1.2 This is reference to artifact in merlin/system. Basically the above spec translates to avalon-repository/jars/avalon-repository-1.2.jar. Before loading in this file, the initial context will look for [filename].meta. The contents of the .meta file is a description of the structural dependencies - or more simply the jars needed to construct a classloader and the class that is a factory to loaded by the initial context to establish a repository management system. Here is the content of the .meta file: http://www.dpml.net/avalon-repository/jars/avalon-repository-impl-1.2.jar.me ta The initial context builds the classloader and instantiates a repository implementation. This brings us to the next step in the merlin establishment process. In the Merlin 3.2.5 CLI sources you will see something like the following: Builder builder = new DefaultBuilder( context, artifact ); ClassLoader classloader = builder.getClassLoader(); Factory factory = builder.getFactory(); Map criteria = factory.createDefaultCriteria(); handleCommandLine( criteria, line ); m_kernel = factory.create( criteria ); The artifact argument is the repository reference to the merlin implementation - e.g. artifact:merlin/merlin-impl#3.2.4. The DefaultBuilder goes through approximately the same process we used to establish the repository implementation - it looks for a .meta file - in this case is this file: http://www.dpml.net/merlin/jars/merlin-impl-3.2.4.jar.meta The builder constructs a classloader chain (api, spi, impl) and creates a factory using that classloader. The CLI code then gets the default factory criteria, modifies this based on command line arguments, and then finally - creates the merlin kernel. > I have seen such downloads while using maven. > > But I copied the MerlinTestCase code into my IDE and loaded a component > there. Didn't use any maven, don't have any project.xml. > > This ran fine but all those jars where downloaded. So what step in CLI or > TestCase is doing that. Test case and CLI are doing the same thing - creating a builder (which triggers dependent resource loading), instantiating a factory, customizing criteria, then instantiating a new kernel using the criteria. Hope this helps. Cheers, Stephen. > Vikas > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > -- |------------------------------------------------| | Magic by Merlin | | Production by Avalon | | | | http://avalon.apache.org/merlin | | http://dpml.net/merlin/distributions/latest | |------------------------------------------------| --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
