--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" output="target/classes" path="src/main/java"/>
+ <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+ <classpathentry kind="src" path="src/test/resources"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>argeo.slc.activemq.selector</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.maven.ide.eclipse.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.maven.ide.eclipse.maven2Nature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
--- /dev/null
+#Sun Apr 26 07:20:59 CEST 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
--- /dev/null
+#Sun Apr 26 07:24:25 CEST 2009
+activeProfiles=
+eclipse.preferences.version=1
+fullBuildGoals=process-test-resources
+includeModules=false
+resolveWorkspaceProjects=true
+resourceFilterGoals=process-resources resources\:testResources
+skipCompilerPlugin=true
+version=1
--- /dev/null
+Bundle-SymbolicName: argeo.slc.activemq.selector.jms
+Bundle-Version: 0.1.1
+Import-Package: javax.jms,
+ javax.management.j2ee.statistics,
+ org.apache.commons.logging
+Require-Bundle:
+ org.springframework.core,
+ org.springframework.context,
+ org.springframework.beans,
+ org.springframework.jms,
+ org.argeo.dep.osgi.activemq,
+ argeo.slc.activemq.selector
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:amq="http://activemq.apache.org/schema/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+ http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">
+
+ <!-- <import resource="classpath:org/argeo/slc/activemq/spring.xml" /> -->
+
+ <!-- Embedded broker -->
+ <amq:broker useJmx="false" persistent="false">
+ <amq:transportConnectors>
+ <amq:transportConnector uri="tcp://localhost:61616" />
+ </amq:transportConnectors>
+ </amq:broker>
+
+ <!-- Connection Factory -->
+ <bean id="jmsConnectionFactory"
+ class="org.springframework.jms.connection.SingleConnectionFactory">
+ <property name="targetConnectionFactory">
+ <bean id="slcDefault.jms.amqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
+ <property name="brokerURL">
+ <value>tcp://localhost:61616</value>
+ </property>
+ </bean>
+ </property>
+ </bean>
+</beans>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
+
+
+ <bean id="listener" class="argeo.slc.activemq.selector.DummyMessageListener">
+ </bean>
+
+ <bean id="listenerContainer"
+ class="org.springframework.jms.listener.DefaultMessageListenerContainer">
+ <property name="connectionFactory" ref="jmsConnectionFactory" />
+ <property name="destinationName" value="testQueue" />
+ <property name="messageListener" ref="listener" />
+ <property name="messageSelector" value="myFilter='myValue'" />
+ </bean>
+
+
+</beans>
\ No newline at end of file
--- /dev/null
+Bundle-Name: Log4j Configuration
+Bundle-SymbolicName: argeo.slc.activemq.selector.log4j
+Bundle-Version: 0.11.3.qualifier
+Fragment-Host: com.springsource.org.apache.log4j
+
--- /dev/null
+log4j.rootLogger=WARN, console
+
+## Levels
+log4j.logger.argeo=DEBUG
+log4j.logger.org.argeo=DEBUG
+log4j.logger.org.argeo.slc.execution.ExecutionParameterPostProcessor=TRACE
+log4j.logger.org.argeo.slc.execution.ExecutionContext=DEBUG
+log4j.logger.org.argeo.slc.execution.SimpleExecutionSpec=DEBUG
+
+log4j.logger.org.springframework=WARN
+log4j.logger.org.springframework.jms=DEBUG
+
+log4j.logger.org.apache.activemq=DEBUG
+log4j.logger.org.apache.activemq.transport=WARN
+log4j.logger.org.apache.activemq.broker.TransportConnection=WARN
+
+log4j.logger.org.apache.catalina=INFO
+log4j.logger.org.apache.coyote=INFO
+log4j.logger.org.apache.tomcat=INFO
+
+## Appenders
+# console is set to be a ConsoleAppender.
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+
+# console uses PatternLayout.
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern= %-5p %d{ISO8601} %m - %c%n
--- /dev/null
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.argeo.slc.runtime</groupId>
+ <artifactId>argeo-slc-runtime</artifactId>
+ <version>0.11.3-SNAPSHOT</version>
+ <relativePath>../../runtime/</relativePath>
+ </parent>
+ <groupId>org.argeo.slc.sandbox</groupId>
+ <artifactId>argeo.slc.activemq.selector</artifactId>
+ <name>Argeo SLC ActiveMQ Selector Tests</name>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>${version.maven-bundle-plugin}</version>
+ </plugin>
+ <plugin>
+ <groupId>org.argeo.slc.maven</groupId>
+ <artifactId>maven-argeo-osgi-plugin</artifactId>
+ <configuration>
+ <systemProperties>
+ <slc.osgi.bundles>${basedir}/bundles;in=*;ex=**/.svn/**,${basedir}/target;in=*.jar;ex=*-sources.jar</slc.osgi.bundles>
+ <slc.osgi.start>
+ org.springframework.osgi.extender,
+ argeo.slc.activemq.selector.jms
+ </slc.osgi.start>
+ </systemProperties>
+ </configuration>
+ </plugin>
+
+ </plugins>
+ </build>
+ <dependencies>
+ <!--
+ Spring -->
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.jms</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.transaction</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.osgi</groupId>
+ <artifactId>org.springframework.osgi.extender</artifactId>
+ </dependency>
+
+ <!-- JMS -->
+ <dependency>
+ <groupId>javax.jms</groupId>
+ <artifactId>com.springsource.javax.jms</artifactId>
+ </dependency>
+
+ <!-- ActiveMQ -->
+ <dependency>
+ <groupId>org.argeo.dep.osgi</groupId>
+ <artifactId>org.argeo.dep.osgi.activemq</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>com.springsource.javax.management.j2ee</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.activation</groupId>
+ <artifactId>com.springsource.javax.activation</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>com.springsource.javax.servlet</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.ejb</groupId>
+ <artifactId>com.springsource.javax.ejb</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.xml.rpc</groupId>
+ <artifactId>com.springsource.javax.xml.rpc</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.xml.soap</groupId>
+ <artifactId>com.springsource.javax.xml.soap</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.xml.stream</groupId>
+ <artifactId>
+ com.springsource.javax.xml.stream
+ </artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.xalan</groupId>
+ <artifactId>
+ com.springsource.org.apache.xalan
+ </artifactId>
+ </dependency>
+
+
+
+ <dependency>
+ <groupId>org.apache.log4j</groupId>
+ <artifactId>com.springsource.org.apache.log4j</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.junit</groupId>
+ <artifactId>com.springsource.junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.slc.runtime</groupId>
+ <artifactId>org.argeo.slc.osgiboot</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
--- /dev/null
+package argeo.slc.activemq.selector;
+
+import javax.jms.Message;
+import javax.jms.MessageListener;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.beans.factory.InitializingBean;
+
+public class DummyMessageListener implements MessageListener, InitializingBean {
+ private final static Log log = LogFactory
+ .getLog(DummyMessageListener.class);
+
+ public void onMessage(Message message) {
+
+ log.info("DummyMessageListener received message " + message);
+ }
+
+ public void afterPropertiesSet() throws Exception {
+ log.info("DummyMessageListener configured.");
+
+ }
+
+}
--- /dev/null
+package argeo.slc.activemq.selector;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageProducer;
+import javax.jms.Queue;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+
+import junit.framework.TestCase;
+
+import org.apache.activemq.ActiveMQConnectionFactory;
+import org.apache.activemq.broker.BrokerService;
+
+public abstract class AbstractActiveMqTest extends TestCase {
+ // private final static Log log = LogFactory.getLog(SelectorTest.class);
+
+ protected BrokerService broker;
+ protected String connectorStr = "vm://localhost";
+
+ protected String propName = "myFilter";
+ protected String propValue = "myValue";
+ protected String txt = "myText";
+
+ protected Session session;
+ protected Queue queue;
+ protected MessageProducer producer;
+
+ protected void createSession() throws Exception {
+ ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
+ connectorStr);
+ Connection connection = connectionFactory.createConnection();
+ connection.start();
+ session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+ queue = session.createQueue("testQueue");
+ producer = session.createProducer(queue);
+ }
+
+ protected TextMessage createMessage() throws Exception {
+ TextMessage msg = session.createTextMessage();
+ msg.setStringProperty(propName, propValue);
+ msg.setText(txt);
+ return msg;
+ }
+
+ protected void assertMsg(TextMessage receivedMsg) throws Exception {
+ assertNotNull(receivedMsg);
+ assertEquals(propValue, receivedMsg.getStringProperty(propName));
+ assertEquals(txt, receivedMsg.getText());
+ }
+
+}
--- /dev/null
+package argeo.slc.activemq.selector;
+
+
+public class OsgiTest extends AbstractActiveMqTest {
+ public void testSend() throws Exception {
+ producer.send(createMessage());
+ }
+
+ protected void setUp() throws Exception {
+ connectorStr = "tcp://localhost:61616";
+ createSession();
+ }
+
+ protected void tearDown() throws Exception {
+ session.close();
+ }
+
+ /*
+ * public static void main(String[] args) { try { ConnectionFactory
+ * connectionFactory = new ActiveMQConnectionFactory(
+ * "tcp://localhost:61616"); Connection connection =
+ * connectionFactory.createConnection(); connection.start(); Session session
+ * = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ *
+ * Queue queue = session.createQueue("testQueue"); MessageProducer producer
+ * = session.createProducer(queue);
+ *
+ * // TextMessage msg = session.createTextMessage(); //
+ * msg.setStringProperty(propName, propValue); // msg.setText(txt);
+ *
+ * } catch (JMSException e) { e.printStackTrace(); }
+ *
+ * }
+ */
+
+}
--- /dev/null
+package argeo.slc.activemq.selector;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageProducer;
+import javax.jms.Queue;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+
+import junit.framework.TestCase;
+
+import org.apache.activemq.ActiveMQConnectionFactory;
+import org.apache.activemq.broker.BrokerService;
+
+public class SelectorTest extends AbstractActiveMqTest {
+ // private final static Log log = LogFactory.getLog(SelectorTest.class);
+
+ protected BrokerService broker;
+ protected String connectorStr = "vm://localhost";
+
+ protected String propName = "myFilter";
+ protected String propValue = "myValue";
+ protected String txt = "myText";
+
+ protected Session session;
+ protected Queue queue;
+ protected MessageProducer producer;
+
+ public void testNoFilter() throws Exception {
+ producer.send(createMessage());
+ TextMessage receivedMsg = (TextMessage) session.createConsumer(queue)
+ .receive(2000);
+ assertMsg(receivedMsg);
+ }
+
+ public void testFilterOk() throws Exception {
+ producer.send(createMessage());
+ MessageConsumer consumer = session.createConsumer(queue, propName
+ + "='" + propValue + "'");
+ TextMessage receivedMsg = (TextMessage) consumer.receive(2000);
+ assertMsg(receivedMsg);
+ }
+
+ public void testFilterNok() throws Exception {
+ producer.send(createMessage());
+ MessageConsumer consumer = session.createConsumer(queue, propName
+ + "='notMyValue'");
+ TextMessage receivedMsg = (TextMessage) consumer.receive(1000);
+ assertNull("Message reception should time out", receivedMsg);
+ }
+
+ protected void setUp() throws Exception {
+ broker = new BrokerService();
+ broker.setPersistent(false);
+ broker.setUseJmx(false);
+ broker.addConnector(connectorStr);
+ broker.start();
+
+ createSession();
+ }
+
+ protected void tearDown() throws Exception {
+ if (broker != null) {
+ broker.stop();
+ }
+ }
+
+}
--- /dev/null
+log4j.rootLogger=WARN, console
+
+## Levels
+log4j.logger.org.argeo=DEBUG
+log4j.logger.org.argeo.slc.execution.ExecutionParameterPostProcessor=TRACE
+log4j.logger.org.argeo.slc.execution.ExecutionContext=DEBUG
+log4j.logger.org.argeo.slc.execution.SimpleExecutionSpec=DEBUG
+
+log4j.logger.org.springframework=WARN
+
+log4j.logger.org.apache.activemq=DEBUG
+
+log4j.logger.org.apache.catalina=INFO
+log4j.logger.org.apache.coyote=INFO
+log4j.logger.org.apache.tomcat=INFO
+
+## Appenders
+# console is set to be a ConsoleAppender.
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+
+# console uses PatternLayout.
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern= %-5p %d{ISO8601} %m - %c%n