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 &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="<h1>${title}</h1>" 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> * ≶messenger-manager> * {standard messenger.xml format} * ≶/messenger-manager> * ≶subscription-manager> * {standard subscriptions.xml format} * ≶/subscription-manager> * </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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]