You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by fa...@apache.org on 2004/03/31 01:59:55 UTC

cvs commit: avalon/merlin/facilities/mds/test/src/java/org/apache/avalon/mds/impl TestListener.java

farra       2004/03/30 15:59:55

  Added:       merlin/facilities/mds README.TXT maven.xml
                        project.properties project.xml
               merlin/facilities/mds/api maven.xml project.xml
               merlin/facilities/mds/api/src/java/org/apache/avalon/mds
                        MDSManager.java
               merlin/facilities/mds/impl maven.xml project.xml
               merlin/facilities/mds/impl/src/conf block.xml
               merlin/facilities/mds/impl/src/java/org/apache/avalon/mds
                        MDSManager.java
               merlin/facilities/mds/impl/src/java/org/apache/avalon/mds/impl
                        DefaultMDSManager.java
               merlin/facilities/mds/test maven.xml project.xml
               merlin/facilities/mds/test/src/conf block.xml
               merlin/facilities/mds/test/src/java/org/apache/avalon/mds/impl
                        TestListener.java
  Log:
  Initial commit of Avalon Message Driven Service (MDS) facility.  Handles JMS MessageListener components.
  
  Revision  Changes    Path
  1.1                  avalon/merlin/facilities/mds/README.TXT
  
  Index: README.TXT
  ===================================================================
                               APACHE AVALON
                         MESSAGE DRIVEN SERVICES [MDS]
  
  Note- this is still very alpha level code.  use at your own risk. :)
  
  
  
  1.1                  avalon/merlin/facilities/mds/maven.xml
  
  Index: maven.xml
  ===================================================================
  <project default="avalon:build" xmlns:maven="jelly:maven" xmlns:j="jelly:core" xmlns:util="jelly:util" xmlns:ant="jelly:ant">
  
    <goal name="avalon:clean" prereqs="clean">
      <maven:reactor
        basedir="${basedir}"
        includes="*/project.xml"
        excludes="project.xml,target/**"
        goals="clean"
        banner="Cleaning:"
        ignoreFailures="true"/>
    </goal>
  
    <goal name="avalon:build">
      <maven:reactor basedir="${basedir}"
        includes="*/project.xml"
        excludes="project.xml,target/**"
        goals=""
        banner="Building:"
        ignoreFailures="false"
        postProcessing="true" />
      <ant:copy todir="${maven.build.dir}">
        <j:forEach var="child" items="${reactorProjects}">
          <ant:fileset dir="${child.file.parentFile}/target">
            <ant:include name="${child.artifactId}-${child.currentVersion}.jar"/>
          </ant:fileset>
        </j:forEach>
      </ant:copy>
    </goal>
  
    <goal name="avalon:site" prereqs="avalon:build,xjavadoc,site"/>
  
    <goal name="xjavadoc">
  
      <maven:reactor basedir="${basedir}"
        includes="*/project.xml"
        excludes="project.xml"
        banner="Site Prep:"
        ignoreFailures="false"
        postProcessing="true" />
  
      <ant:mkdir dir="${maven.build.dir}/docs/api" />
      <ant:property name="copyright"
        value="Copyright &amp;copy; ${year} ${pom.organization.name}. All Rights Reserved." />
  
      <ant:path id="template.classpath">
        <j:forEach var="child" items="${reactorProjects}">
          <j:set var="deps" value="${child.dependencies}"/>
          <j:forEach var="dep" items="${deps}">
            <ant:pathelement 
              path="${maven.repo.local}/${dep.getArtifactDirectory()}/jars/${dep.getArtifact()}"/>
          </j:forEach>
        </j:forEach>
      </ant:path>
      
      <util:tokenize var="links" delim="," trim="true">${maven.javadoc.links}</util:tokenize>
  
      <ant:property name="title" value="${pom.name} ${pom.currentVersion}"/>
      <ant:javadoc destdir="${maven.build.dir}/docs/api" 
  	doctitle="&lt;h1&gt;${title}&lt;/h1&gt;" 
        noindex="false" author="true" use="true"
  	windowtitle="${title}" 
        bottom="${copyright}"
        additionalparam="-breakiterator -J-Xmx128m "
        packagenames="*,org.*">
          <j:forEach var="packageGroup" items="${pom.packageGroups}">
            <group title="${packageGroup.title}" packages="${packageGroup.packages}"/>
          </j:forEach>
          <j:forEach var="child" items="${reactorProjects}">
            <sourcepath path="${child.file.parentFile}/src/java"/>
          </j:forEach>
          <j:forEach var="link" items="${links}">
            <ant:link href="${link.trim()}"/>
          </j:forEach>
          <classpath>
            <path refid="template.classpath"/>
  	  </classpath>
  	  <link href="http://java.sun.com/j2se/1.4.2/docs/api/" />
          <!-- allow custom tags -->    
          <util:tokenize var="listOfTags" delim=" ">${maven.javadoc.customtags}</util:tokenize>
          <j:forEach var="someTag" items="${listOfTags}">
            <j:set var="nameVar" value="${someTag}.name"/>
            <j:set var="name" value="${context.findVariable(nameVar)}"/>
            <j:set var="descriptionVar" value="${someTag}.description"/>
            <j:set var="description" value="${context.findVariable(descriptionVar)}"/>
            <j:set var="enabledVar" value="${someTag}.enabled"/>
            <j:set var="enabled" value="${context.findVariable(enabledVar)}"/>
            <j:set var="scopeVar" value="${someTag}.scope"/>
            <j:set var="scope" value="${context.findVariable(scopeVar)}"/>
            <ant:tag name="${name}" description="${description}"
                 enabled="${enabled}" scope="${scope}"/>
          </j:forEach>
      </ant:javadoc>
    </goal>
  
    <goal name="template">
      <ant:delete dir="${maven.build.dir}/template" />
      <ant:mkdir dir="${maven.build.dir}/template" />
      <ant:copy todir="${maven.build.dir}/template">
        <ant:fileset dir=".">
          <ant:include name="LICENSE*"/>
          <ant:include name="project.properties"/>
          <ant:include name="maven.xml"/>
          <ant:include name="project.xml"/>
          <ant:include name="master.xml"/>
        </ant:fileset>
      </ant:copy>
      <ant:copy todir="${maven.build.dir}/template">
        <ant:fileset dir="${basedir}">
          <include name="api/**"/>
          <include name="impl/**"/>
          <include name="xdocs/**"/>
          <exclude name="**/target/**"/>
          <exclude name="**/*.log"/>
        </ant:fileset>
      </ant:copy>
    </goal>
  
  </project>
  
  
  
  1.1                  avalon/merlin/facilities/mds/project.properties
  
  Index: project.properties
  ===================================================================
  
  #
  # custom tags spec
  #
  maven.javadoc.customtags = component service
  
  component.name = avalon.component
  component.description = Component:
  component.enabled = true
  component.scope = class
  
  service.name = avalon.service
  service.description = Service Export:
  service.enabled = true
  service.scope = class
  
  
  
  
  
  
  1.1                  avalon/merlin/facilities/mds/project.xml
  
  Index: project.xml
  ===================================================================
  <?xml version="1.0" encoding="ISO-8859-1"?>
  
  <project>
  
    <extend>${basedir}/../../project.xml</extend>
  
    <groupId>avalon-mds</groupId>
    <name>Avalon MDS</name>
    <currentVersion>1.0</currentVersion>
    <shortDescription>Avalon MDS Project</shortDescription>
  
    <packageGroups>
      <packageGroup>
        <title>Avalon MDS API</title>
        <packages>org.apache.avalon.mds</packages>
      </packageGroup>
      <packageGroup>
        <title>Avalon MDS Implementation</title>
        <packages>org.apache.avalon.http.*</packages>
      </packageGroup>
    </packageGroups>
  
  
    <build>
  
      <nagEmailAddress>dev@avalon.apache.org</nagEmailAddress>
      <sourceDirectory>${basedir}/src/java</sourceDirectory>
      <unitTestSourceDirectory>${basedir}/src/test</unitTestSourceDirectory>
  
      <unitTest>
        <includes>
          <include>**/*TestCase.*</include>
        </includes>
        <excludes>
          <exclude>**/Abstract*.*</exclude>
        </excludes>
        <resources>
          <resource>
            <directory>${basedir}/src/test</directory>
            <includes>
              <include>**/*.dtd</include>
              <include>**/*.properties</include>
              <include>**/*.x*</include>
            </includes>
          </resource>
        </resources>
      </unitTest>
  
      <resources>
        <resource>
          <directory>${basedir}/src/java</directory>
          <includes>
            <include>**/*.dtd</include>
            <include>**/*.properties</include>
            <include>**/*.x*</include>
          </includes>
        </resource>
        <resource>
          <directory>${basedir}/conf</directory>
          <targetPath>BLOCK-INF</targetPath>
          <includes>
            <include>block.xml</include>
          </includes>
        </resource>
      </resources>
  
      <jars></jars>
    </build>
  
  </project>
  
  
  
  1.1                  avalon/merlin/facilities/mds/api/maven.xml
  
  Index: maven.xml
  ===================================================================
  <project default="jar:install">
  
    <preGoal name="jar:jar">
      <attainGoal name="avalon:meta"/>
    </preGoal>
  
  </project>
  
  
  
  1.1                  avalon/merlin/facilities/mds/api/project.xml
  
  Index: project.xml
  ===================================================================
  <?xml version="1.0" encoding="ISO-8859-1"?>
  
  <project>
  
    <extend>${basedir}/../../../project.xml</extend>
  
    <groupId>avalon-mds</groupId>
    <id>avalon-mds-api</id>
    <name>Avalon MDS API</name>
    <package>org.apache.avalon.mds</package>
    <currentVersion>0.1</currentVersion>
    <shortDescription>Avalon MDS API</shortDescription>
  
    <dependencies>
  
      <dependency>
        <groupId>geronimo-spec</groupId>
        <artifactId>geronimo-spec-jms</artifactId>
        <version>DEV</version>
      </dependency>
  
      <dependency>
        <groupId>commons-messenger</groupId>
        <artifactId>commons-messenger</artifactId>
        <version>SNAPSHOT</version>
      </dependency>
  
    </dependencies>
  
  </project>
  
  
  
  1.1                  avalon/merlin/facilities/mds/api/src/java/org/apache/avalon/mds/MDSManager.java
  
  Index: MDSManager.java
  ===================================================================
  
  /*
   * Copyright 1999-2004 Apache Software Foundation
   * Licensed  under the  Apache License,  Version 2.0  (the "License");
   * you may not use  this file  except in  compliance with the License.
   * You may obtain a copy of the License at
   *
   *   http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed  under the  License is distributed on an "AS IS" BASIS,
   * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
   * implied.
   *
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package org.apache.avalon.mds;
  
  import javax.jms.JMSException;
  
  import org.apache.commons.messenger.Messenger;
  import org.apache.commons.messagelet.model.SubscriptionList;
  import org.apache.commons.messagelet.model.Subscription;
  
  /**
   * Message Driven Service Manager Definition.
   * Provides a facade for both the MessengerManager and SubscriptionManager from
   * the Jakarta commons-messenger project.
   * @avalon.service version="1.0"
   */
  public interface MDSManager {
  
    // MessengerManager facade
  
    public String[] getMessengerNames() throws JMSException;
  
    public Messenger getMessenger(String name) throws JMSException;
  
    public void removeMessenger(Messenger messenger);
  
  
    // SubscriptionManager facade
  
    public void subscribe(Subscription subscription) throws Exception;
  
    public void unsubscribe(Subscription subscription) throws Exception;
  
    public SubscriptionList getSubscriptionList();
  
  }
  
  
  
  1.1                  avalon/merlin/facilities/mds/impl/maven.xml
  
  Index: maven.xml
  ===================================================================
  <project default="jar:install">
  
    <preGoal name="jar:jar">
      <attainGoal name="avalon:meta"/>
    </preGoal>
  
  </project>
  
  
  
  1.1                  avalon/merlin/facilities/mds/impl/project.xml
  
  Index: project.xml
  ===================================================================
  <?xml version="1.0" encoding="ISO-8859-1"?>
  
  <project>
  
    <extend>${basedir}/../../../project.xml</extend>
  
    <groupId>avalon-mds</groupId>
    <id>avalon-mds-impl</id>
    <name>Avalon MDS API</name>
    <package>org.apache.avalon.mds.impl</package>
    <currentVersion>0.1</currentVersion>
    <shortDescription>Avalon MDS API</shortDescription>
  
    <dependencies>
  
      <dependency>
        <groupId>geronimo-spec</groupId>
        <artifactId>geronimo-spec-jms</artifactId>
        <version>DEV</version>
      </dependency>
  
      <dependency>
        <groupId>commons-messenger</groupId>
        <artifactId>commons-messenger</artifactId>
        <version>SNAPSHOT</version>
      </dependency>
  
      <dependency>
         <groupId>avalon-mds</groupId>
         <artifactId>avalon-mds-api</artifactId>
         <version>SNAPSHOT</version>
      </dependency>
  
      <dependency>
        <groupId>commons-digester</groupId>
        <artifactId>commons-digester</artifactId>
        <version>1.5</version>
      </dependency>
  
  
      <dependency>
        <groupId>avalon-framework</groupId>
        <artifactId>avalon-framework</artifactId>
        <version>4.1.5</version>
      </dependency>
  
      <dependency>
        <groupId>avalon-meta</groupId>
        <artifactId>avalon-meta-api</artifactId>
        <version>1.4-SNAPSHOT</version>
      </dependency>
  
      <dependency>
        <groupId>avalon-composition</groupId>
        <artifactId>avalon-composition-api</artifactId>
        <version>2.0-SNAPSHOT</version>
      </dependency>
  
      <dependency>
        <id>servletapi</id>
        <version>2.3</version>
      </dependency>
    </dependencies>
  
  
  
  </project>
  
  
  
  1.1                  avalon/merlin/facilities/mds/impl/src/conf/block.xml
  
  Index: block.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  
  <container name="mds">
  
     <classloader>
       <classpath>
         <repository>
  
             <resource id="avalon-mds:avalon-mds-api" version="0.1"/>
             <resource id="avalon-framework:avalon-framework" version="4.1.5"/>
             <resource id="avalon-composition:avalon-composition-api" version="2.0-SNAPSHOT"/>
  	   <resource id="avalon-meta:avalon-meta-api" version="1.4-SNAPSHOT"/>
             <resource id="commons-messenger:commons-messenger" version="SNAPSHOT"/>
             <resource id="commons-digester:commons-digester" version="1.5"/>
             <resource id="commons-collections:commons-collections" version="2.1"/>
             <resource id="commons-beanutils:commons-beanutils" version="1.6.1"/>
             <resource id="commons-logging:commons-logging" version="1.0.1"/>
             <resource id="servletapi:servletapi" version="2.3"/>
  
             <resource id="geronimo-spec:geronimo-spec-jms" version="DEV"/>
             <resource id="geronimo-spec:geronimo-spec-jta" version="DEV"/>
         </repository>
       </classpath>
     </classloader>
  
     <categories>
       <category name="server" priority="INFO"/>
     </categories>
  
     <component name="mds-manager" class="org.apache.avalon.mds.impl.DefaultMDSManager" activation="startup"/>
  
  </container>
  
  
  
  1.1                  avalon/merlin/facilities/mds/impl/src/java/org/apache/avalon/mds/MDSManager.java
  
  Index: MDSManager.java
  ===================================================================
  
  /*
   * Copyright 1999-2004 Apache Software Foundation
   * Licensed  under the  Apache License,  Version 2.0  (the "License");
   * you may not use  this file  except in  compliance with the License.
   * You may obtain a copy of the License at
   *
   *   http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed  under the  License is distributed on an "AS IS" BASIS,
   * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
   * implied.
   *
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package org.apache.avalon.mds;
  
  import javax.jms.JMSException;
  
  import org.apache.commons.messenger.Messenger;
  import org.apache.commons.messagelet.model.SubscriptionList;
  import org.apache.commons.messagelet.model.Subscription;
  
  /**
   * Message Driven Service Manager Definition.
   * Provides a facade for both the MessengerManager and SubscriptionManager from
   * the Jakarta commons-messenger project.
   * @avalon.service version="1.0"
   */
  public interface MDSManager {
  
    // MessengerManager facade
  
    public String[] getMessengerNames() throws JMSException;
  
    public Messenger getMessenger(String name) throws JMSException;
  
    public void removeMessenger(Messenger messenger);
  
  
    // SubscriptionManager facade
  
    public void subscribe(Subscription subscription) throws Exception;
  
    public void unsubscribe(Subscription subscription) throws Exception;
  
    public SubscriptionList getSubscriptionList();
  
  }
  
  
  
  1.1                  avalon/merlin/facilities/mds/impl/src/java/org/apache/avalon/mds/impl/DefaultMDSManager.java
  
  Index: DefaultMDSManager.java
  ===================================================================
  /*
   * Copyright 1999-2004 Apache Software Foundation
   * Licensed  under the  Apache License,  Version 2.0  (the "License");
   * you may not use  this file  except in  compliance with the License.
   * You may obtain a copy of the License at
   *
   *   http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed  under the  License is distributed on an "AS IS" BASIS,
   * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
   * implied.
   *
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package org.apache.avalon.mds.impl;
  
  import org.apache.avalon.mds.MDSManager;
  
  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.DefaultConfigurationSerializer;
  import org.apache.avalon.framework.activity.Initializable;
  import org.apache.avalon.framework.activity.Startable;
  
  import org.apache.avalon.composition.event.CompositionEvent;
  import org.apache.avalon.composition.event.CompositionListener;
  import org.apache.avalon.composition.model.ContainmentModel;
  import org.apache.avalon.composition.model.ComponentModel;
  import org.apache.avalon.composition.model.DeploymentModel;
  
  import org.apache.commons.messenger.Messenger;
  import org.apache.commons.messenger.MessengerManager;
  import org.apache.commons.messenger.MessengerDigester;
  import org.apache.commons.messagelet.model.Subscription;
  import org.apache.commons.messagelet.model.SubscriptionList;
  
  import java.io.StringReader;
  import java.io.*;
  import org.apache.avalon.framework.configuration.*;
  import org.xml.sax.*;
  import org.apache.avalon.framework.context.Contextualizable;
  import org.apache.avalon.framework.context.Context;
  import org.apache.avalon.framework.context.ContextException;
  
  import javax.jms.MessageListener;
  import org.apache.commons.messagelet.SubscriptionManager;
  import javax.jms.JMSException;
  import org.apache.commons.messagelet.ConsumerThread;
  import java.util.HashMap;
  import org.apache.commons.messagelet.model.SubscriptionDigester;
  
  
  /**
   * Default MDS Manager
   * @avalon.component name="mdsManager" lifestyle="singleton"
   * @avalon.service type="org.apache.avalon.composition.event.CompositionListener"
   * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a>
   * @version $Id: DefaultMDSManager.java,v 1.1 2004/03/30 23:59:55 farra Exp $
   */
  public class DefaultMDSManager
      extends AbstractLogEnabled
      implements MDSManager, CompositionListener, Contextualizable,
      Configurable, Initializable
  
  {
  
    /**
     * holds Subscriptions object.  Key = ComponentModel.getQualifiedName()
     */
    private HashMap m_subscriptions = new HashMap();
  
    /**
     * commons-messenger SubscriptionManager
     */
    private SubscriptionManager m_subManager = null;
  
    /**
     * commons-messenger MessengerManager
     */
    private MessengerManager m_msgManager = null;
  
    /**
     * The root application model supplied during the
     * contextualization phase.
     */
    private ContainmentModel m_model;
  
    //---------------------------------------------------------
    // Lifecycle Methods
    //---------------------------------------------------------
  
    /**
     * Contextulaization of the listener by the container during
     * which we are supplied with the root composition model for
     * the application.
     *
     * @param context the supplied listener context
     * @avalon.entry key="urn:composition:containment.model"
     *    type="org.apache.avalon.composition.model.ContainmentModel"
     * @exception ContextException if a contextualization error occurs
     */
    public void contextualize(Context context) throws ContextException {
      m_model =
          (ContainmentModel) context.get(
          "urn:composition:containment.model");
    }
  
    /**
     * configures the MessengerManager and SubscriptionManager.  Format:
     * <pre>
     *    &lg;messenger-manager&gt;
     *      {standard messenger.xml format}
     *    &lg;/messenger-manager&gt;
     *    &lg;subscription-manager&gt;
     *      {standard subscriptions.xml format}
     *    &lg;/subscription-manager&gt;
     * </pre>
     * @param configuration
     * @throws ConfigurationException
     */
    public void configure(Configuration configuration) throws
        ConfigurationException {
      try {
        DefaultConfigurationSerializer serializer = new
            DefaultConfigurationSerializer();
  
        // configure messenger-manager
        Configuration msgConf = configuration.getChild("messenger-manager",true);
        StringReader reader = new StringReader(serializer.serialize(msgConf));
        MessengerDigester msgDigester = new MessengerDigester();
        m_msgManager = (MessengerManager) msgDigester.parse(reader);
  
        // configure subscription-manager
        Configuration subConf = configuration.getChild("subscription-manager",true);
        StringReader strReader = new StringReader(serializer.serialize(subConf));
        SubscriptionDigester subDigester = new SubscriptionDigester();
        m_subManager = (SubscriptionManager) subDigester.parse(strReader);
  
      }
      catch (Exception ex) {
        throw new ConfigurationException("Error configuring MDSManager.", ex);
      }
    }
  
    /**
     * starts the subcriber manager and processes the ContainmentModel
     */
    public void initialize() {
      m_subManager.setMessengerManager(m_msgManager);
      processModel(m_model,true);
    }
  
  
    //---------------------------------------------------------
    // Model Processing
    //---------------------------------------------------------
  
    private void processModel(DeploymentModel model, boolean flag) {
      if (model instanceof ContainmentModel) {
        ContainmentModel containment =
            (ContainmentModel) model;
        if (flag) {
          containment.addCompositionListener(this);
        }
        else {
          containment.removeCompositionListener(this);
        }
        DeploymentModel[] models = containment.getModels();
        for (int i = 0; i < models.length; i++) {
          processModel(models[i], flag);
        }
      }
      else if (model instanceof ComponentModel) {
        ComponentModel component = (ComponentModel) model;
        Class clazz = component.getDeploymentClass();
        if (MessageListener.class.isAssignableFrom(clazz)) {
          if (flag) {
            if (getLogger().isInfoEnabled()) {
              getLogger().info(
                  "component: " + component + " is a JMS MessageListener");
            }
            subscribe(component);
          }
          else {
            if (getLogger().isInfoEnabled()) {
              getLogger().info(
                  "component: " + component + " unsubscribing");
            }
            Subscription subscription = (Subscription) m_subscriptions.get(
                component.getQualifiedName());
            if (subscription != null) {
              try {
                m_subscriptions.remove(component.getQualifiedName());
                unsubscribe(subscription);
              }
              catch (Exception ex) {
                if (getLogger().isErrorEnabled()) {
                  getLogger().error("component: " + component +
                                    " Error unsubscribing");
                }
              }
            }
          }
        }
      }
    }
  
    /**
     * create a Subscription from a ComponentModel by using the component's Configuration
     * @param model
     */
    private void subscribe(ComponentModel model) {
  
      try {
        Configuration conf = model.getConfiguration().getChild("subscription", true);
        String messenger = conf.getAttribute("connection", null);
        String subject = conf.getAttribute("subject", null);
        String selector = conf.getAttribute("selector", null);
        if (messenger != null && subject != null) {
          Subscription sub = new Subscription();
          sub.setConnection(messenger);
          sub.setSubject(subject);
          sub.setSelector(selector);
          sub.setConsumerThread(new ConsumerThread());
          sub.setMessageListener( (MessageListener) model.resolve());
  
          m_subscriptions.put(model.getQualifiedName(), sub);
          subscribe(sub);
        }
        else {
          if (getLogger().isErrorEnabled()) {
            getLogger().error("component: " + model +
                " unable to subscribe to messenger service due to bad configuration");
          }
        }
      }
      catch (Exception ex) {
      }
    }
  
  
    //---------------------------------------------------------
    // MDSManager
    //---------------------------------------------------------
  
    public String[] getMessengerNames() {
      return null;
    }
  
    public Messenger getMessenger(String name) {
      return m_msgManager.getMessenger(name);
    }
  
    public void removeMessenger(Messenger messenger) {
      m_msgManager.removeMessenger(messenger);
    }
  
    public void subscribe(Subscription subscription) throws Exception {
      m_subManager.subscribe(subscription);
    }
  
    public void unsubscribe(Subscription subscription) throws Exception {
      m_subManager.unsubscribe(subscription);
    }
  
    public SubscriptionList getSubscriptionList() {
      return m_subManager.getSubscriptionList();
    }
  
    //---------------------------------------------------------
    // CompositionListener
    //---------------------------------------------------------
  
    /**
     * Model addition.
     */
    public void modelAdded(CompositionEvent event) {
      DeploymentModel model = event.getChild();
      processModel(model, true);
    }
  
    /**
     * Model removal.
     */
    public void modelRemoved(CompositionEvent event) {
      DeploymentModel model = event.getChild();
      processModel(model, false);
    }
  
  }
  
  
  1.1                  avalon/merlin/facilities/mds/test/maven.xml
  
  Index: maven.xml
  ===================================================================
  <project default="jar:install">
  
    <preGoal name="jar:jar">
      <attainGoal name="avalon:meta"/>
    </preGoal>
  
  </project>
  
  
  
  1.1                  avalon/merlin/facilities/mds/test/project.xml
  
  Index: project.xml
  ===================================================================
  <?xml version="1.0" encoding="ISO-8859-1"?>
  
  <project>
  
    <extend>${basedir}/../../../project.xml</extend>
  
    <groupId>avalon-mds</groupId>
    <id>avalon-mds-test</id>
    <name>Avalon MDS API</name>
    <package>org.apache.avalon.mds</package>
    <currentVersion>0.1</currentVersion>
    <shortDescription>Avalon MDS API</shortDescription>
  
    <dependencies>
  
      <dependency>
        <groupId>geronimo-spec</groupId>
        <artifactId>geronimo-spec-jms</artifactId>
        <version>DEV</version>
      </dependency>
  
      <dependency>
        <groupId>commons-messenger</groupId>
        <artifactId>commons-messenger</artifactId>
        <version>SNAPSHOT</version>
      </dependency>
  
      <dependency>
        <groupId>commons-digester</groupId>
        <artifactId>commons-digester</artifactId>
        <version>1.5</version>
      </dependency>
  
      <dependency>
         <groupId>avalon-mds</groupId>
         <artifactId>avalon-mds-api</artifactId>
         <version>SNAPSHOT</version>
      </dependency>
  
      <dependency>
         <groupId>avalon-mds</groupId>
         <artifactId>avalon-mds-impl</artifactId>
         <version>SNAPSHOT</version>
      </dependency>
  
      
      <dependency>
        <groupId>avalon-framework</groupId>
        <artifactId>avalon-framework</artifactId>
        <version>4.1.5</version>
      </dependency>
  
      <dependency>
        <groupId>avalon-meta</groupId>
        <artifactId>avalon-meta-api</artifactId>
        <version>1.4-SNAPSHOT</version>
      </dependency>
  
      <dependency>
        <groupId>avalon-composition</groupId>
        <artifactId>avalon-composition-api</artifactId>
        <version>2.0-SNAPSHOT</version>
      </dependency>
  
      <dependency>
        <id>servletapi</id>
        <version>2.3</version>
      </dependency>
    </dependencies>
  
  
  
  </project>
  
  
  
  1.1                  avalon/merlin/facilities/mds/test/src/conf/block.xml
  
  Index: block.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  
  <container name="mds">
  
     <classloader>
       <classpath>
         <repository>
             <!-- jms container specific dependencies -->
             <resource id="openjms:exolabcore" version="0.3.6"/>
             <resource id="openjms:openjms" version="0.7.6-rc3"/>
             <resource id="openjms:openjms-client" version="0.7.6-rc3"/>
  
             <!-- core runtime dependencies -->
  	   <resource id="avalon-mds:avalon-mds-api" version="SNAPSHOT"/>
  	   <resource id="avalon-mds:avalon-mds-impl" version="SNAPSHOT"/>
             <resource id="avalon-framework:avalon-framework" version="4.1.5"/>
             <resource id="avalon-composition:avalon-composition-api" version="2.0-SNAPSHOT"/>
  	   <resource id="avalon-meta:avalon-meta-api" version="1.4-SNAPSHOT"/>
             <resource id="commons-messenger:commons-messenger" version="SNAPSHOT"/>
             <resource id="commons-digester:commons-digester" version="1.5"/>
             <resource id="commons-collections:commons-collections" version="2.1"/>
             <resource id="commons-beanutils:commons-beanutils" version="1.6.1"/>
             <resource id="commons-logging:commons-logging" version="1.0.1"/>
             <resource id="servletapi:servletapi" version="2.3"/>
  
             <resource id="geronimo-spec:geronimo-spec-jms" version="DEV"/>
             <resource id="geronimo-spec:geronimo-spec-jta" version="DEV"/>
         </repository>
       </classpath>
     </classloader>
  
     <categories>
       <category name="server" priority="INFO"/>
     </categories>
  
     <component name="mds-manager" class="org.apache.avalon.mds.impl.DefaultMDSManager" activation="startup">
       <configuration>
         <messenger-manager>
          <messenger name="topic">
                  <jndi lookupName="JmsTopicConnectionFactory">
                          <property>
                                  <name>java.naming.factory.initial</name>
                                  <value>org.exolab.jms.jndi.rmi.RmiJndiInitialContextFactory</value>
                          </property>
                          <property>
                                  <name>java.naming.provider.url</name>
                                  <value>rmi://localhost:1099/JndiServer</value>
                          </property>
                  </jndi>
          </messenger>
          <messenger name="queue">
                  <jndi lookupName="JmsQueueConnectionFactory">
                          <property>
                                  <name>java.naming.factory.initial</name>
                                  <value>org.exolab.jms.jndi.rmi.RmiJndiInitialContextFactory</value>
                          </property>
                          <property>
                                  <name>java.naming.provider.url</name>
                                  <value>rmi://localhost:1099/JndiServer</value>
                          </property>
                  </jndi>
  	</messenger>
         </messenger-manager>
       </configuration>
     </component>
  
  
     <component name="test-listener" class="org.apache.avalon.mds.impl.DefaultMDSManager" activation="startup">
      <configuration>
        <subscription name="topic" subject="topic"/>
      </configuration>
     </component>
  
  </container>
  
  
  
  1.1                  avalon/merlin/facilities/mds/test/src/java/org/apache/avalon/mds/impl/TestListener.java
  
  Index: TestListener.java
  ===================================================================
  package org.apache.avalon.mds.impl;
  
  import javax.jms.MessageListener;
  import javax.jms.Message;
  import javax.jms.TextMessage;
  import javax.jms.JMSException;
  import org.apache.avalon.framework.logger.AbstractLogEnabled;
  
  /**
   * @avalon.component name="test-listener"
   */
  public class TestListener
      extends AbstractLogEnabled
      implements MessageListener
  {
    public TestListener() {
    }
  
    public void onMessage(Message message) {
      try {
        getLogger().info( ( (TextMessage) message).getText());
      }
      catch (JMSException ex) {
        getLogger().error("error on message");
      }
    }
  }
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org