mcconnell    2003/08/19 06:39:25

  Modified:    merlin/merlin-platform/tutorials/composition README.txt
  Added:       merlin/merlin-platform/tutorials/composition maven.xml
                        project.xml
               merlin/merlin-platform/tutorials/composition/application/impl
                        project.xml
               merlin/merlin-platform/tutorials/composition/application/impl/conf
                        block.xml config.xml
               
merlin/merlin-platform/tutorials/composition/application/impl/src/java/tutorial/application
                        Application.java
               merlin/merlin-platform/tutorials/composition/location/api
                        project.xml
               
merlin/merlin-platform/tutorials/composition/location/api/src/java/tutorial/location
                        LocationService.java
               merlin/merlin-platform/tutorials/composition/location/impl
                        project.xml
               merlin/merlin-platform/tutorials/composition/location/impl/conf
                        block.xml
               
merlin/merlin-platform/tutorials/composition/location/impl/src/java/tutorial/location
                        LocationComponent.java LocationComponent.xprofile
               merlin/merlin-platform/tutorials/composition/publisher/api
                        project.xml
               
merlin/merlin-platform/tutorials/composition/publisher/api/src/java/tutorial/publisher
                        PublisherService.java
               merlin/merlin-platform/tutorials/composition/publisher/impl
                        project.xml
               merlin/merlin-platform/tutorials/composition/publisher/impl/conf
                        block.xml
               
merlin/merlin-platform/tutorials/composition/publisher/impl/src/java/tutorial/publisher
                        PublisherComponent.java
  Removed:     merlin/merlin-platform/tutorials/composition build.xml
               merlin/merlin-platform/tutorials/composition/src/config/application
                        block.xml
               merlin/merlin-platform/tutorials/composition/src/config/location
                        block.xml
               merlin/merlin-platform/tutorials/composition/src/config/publisher
                        block.xml
               merlin/merlin-platform/tutorials/composition/src/java/tutorial
                        LocationService.java PublisherService.java
               
merlin/merlin-platform/tutorials/composition/src/java/tutorial/application
                        Application.java Application.xinfo
               merlin/merlin-platform/tutorials/composition/src/java/tutorial/location
                        LocationComponent.java LocationComponent.xinfo
                        LocationComponent.xprofile
               merlin/merlin-platform/tutorials/composition/src/java/tutorial/publisher
                        PublisherComponent.java PublisherComponent.xinfo
  Log:
  Update composition tutorial to maven 10 and Merlin 3.0.
  
  Revision  Changes    Path
  1.2       +35 -1     
avalon-sandbox/merlin/merlin-platform/tutorials/composition/README.txt
  
  Index: README.txt
  ===================================================================
  RCS file: 
/home/cvs/avalon-sandbox/merlin/merlin-platform/tutorials/composition/README.txt,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- README.txt        18 Aug 2003 19:39:35 -0000      1.1
  +++ README.txt        19 Aug 2003 13:39:24 -0000      1.2
  @@ -1,2 +1,36 @@
   
  -I'M NOT STABLE - COME BACK LATER.
  \ No newline at end of file
  +Composition Management
  +----------------------
  +
  +This tutorial presents the creation ofn virtual components
  +using composition of package containers.  In this demonstration
  +we have three application groups, a top level application, a 
  +locator system, and a publisher system.  The top level app
  +pulls in the two sub-systems as virtual components.  The sub-
  +systems are themselves fuolly deployable containers in their 
  +own right and could be executed independetly.
  +
  +
  +  $ maven build
  +  $ merlin application\impl\target\*.jar -system %MAVEN_HOME% -execute
  +
  +  [INFO   ] (application.publisher.publisher): created
  +  [INFO   ] (application.location.info): location: Paris
  +  [INFO   ] (application.application): servicing application
  +  [INFO   ] (application.location.info): location: Paris
  +  [INFO   ] (application.publisher.publisher): created
  +  [INFO   ] (application.publisher.publisher):
  +  ******************
  +  * Paris
  +  ******************
  +  [INFO   ] (application.application): done
  +
  +
  +Use the following command to pull in container debug level log entries.
  +
  +  $ merlin application\impl\target\*.jar -system %MAVEN_HOME% -execute -config 
