Vikas Phonsa wrote:

Hi,


Merlin webpage and the txt docs in the downloads say:


"Versions of Merlin prior to the 3.2-dev 20031210 build maintained a local repository of jar files under the %MERLIN_HOME%/repository
directory. As of the 20031210 build the repository is maintained under AVALON_HOME which defaults to ${user.home}/.avalon."



So what repository are we talking abt here.

When you execute a build the artifacts that are created (jar file etc.) and normally placed in the maven local cache (either ${user.home}/.maven/repository or %MAVEN_HOME_LOCAL%/repository).


When you run "merlin" from the command line it establishes two repositories:

 (a) a system repository which it uses to resolve its own
     internal jar files

 (b) an application repository that it uses to to resolve
     any additional artifacts referenced by the block filenames
     or urls you include on the command line

For example - if I use the "merlin" command to run the hello tutorial then merlin will read through the <classloader> definition and attempt to get the resource from the local application repository cache. If you look at the block.xml descriptor for hello, there isn't a <classloader> declaration. That's because a block.xml is written to be embedded in a jar file, and jar file, and the containing jar file establishes an implicit classpath.

In practice what happens is that Merlin provides the avalon framework api within the top application classloader - so in fact the jars loaded when running hello via "merlin target\hello-1.0.jar" is as follows:

   avalon-framework-api-4.1.5.jar (auto supplied by Merlin)
   hello-1.1.jar                  (implicitly added because
                                   you referenced it on the
                                   command line

Equally, if you run the command "merlin target\classes" the classloader established by merlin is equal to :

   avalon-framework-api-4.1.5.jar (auto supplied by Merlin)
   target/class                   (implicitly added because
                                   because you referenced it
                                   command line)

In both cases, Merlin looks for the embedded resource /BLOCK-INFO/block.xml as the location to load the block deployment directives (component deployment instructions). Another common characteristic is that in both examples there are no unresolved dependencies - therefore no repository access is required, therefor you don't see a .avalon/repository directory being created.



I used maven to build the
HelloComponent example and then used merlin -execute to run it, it ran fine
but so far no ${user.home}/.avalon has been created.

Try this example:


merlin -execute http://dpml.net/merlin/tutorial/blocks/hello.block

This is basically the same as the above except that we are not depending on any implicit /BLOCK-INF/block.xml. If you take a look at the file hello.block.xml you will see what is called a "standalone" block. Merlin will read the <classloader> directives, and use the application repository to cache the jar file hello-1.1.jar. This will certainly trigger the creation of .avalon/repository.

How is this repository be different from the local maven repository that I
have where maven placed all the downloaded jars while building the examples.

The reason there are different repositories are as follows:


  (a) development/test cycles result in a maven repository the
      changes rather frequently - not the sort of repository that
      you want to use for a 24/7 server

  (b) development and runtime security policies are different and
      although we have a lot to do in this area, we want to be able
      to declare different validation and trust policies at the level
      of repository and host declarations

  (c) internal merlin system resources (and extensions) will be subject
      to different code security policies which is one of the reasons
      that the system repo is separate from the app repo, but the main
      reason is to structural keep them separate for stability reasons

But - to make life easy for developers, there is the "merlinx" command which is the same as the "merlin" command except that all of the repositories default to the maven repository.


And excuse me if I'm asking dumb questions.

No problem.


Cheers, Stephen.


Thanks

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]



Reply via email to