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 &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: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org