application\impl\conf\config.xml
  +
  +
  +The purpose of this demonstration is to show how the container can be viewed as an 
implementation strategy for the creation of a virtual service, and how that service 
can be composed within a higher level containers, enabling new services without 
artificial barriers.
  +
  +
  
  
  
  1.1                  
avalon-sandbox/merlin/merlin-platform/tutorials/composition/maven.xml
  
  Index: maven.xml
  ===================================================================
  <project default="jar:jar" xmlns:maven="jelly:maven" xmlns:j="jelly:core" 
xmlns:util="jelly:util">
  
    <preGoal name="java:compile">
      <attainGoal name="avalon:meta"/>
    </preGoal>
  
    <goal name="build">
      <maven:reactor
        basedir="${basedir}"
        includes="**/project.xml"
        excludes="project.xml"
        goals="jar:install"
        banner="Installing:"
        ignoreFailures="false" />
    </goal>
  
    <goal name="cleanup">
      <maven:reactor
        basedir="${basedir}"
        includes="**/project.xml"
        excludes="project.xml"
        goals="clean"
        banner="Installing:"
        ignoreFailures="false" />
    </goal>
  
    <goal name="update">
      <attainGoal name="cleanup"/>
      <attainGoal name="build"/>
    </goal>
  </project>
  
  
  
  1.1                  
avalon-sandbox/merlin/merlin-platform/tutorials/composition/project.xml
  
  Index: project.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  
  <project>
  
    <groupId>merlin-tutorial</groupId>
    <name>Merlin Composition Tutorial</name>
    <package>tutorial</package>
  
    <currentVersion>1.0</currentVersion>
    <inceptionYear>2003</inceptionYear>
    <shortDescription>Merlin Configuration Tutorial.</shortDescription>
  
    <build>
  
      <sourceDirectory>${basedir}/src/java</sourceDirectory>
  
      <resources>
        <resource>
          <directory>${basedir}/conf</directory>
          <targetPath>BLOCK-INF</targetPath>
          <includes>
            <include>block.xml</include>
          </includes>
        </resource>
        <resource>
          <directory>${maven.src.dir}/java</directory>
          <includes>
            <include>**/*.x*</include>
          </includes>
        </resource>
      </resources>
  
      <jars></jars>
  
    </build>
  
  </project>
  
  
  
  1.1                  
avalon-sandbox/merlin/merlin-platform/tutorials/composition/application/impl/project.xml
  
  Index: project.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  
  <project>
    <extend>${basedir}/../../project.xml</extend>
    <id>application-impl</id>
    <name>Composition Application</name>
  
    <dependencies>
      <dependency>
        <groupId>avalon-framework</groupId>
        <artifactId>avalon-framework-api</artifactId>
        <version>SNAPSHOT</version>
      </dependency>
      <dependency>
        <groupId>avalon-framework</groupId>
        <artifactId>avalon-framework-impl</artifactId>
        <version>SNAPSHOT</version>
      </dependency>
      <dependency>
        <groupId>merlin-tutorial</groupId>
        <artifactId>locator-api</artifactId>
        <version>1.0</version>
      </dependency>
      <dependency>
        <groupId>merlin-tutorial</groupId>
        <artifactId>publisher-api</artifactId>
        <version>1.0</version>
      </dependency>
    </dependencies>
  
  </project>
  
  
  
  1.1                  
avalon-sandbox/merlin/merlin-platform/tutorials/composition/application/impl/conf/block.xml
  
  Index: block.xml
  ===================================================================
  
  <container name="application">
  
       <classloader>
         <classpath>
           <repository>
             <resource id="avalon-framework:avalon-framework-api" version="SNAPSHOT"/>
             <resource id="avalon-framework:avalon-framework-impl" version="SNAPSHOT"/>
             <resource id="merlin-tutorial:locator-api" version="1.0"/>
             <resource id="merlin-tutorial:publisher-api" version="1.0"/>
             <resource id="merlin-tutorial:application-impl" version="1.0"/>
           </repository>
         </classpath>
       </classloader>
  
       <include name="location" id="merlin-tutorial:locator-impl" version="1.0"/>
       <include name="publisher" id="merlin-tutorial:publisher-impl" version="1.0"/>
  
       <component name="application" 
          class="tutorial.application.Application">
       </component>
  
  </container>
  
  
  
  1.1                  
avalon-sandbox/merlin/merlin-platform/tutorials/composition/application/impl/conf/config.xml
  
  Index: config.xml
  ===================================================================
  
  <targets>
  
    <target path="/application/application">
      <categories priority="DEBUG"/>
    </target>
    <target path="/application/publisher/publisher">
      <categories priority="DEBUG"/>
    </target>
    <target path="/application/location/info">
      <categories priority="DEBUG"/>
    </target>
  
  </targets>
  
  
  
  1.1                  
avalon-sandbox/merlin/merlin-platform/tutorials/composition/application/impl/src/java/tutorial/application/Application.java
  
  Index: Application.java
  ===================================================================
  package tutorial.application;
  
  import java.io.File;
  
  import org.apache.avalon.framework.logger.AbstractLogEnabled;
  import org.apache.avalon.framework.service.Serviceable;
  import org.apache.avalon.framework.service.ServiceManager;
  import org.apache.avalon.framework.service.ServiceException;
  import org.apache.avalon.framework.activity.Disposable;
  
  import tutorial.location.LocationService;
  import tutorial.publisher.PublisherService;
  
  /**
   * PublisherComponent from Merlin's Composition Tutorial
   *
   * @avalon.component version="1.0" name="test"
   * @author Stephen McConnell
   */
  public class Application extends AbstractLogEnabled implements Serviceable, 
