« Return to Thread: SwiftMQ 7.4.1 + spring 2.5 + transactions + ReplyTo == trouble

Re: SwiftMQ 7.4.1 + spring 2.5 + transactions + ReplyTo == trouble

by Bryan Talbot :: Rate this Message:

Reply to Author | View in Thread

Well, looks like there's no way to attach files for the test case.  So I'll copy and paste the code into a message instead ...

$> cat src/main/java/bat/Main.java
package bat;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main
{
    public static void main( String [] args )
    {
        final ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext();
        context.setAllowBeanDefinitionOverriding( false );
        context.setConfigLocations( args );
        context.refresh();
        context.registerShutdownHook();        
    }
}


$> cat src/main/java/bat/Responder.java
package bat;
import org.apache.log4j.Logger;
public class Responder
{
    final private Logger logger = Logger.getLogger( Responder.class );
    public String process( String msg )
    {
        final String ret = msg.toUpperCase();
        logger.info( "Processed message and sending response: " + ret );
        return ret;
    }
}


$> cat  src/main/resources/context-swiftmq.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:jms="http://www.springframework.org/schema/jms"
    xmlns:jee="http://www.springframework.org/schema/jee"
    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://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-2.5.xsd
                        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd"
>

    <!--  jndi access for the swiftmq server -->
    <bean id="destinationResolver" class="org.springframework.jms.support.destination.JndiDestinationResolver">
      <property name="jndiEnvironment">
        <props>
          <prop key="java.naming.factory.initial">com.swiftmq.jndi.InitialContextFactoryImpl</prop>
          <prop key="java.naming.provider.url">smqp://localhost:4001/timeout=1000</prop>
        </props>
      </property>
    </bean>

    <jee:jndi-lookup id="jndiConnectionFactory" jndi-name="ConnectionFactory">
      <jee:environment>
        java.naming.factory.initial=com.swiftmq.jndi.InitialContextFactoryImpl
        java.naming.provider.url=smqp://localhost:4001/timeout=1000
      </jee:environment>
    </jee:jndi-lookup>
   
    <bean id="authConnectionFactory" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter"
          p:targetConnectionFactory-ref="jndiConnectionFactory"
          p:username="admin"
          p:password="secret" />
   
<!--     <bean id="connectionFactory" -->
<!--           class="com.swiftmq.jms.springsupport.SingleSharedConnectionFactory" -->
<!--           p:targetConnectionFactory-ref="authConnectionFactory" /> -->
   
    <bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory"
          p:targetConnectionFactory-ref="authConnectionFactory"
          p:cacheProducers="false"
          />

<!--     <bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory" -->
<!--           p:targetConnectionFactory-ref="authConnectionFactory" -->
<!--           /> -->

    <bean id="transactionManager" class="org.springframework.jms.connection.JmsTransactionManager"
          p:connectionFactory-ref="connectionFactory" />
   
    <bean id="responder" class="bat.Responder"/>
   

    <bean id="messageListener" class="org.springframework.jms.listener.adapter.MessageListenerAdapter"
          p:defaultListenerMethod="process">
      <constructor-arg ref="responder"/>
    </bean>

    <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"
          p:transactionManager-ref="transactionManager"
          p:connectionFactory-ref="connectionFactory"
          p:destinationName="testqueue"
          p:destinationResolver-ref="destinationResolver"
          p:messageListener-ref="messageListener"
          />
   
</beans>



$> cat  src/main/resources/context-activemq.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:jms="http://www.springframework.org/schema/jms"
    xmlns:jee="http://www.springframework.org/schema/jee"
    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://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-2.5.xsd
                        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
                        http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core-5.2.0.xsd"
>

  <amq:broker id="amq-broker" useJmx="false" persistent="false">
    <amq:transportConnectors>
      <amq:transportConnector name="stomp" uri="stomp://localhost:61613"/>
      <amq:transportConnector name="tcp" uri="tcp://localhost:4001"/>
    </amq:transportConnectors>
  </amq:broker>
       
  <!--  jndi access for the destinations -->
  <bean id="destinationResolver" class="org.springframework.jms.support.destination.JndiDestinationResolver" depends-on="amq-broker">
    <property name="jndiEnvironment">
      <props>
        <prop key="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</prop>
        <prop key="java.naming.provider.url">vm://localhost</prop>
        <prop key="queue.testqueue">testqueue</prop>
      </props>
    </property>
  </bean>

  <!-- JMS ConnectionFactory to use, configuring the embedded broker using XML -->
  <amq:connectionFactory id="connectionFactory" brokerURL="vm://localhost"/>
       
  <!-- to enable (connection / session / producer / consumer) caching, change the id of the bean
       above to "amqConnectionFactory" and uncomment the bean below -->

<!--   <bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory" -->
<!--         p:targetConnectionFactory-ref="amqConnectionFactory" -->
<!--         p:cacheProducers="false" -->
<!--         /> -->
 
  <bean id="transactionManager" class="org.springframework.jms.connection.JmsTransactionManager"
        p:connectionFactory-ref="connectionFactory" />
 
  <bean id="responder" class="bat.Responder"/>
 
 
  <bean id="messageListener" class="org.springframework.jms.listener.adapter.MessageListenerAdapter"
        p:defaultListenerMethod="process">
    <constructor-arg ref="responder"/>
  </bean>
 
  <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"
        p:transactionManager-ref="transactionManager"
        p:connectionFactory-ref="connectionFactory"
        p:destinationName="testqueue"
        p:destinationResolver-ref="destinationResolver"
        p:messageListener-ref="messageListener"
        />
 
</beans>


$> cat pom.xml
<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>
  <groupId>bat</groupId>
  <artifactId>spring-replyto</artifactId>
  <packaging>jar</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>spring-replyto</name>
  <dependencies>
    <dependency>
    <groupId>javax.jms</groupId>
    <artifactId>jms</artifactId>
    <version>1.1</version>
    </dependency>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring</artifactId>
    <version>2.5.6</version>
    </dependency>
    <dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-core</artifactId>
    <version>5.2.0</version>
    </dependency>
    <dependency>
    <groupId>org.apache.xbean</groupId>
    <artifactId>xbean-spring</artifactId>
    <version>2.8</version>
    </dependency>
    <dependency>
    <groupId>com.swiftmq</groupId>
    <artifactId>swiftmq</artifactId>
    <version>7.4.1</version>
    </dependency>
    <dependency>
    <groupId>com.swiftmq</groupId>
    <artifactId>springsupport</artifactId>
    <version>7.4.1</version>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.15</version>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
      <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>2.2-beta-3</version>
      <configuration>
          <tarLongFileMode>gnu</tarLongFileMode>
          <descriptorRefs>
            <descriptor>src</descriptor>
          </descriptorRefs>
      </configuration>
        <executions>
          <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.1</version>
      </plugin>
    </plugins>
  </build>

  <repositories>
     <!-- redacted -->
  </repositories>
 
</project>

 « Return to Thread: SwiftMQ 7.4.1 + spring 2.5 + transactions + ReplyTo == trouble