Roy Henderson wrote:

So, chip in, even if you think that your "story" is nothing to tell. If you


are new to Avalon, please indicate what you think is attractive and what
you have problems with. It doesn't have to follow Aaron's 'questionaire' to the


dot, it is just a guidance...


I am actually a die-hard VB programmer who is wrestling with learning Java
so I don't know how relevant my comments will be. However, as invited:

My only real exposure to Avalon so far has been to use Phoenix as the
container for James which I am evaluating as a possible mail server for my
ISP venture. I don't ( yet ) understand exactly how the container and the
application fit together and which does what piece of the overall process.

The James mail server is a good example of the application of COP and the role of a container. If you dig into the James sources you will discover a bunch of components:


  * james
  * users-store
  * mailstore
  * dns
  * remote
  * pop3
  * smtp
  * spool
  * fetchpop

These components can (a) declare services that they provide and (b) declare dependencies on service that they need. For example, many of the james components leverage components maintained by the Avalon project, including:

  * datasources
  * threads
  * scheduler
  * sockets
  * connections
  * store

The job of the container is to handle the deployment of system during which the service produced by one component are linked up to the components that need these services (often referred to as assembly), yo handle the deployment of components in a correct sequence, the maintain the in operation, and subsequently handle decommissioning (again involving the tear-down of components in the right sequence.

In the attached file (james.txt) is a graph of what is going on inside the Merlin system following the commissioning of the container that defines the james application. The graph is basically describing the wiring diagram - for example the following fragment shows that the james mailstore component has been establish with a datasources and store as service providers, and that mailstore is itself providing services to the remote, pop3, smtp, spool, fetchpop, and main james component.

          component:[/james/mailstore](60000)
            <-- [/james/datasources]
            <-- [/james/store]
            --> [/james/remote]
            --> [/james/pop3]
            --> [/james/smtp]
            --> [/james/spool]
            --> [/james/fetchpop]
            --> [/james/james]

Right at the end of the graph is the startup and shutdown sequence for the james container.

For each component in the startup sequence - the container is responsible for the deployment of the component. This means setting up the the things that the component needs to function properly - such as a logging channel, configuration, context object, dependents, and so.

Perhaps one day I will complete Java-101 and find a use for a container. If
it can provide configurable, common, reusable services which I can
incorporate into my applications ... then ... I'm interested.

Lets' take James as an example. What a container can provide is the mechanisms to take that entire assembly graph and encapsulate that in an object that looks like another component. This is referred to as a composite component. In fact in the james example there already composite components inside, so in effect a composite james component would represent probably three three levels of internal composition. The benefit of this is that you can repackage something complex into something simple - and through this really enable reuse.



I don't understand quite why there are multiple ( 4 ? ) container variants -
although I believe that they are actually just 2 generations of 2 variants.
But, when I develop that first application, which container do I select, and
more importantly, why?

If your starting something new that you should kick-off with Merlin.


Why?

  * auto assembly
  * muli-layer configuration management
  * advanced context management
  * composite component management
  * packaged deployment scenarios
  * local and remote repository integration
  * integral jar extension management
  * Maven plugin support for meta-info generation and
    simulated deployment
  * product packaging and install services
  * based on Avalon component meta model
  * support for legacy Phoenix migration

One thing which is worth listening to though. As a potential user of an
Avalon-contained application, I am a bit concerned to hear that there is
some debate on the function and direction of the product ... perhaps I
should select Exim or Postfix instead of James ...

Keep in mind that the debates in Avalon concerning containers etc. are not same concern as the subject of the James component or the James Project. The James project uses the Phoenix container for deployment. For over a year (or there abouts) we have been successfully running James (and all it's sub-systems) inside Merlin as part of the daily validation process (this message is sent to you via james running under Merlin). The James project is currently merging two branches of development which will result in the establishment of a james binary distribution that from a technical point of view will run in either Merlin or Phoenix.


I'm not particularly looking for replies to my comments / questions because
they're not meant to generate tangential discussions distracting from the
original thread ...

Woops. OK - too late!


Cheers, Stephen.


just some user comment

Regards,

Roy



----------------------------------------------------------------
[This message has been routed via James V2.1.3 on REBEX-MERCURY]

---------------------------------------------------------------------
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    |
|------------------------------------------------|
-----------------------------------------------------------
Application Model
-----------------------------------------------------------

  container:[/])
    children:
      container:[/james])
        children:
          component:[/james/james](60000)
            <-- [/james/datasources]
            <-- [/james/threads]
            <-- [/james/scheduler]
            <-- [/james/sockets]
            <-- [/james/connections]
            <-- [/james/store]
            <-- [/james/users-store]
            <-- [/james/mailstore]
            <-- [/james/dns]
            --> [/james/remote]
            --> [/james/pop3]
            --> [/james/smtp]
            --> [/james/spool]
            --> [/james/fetchpop]
          component:[/james/nntp-repository](60000)
            --> [/james/nntp]
          component:[/james/remote](60000)
            <-- [/james/threads]
            <-- [/james/datasources]
            <-- [/james/scheduler]
            <-- [/james/sockets]
            <-- [/james/connections]
            <-- [/james/store]
            <-- [/james/users-store]
            <-- [/james/mailstore]
            <-- [/james/dns]
            <-- [/james/james]
          component:[/james/fetchpop](60000)
            <-- [/james/threads]
            <-- [/james/scheduler]
            <-- [/james/datasources]
            <-- [/james/sockets]
            <-- [/james/connections]
            <-- [/james/store]
            <-- [/james/users-store]
            <-- [/james/mailstore]
            <-- [/james/dns]
            <-- [/james/james]
          container:[/james/datasources])
            --> [/james/remote]
            --> [/james/pop3]
            --> [/james/smtp]
            --> [/james/spool]
            --> [/james/fetchpop]
            --> [/james/james]
            --> [/james/mailstore]
            --> [/james/nntp]
            --> [/james/users-store]
            children:
              component:[/james/datasources/manager](60000)
            startup:
              1: [/james/datasources/manager]
            shutdown:
              1: [/james/datasources/manager]
          container:[/james/scheduler])
            <-- [/james/threads]
            --> [/james/remote]
            --> [/james/pop3]
            --> [/james/smtp]
            --> [/james/spool]
            --> [/james/fetchpop]
            --> [/james/james]
            children:
              component:[/james/scheduler/manager](60000)
                <-- [/james/threads]
            startup:
              1: [/james/threads]
              2: [/james/scheduler/manager]
            shutdown:
              1: [/james/scheduler/manager]
          component:[/james/smtp](60000)
            <-- [/james/threads]
            <-- [/james/datasources]
            <-- [/james/scheduler]
            <-- [/james/sockets]
            <-- [/james/connections]
            <-- [/james/store]
            <-- [/james/users-store]
            <-- [/james/mailstore]
            <-- [/james/dns]
            <-- [/james/james]
          component:[/james/dns](60000)
            --> [/james/remote]
            --> [/james/pop3]
            --> [/james/smtp]
            --> [/james/spool]
            --> [/james/fetchpop]
            --> [/james/james]
          component:[/james/mailstore](60000)
            <-- [/james/datasources]
            <-- [/james/store]
            --> [/james/remote]
            --> [/james/pop3]
            --> [/james/smtp]
            --> [/james/spool]
            --> [/james/fetchpop]
            --> [/james/james]
          component:[/james/spool](60000)
            <-- [/james/threads]
            <-- [/james/datasources]
            <-- [/james/store]
            <-- [/james/mailstore]
            <-- [/james/scheduler]
            <-- [/james/sockets]
            <-- [/james/connections]
            <-- [/james/users-store]
            <-- [/james/dns]
            <-- [/james/james]
          container:[/james/sockets])
            --> [/james/remote]
            --> [/james/pop3]
            --> [/james/smtp]
            --> [/james/spool]
            --> [/james/fetchpop]
            --> [/james/james]
            --> [/james/nntp]
            children:
              component:[/james/sockets/manager](60000)
            startup:
              1: [/james/sockets/manager]
            shutdown:
              1: [/james/sockets/manager]
          component:[/james/pop3](60000)
            <-- [/james/threads]
            <-- [/james/datasources]
            <-- [/james/scheduler]
            <-- [/james/sockets]
            <-- [/james/connections]
            <-- [/james/store]
            <-- [/james/users-store]
            <-- [/james/mailstore]
            <-- [/james/dns]
            <-- [/james/james]
          container:[/james/store])
            --> [/james/remote]
            --> [/james/pop3]
            --> [/james/smtp]
            --> [/james/spool]
            --> [/james/fetchpop]
            --> [/james/james]
            --> [/james/mailstore]
            --> [/james/nntp]
            --> [/james/users-store]
            children:
              component:[/james/store/manager](60000)
            startup:
              1: [/james/store/manager]
            shutdown:
              1: [/james/store/manager]
          component:[/james/users-store](60000)
            <-- [/james/datasources]
            <-- [/james/store]
            --> [/james/remote]
            --> [/james/pop3]
            --> [/james/smtp]
            --> [/james/spool]
            --> [/james/fetchpop]
            --> [/james/james]
            --> [/james/nntp]
          container:[/james/threads])
            --> [/james/remote]
            --> [/james/pop3]
            --> [/james/smtp]
            --> [/james/spool]
            --> [/james/fetchpop]
            --> [/james/james]
            --> [/james/scheduler]
            --> [/james/nntp]
            --> [/james/connections]
            --> [/james/scheduler/manager]
            children:
              component:[/james/threads/manager](60000)
            startup:
              1: [/james/threads/manager]
            shutdown:
              1: [/james/threads/manager]
          component:[/james/nntp](60000)
            <-- [/james/threads]
            <-- [/james/datasources]
            <-- [/james/store]
            <-- [/james/users-store]
            <-- [/james/nntp-repository]
            <-- [/james/sockets]
            <-- [/james/connections]
          component:[/james/connections](60000)
            <-- [/james/threads]
            --> [/james/remote]
            --> [/james/pop3]
            --> [/james/smtp]
            --> [/james/spool]
            --> [/james/fetchpop]
            --> [/james/james]
            --> [/james/nntp]
        startup:
          1: [/james/threads]
          2: [/james/sockets]
          3: [/james/scheduler]
          4: [/james/datasources]
          5: [/james/store]
          6: [/james/connections]
          7: [/james/users-store]
          8: [/james/mailstore]
          9: [/james/dns]
          10: [/james/james]
          11: [/james/remote]
          12: [/james/pop3]
          13: [/james/smtp]
          14: [/james/spool]
          15: [/james/nntp-repository]
          16: [/james/nntp]
          17: [/james/fetchpop]
        shutdown:
          1: [/james/remote]
          2: [/james/pop3]
          3: [/james/smtp]
          4: [/james/spool]
          5: [/james/fetchpop]
          6: [/james/james]
          7: [/james/scheduler]
          8: [/james/nntp]
          9: [/james/connections]
          10: [/james/scheduler/manager]
          11: [/james/threads]
          12: [/james/sockets]
          13: [/james/mailstore]
          14: [/james/users-store]
          15: [/james/datasources]
          16: [/james/store]
          17: [/james/dns]
          18: [/james/nntp-repository]
    startup:
      1: [/james]
    shutdown:
      1: [/james]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to