Disposable
  {
  
     /**
      * Servicing of the component by the container during
      * which service dependencies declared under the component
      * can be resolved using the supplied service manager.  In this 
      * example the component uses a LocatorService service to log a 
      * message exposing a location.
      *
      * @param manager the service manager
      * @avalon.dependency key="locator" type="tutorial.location.LocationService"
      * @avalon.dependency key="publisher" type="tutorial.publisher.PublisherService"
      */
      public void service( ServiceManager manager ) throws ServiceException
      {
          getLogger().info( "servicing application" );
  
          LocationService locator = null;
          Object object = manager.lookup( "locator" );
          if( object instanceof LocationService )
          {
              locator = (LocationService) object;
          }
          else
          {
              final String error = 
                "Object " + object.getClass().getName() 
                + " does not implement the LocatorService class.";
              throw new ServiceException( "locator", error );
          }
  
          PublisherService publisher = null;
          object = manager.lookup( "publisher" );
          if( object instanceof PublisherService )
          {
              publisher = (PublisherService) object;
          }
          else
          {
              final String error = 
                "Object " + object.getClass().getName() 
                + " does not implement the PublisherService class.";
              throw new ServiceException( "publisher", error );
          }
  
          //
          // get the location from the locator and publish
          // it using the publisher
          //
  
          publisher.publish( 
              "\n******************"
            + "\n* " + locator.getLocation() 
            + "\n******************");
  
          getLogger().info( "done" );
      }
  
      public void dispose()
      {
          getLogger().info( "disposal" );
      }
  }
  
  
  
  
  1.1                  
avalon-sandbox/merlin/merlin-platform/tutorials/composition/location/api/project.xml
  
  Index: project.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  
  <project>
    <extend>${basedir}/../../project.xml</extend>
    <id>locator-api</id>
    <name>Composition Locator API</name>
  
    <dependencies>
      <dependency>
        <groupId>avalon-framework</groupId>
        <artifactId>avalon-framework-api</artifactId>
        <version>SNAPSHOT</version>
      </dependency>
    </dependencies>
  
  </project>
  
  
  
  1.1                  
avalon-sandbox/merlin/merlin-platform/tutorials/composition/location/api/src/java/tutorial/location/LocationService.java
  
  Index: LocationService.java
  ===================================================================
  package tutorial.location;
  
  /**
   * LocationService from Merlin's Composition Tutorial
   *
   * @author Stephen McConnell
   */
  public interface LocationService
  {
     /**
      * Return a location.
      * @return a location
      */
      public String getLocation();
  }
  
  
  
  
  1.1                  
avalon-sandbox/merlin/merlin-platform/tutorials/composition/location/impl/project.xml
  
  Index: project.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  
  <project>
    <extend>${basedir}/../../project.xml</extend>
    <id>locator-impl</id>
    <name>Composition Locator Impl</name>
  
    <dependencies>
      <dependency>
        <groupId>avalon-framework</groupId>
        <artifactId>avalon-framework-api</artifactId>
        <version>SNAPSHOT</version>
      </dependency>
      <dependency>
        <groupId>avalon-framework</groupId>
        <artifactId>avalon-framework-impl</artifactId>
        <version>SNAPSHOT</version>
      </dependency>
      <dependency>
        <groupId>merlin-tutorial</groupId>
        <artifactId>locator-api</artifactId>
        <version>1.0</version>
      </dependency>
    </dependencies>
  
  </project>
  
  
  
  1.1                  
avalon-sandbox/merlin/merlin-platform/tutorials/composition/location/impl/conf/block.xml
  
  Index: block.xml
  ===================================================================
  
  <container name="locator">
  
     <services>
       <service type="tutorial.location.LocationService">
         <source>info</source>
       </service>
     </services>
  
     <classloader>
       <classpath>
         <repository>
           <resource id="avalon-framework:avalon-framework-api" version="SNAPSHOT"/>
           <resource id="avalon-framework:avalon-framework-impl" version="SNAPSHOT"/>
           <resource id="merlin-tutorial:locator-api" version="1.0"/>
           <resource id="merlin-tutorial:locator-impl" version="1.0"/>
         </repository>
       </classpath>
     </classloader>
  
     <component name="info" 
         class="tutorial.location.LocationComponent">
         <configuration>
           <source>Paris</source>
         </configuration>
     </component>
  
  </container>
  
  
  
  1.1                  
avalon-sandbox/merlin/merlin-platform/tutorials/composition/location/impl/src/java/tutorial/location/LocationComponent.java
  
  Index: LocationComponent.java
  ===================================================================
  package tutorial.location;
  
  import java.io.File;
  
  import org.apache.avalon.framework.logger.AbstractLogEnabled;
  import org.apache.avalon.framework.configuration.Configurable;
  import org.apache.avalon.framework.configuration.Configuration;
  import org.apache.avalon.framework.configuration.ConfigurationException;
  import org.apache.avalon.framework.activity.Disposable;
  
  /**
   * HelloComponent from Merlin's Tutorial
   *
   * @avalon.component version="1.0" name="location-provider"
   * @avalon.service type="tutorial.location.LocationService"
   * @author Stephen McConnell
   */
  public class LocationComponent extends AbstractLogEnabled implements
  Configurable, Disposable, LocationService
  {
      private String m_location = "unknown";
  
     /**
      * Configuration of the component by the container.  The
      * implementation gets a child element named 'source' and
      * assigns log the value.
      *
      * @param config the component configuration
      * @exception ConfigurationException if a configuration error occurs
      */
      public void configure( Configuration config ) throws
      ConfigurationException    
      {
          m_location = config.getChild( "source" ).getValue( "unknown" );
          getLogger().info( "location: " + m_location );
      }
  
     /**
      * Return a location.
      * @return a location
      */
      public String getLocation()
      {
          return m_location;
      }
  
      public void dispose()
      {
          getLogger().info( "disposal" );
      }
  }
  
  
  
  
  1.1                  
avalon-sandbox/merlin/merlin-platform/tutorials/composition/location/impl/src/java/tutorial/location/LocationComponent.xprofile
  
  Index: LocationComponent.xprofile
  ===================================================================
  <?xml version="1.0"?>
  
  <profiles>
    <profile name="locator">
      <configuration>
        <source>Paris</source>
      </configuration>
    </profile>
  </profiles>
  
  
  
  1.1                  
avalon-sandbox/merlin/merlin-platform/tutorials/composition/publisher/api/project.xml
  
  Index: project.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  
  <project>
    <extend>${basedir}/../../project.xml</extend>
    <id>publisher-api</id>
    <name>Composition Publisher API</name>
  
    <dependencies>
      <dependency>
        <groupId>avalon-framework</groupId>
        <artifactId>avalon-framework-api</artifactId>
        <version>SNAPSHOT</version>
      </dependency>
    </dependencies>
  
  </project>
  
  
  
  1.1                  
avalon-sandbox/merlin/merlin-platform/tutorials/composition/publisher/api/src/java/tutorial/publisher/PublisherService.java
  
  Index: PublisherService.java
  ===================================================================
  package tutorial.publisher;
  
  /**
   * HelloComponent from Merlin's Tutorial
   *
   * @author Stephen McConnell
   */
  public interface PublisherService
  {
     /**
      * Publish a message.
      * @param message the message to publish
      */
      public void publish( String message );
  }
  
  
  
  
  1.1                  
avalon-sandbox/merlin/merlin-platform/tutorials/composition/publisher/impl/project.xml
  
  Index: project.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  
  <project>
    <extend>${basedir}/../../project.xml</extend>
    <id>publisher-impl</id>
    <name>Composition Publisher Impl</name>
  
    <dependencies>
      <dependency>
        <groupId>avalon-framework</groupId>
        <artifactId>avalon-framework-api</artifactId>
        <version>SNAPSHOT</version>
      </dependency>
      <dependency>
        <groupId>avalon-framework</groupId>
        <artifactId>avalon-framework-impl</artifactId>
        <version>SNAPSHOT</version>
      </dependency>
      <dependency>
        <groupId>merlin-tutorial</groupId>
        <artifactId>publisher-api</artifactId>
        <version>1.0</version>
      </dependency>
    </dependencies>
  
  </project>
  
  
  
  1.1                  
avalon-sandbox/merlin/merlin-platform/tutorials/composition/publisher/impl/conf/block.xml
  
  Index: block.xml
  ===================================================================
  
  <container name="publisher-block">
  
     <services>
       <service type="tutorial.publisher.PublisherService">
         <source>publisher</source>
       </service>
     </services>
  
     <classloader>
       <classpath>
         <repository>
           <resource id="avalon-framework:avalon-framework-api" version="SNAPSHOT"/>
           <resource id="avalon-framework:avalon-framework-impl" version="SNAPSHOT"/>
           <resource id="merlin-tutorial:publisher-api" version="1.0"/>
           <resource id="merlin-tutorial:publisher-impl" version="1.0"/>
         </repository>
       </classpath>
     </classloader>
  
     <component name="publisher" 
         class="tutorial.publisher.PublisherComponent"/>
  
  </container>
  
  
  
  1.1                  
avalon-sandbox/merlin/merlin-platform/tutorials/composition/publisher/impl/src/java/tutorial/publisher/PublisherComponent.java
  
  Index: PublisherComponent.java
  ===================================================================
  package tutorial.publisher;
  
  import java.io.File;
  
  import org.apache.avalon.framework.logger.Logger;
  import org.apache.avalon.framework.logger.AbstractLogEnabled;
  import org.apache.avalon.framework.service.Serviceable;
  import org.apache.avalon.framework.service.ServiceManager;
  import org.apache.avalon.framework.service.ServiceException;
  import org.apache.avalon.framework.activity.Disposable;
  
  /**
   * PublisherComponent from Merlin's Composition Tutorial
   *
   * @avalon.component version="1.0" name="publisher"
   * @avalon.service type="tutorial.publisher.PublisherService"
   * @author Stephen McConnell
   */
  public class PublisherComponent extends AbstractLogEnabled implements 
PublisherService, Disposable
  {
     /**
      * Supply of the logging channel by the container.
      * @param logger the logging channel
      */
      public void enableLogging( Logger logger )
      {
          logger.info( "created" );
          super.enableLogging( logger );
      }
  
     /**
      * Publish a message.
      * @param message the message to publish
      */
      public void publish( String message )
      {
          getLogger().info( message );
      }
  
      public void dispose()
      {
          getLogger().info( "disposal" );
      }
  
  }
  
  
  
  

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

Reply via email to