Author: cmoulliard
Date: Tue Aug 24 12:17:33 2010
New Revision: 988501

URL: http://svn.apache.org/viewvc?rev=988501&view=rev
Log:
Add a new project to simulate high-volume (production & consumption) using 
camel routes + activemq.

Added:
    camel/trunk/tests/camel-itest-activemq-highvolume/
    camel/trunk/tests/camel-itest-activemq-highvolume/pom.xml
    camel/trunk/tests/camel-itest-activemq-highvolume/src/
    camel/trunk/tests/camel-itest-activemq-highvolume/src/main/
    camel/trunk/tests/camel-itest-activemq-highvolume/src/main/java/
    camel/trunk/tests/camel-itest-activemq-highvolume/src/main/java/org/
    camel/trunk/tests/camel-itest-activemq-highvolume/src/main/java/org/apache/
    
camel/trunk/tests/camel-itest-activemq-highvolume/src/main/java/org/apache/camel/
    
camel/trunk/tests/camel-itest-activemq-highvolume/src/main/java/org/apache/camel/itest/
    
camel/trunk/tests/camel-itest-activemq-highvolume/src/main/java/org/apache/camel/itest/highvolume/
    
camel/trunk/tests/camel-itest-activemq-highvolume/src/main/java/org/apache/camel/itest/highvolume/Messages.java
    camel/trunk/tests/camel-itest-activemq-highvolume/src/main/resources/
    
camel/trunk/tests/camel-itest-activemq-highvolume/src/main/resources/META-INF/
    
camel/trunk/tests/camel-itest-activemq-highvolume/src/main/resources/META-INF/activemq.xml
    
camel/trunk/tests/camel-itest-activemq-highvolume/src/main/resources/META-INF/spring/
    
camel/trunk/tests/camel-itest-activemq-highvolume/src/main/resources/META-INF/spring/camel-context.xml
    
camel/trunk/tests/camel-itest-activemq-highvolume/src/main/resources/log4j.properties
    camel/trunk/tests/camel-itest-activemq-highvolume/src/test/

Added: camel/trunk/tests/camel-itest-activemq-highvolume/pom.xml
URL: 
http://svn.apache.org/viewvc/camel/trunk/tests/camel-itest-activemq-highvolume/pom.xml?rev=988501&view=auto
==============================================================================
--- camel/trunk/tests/camel-itest-activemq-highvolume/pom.xml (added)
+++ camel/trunk/tests/camel-itest-activemq-highvolume/pom.xml Tue Aug 24 
12:17:33 2010
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+       Licensed to the Apache Software Foundation (ASF) under one or more
+       contributor license agreements.  See the NOTICE file distributed with
+       this work for additional information regarding copyright ownership.
+       The ASF licenses this file to You 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.
+-->
+
+<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.apache.camel</groupId>
+               <artifactId>camel-parent</artifactId>
+           <version>2.5-SNAPSHOT</version>
+               <!--  <version>2.4.0</version> -->
+       </parent>
+
+       <artifactId>camel-itest-activemq-highvolume</artifactId>
+       <packaging>bundle</packaging>
+       <name>Camel :: ITest :: ActiveMq :: High Volume</name>
+       <description>Integration Test using ActiveMq with Camel to generate 
high volume messages</description>
+       
+       <properties>
+        <camel.osgi.import.pkg>
+            org.apache.activemq.broker,
+            org.apache.activemq.broker.region.policy,
+            org.apache.activemq.broker.region.virtual,
+            org.apache.activemq.usage,
+            org.apache.activemq.util,
+            org.apache.activemq.xbean,
+            org.springframework.jms.connection;version="3.0.3.RELEASE",
+            *
+        </camel.osgi.import.pkg>
+        <camel.osgi.private.pkg>
+               org.apache.camel.itest.highvolume
+        </camel.osgi.private.pkg>
+        <camel.osgi.dynamic>
+            *
+        </camel.osgi.dynamic>
+    </properties>
+
+       <dependencies>
+               <!-- Camel -->
+               <dependency>
+                       <groupId>org.apache.camel</groupId>
+                       <artifactId>camel-core</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.camel</groupId>
+                       <artifactId>camel-spring</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.camel</groupId>
+                       <artifactId>camel-core-xml</artifactId>
+               </dependency>
+
+               <dependency>
+                       <groupId>org.apache.camel</groupId>
+                       <artifactId>camel-jms</artifactId>
+               </dependency>
+               
+               <!-- Spring -->
+               <dependency>
+                       <groupId>org.springframework</groupId>
+                       <artifactId>spring-context</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.springframework</groupId>
+                       <artifactId>spring-beans</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.springframework</groupId>
+                       <artifactId>spring-core</artifactId>
+               </dependency>
+               
+               <!--  ActiveMq & activemq - camel -->
+               <dependency>
+                       <groupId>org.apache.activemq</groupId>
+                       <artifactId>activemq-core</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.activemq</groupId>
+                       <artifactId>activemq-core</artifactId>
+               </dependency>
+           <dependency>
+             <groupId>org.apache.activemq</groupId>
+             <artifactId>activemq-pool</artifactId>
+             <version>5.3.2</version>
+           </dependency>
+           <dependency>
+             <groupId>org.apache.xbean</groupId>
+             <artifactId>xbean-spring</artifactId>
+           </dependency>
+               <dependency>
+                       <groupId>org.apache.activemq</groupId>
+                       <artifactId>activemq-camel</artifactId>
+               </dependency>
+       </dependencies>
+       
+   <build>
+    <plugins>
+
+      <!-- Allows the example to be run via 'mvn compile exec:java' -->
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>exec-maven-plugin</artifactId>
+        <configuration>
+          <includePluginDependencies>false</includePluginDependencies>
+        </configuration>
+      </plugin>
+
+      <!-- Allows the routes to be run via 'mvn camel:run' -->
+      <plugin>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>camel-maven-plugin</artifactId>
+      </plugin>
+    </plugins>
+  </build>
+       
+</project>

Added: 
camel/trunk/tests/camel-itest-activemq-highvolume/src/main/java/org/apache/camel/itest/highvolume/Messages.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/tests/camel-itest-activemq-highvolume/src/main/java/org/apache/camel/itest/highvolume/Messages.java?rev=988501&view=auto
==============================================================================
--- 
camel/trunk/tests/camel-itest-activemq-highvolume/src/main/java/org/apache/camel/itest/highvolume/Messages.java
 (added)
+++ 
camel/trunk/tests/camel-itest-activemq-highvolume/src/main/java/org/apache/camel/itest/highvolume/Messages.java
 Tue Aug 24 12:17:33 2010
@@ -0,0 +1,34 @@
+package org.apache.camel.itest.highvolume;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Exchange;
+import org.apache.camel.Handler;
+import org.apache.camel.ProducerTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class Messages {
+       
+       @EndpointInject(ref="Direct")
+    ProducerTemplate template;
+       
+       @EndpointInject(ref="JmsQueueProducer")
+    ProducerTemplate templateActiveMq;
+       
+       public void split(Exchange exchange) {
+               String messages = (String) exchange.getIn().getBody();
+               
+               String[] result = messages.split(",");
+               for (int x=0; x<result.length; x++) {
+                       templateActiveMq.sendBody(result[x]);
+               }
+       }
+    
+    public void generate(Exchange exchange) {
+       StringBuilder messages = new StringBuilder();
+        for (int i = 1; i < 1000; i++) {
+               messages.append("Test Message: " + i + ",");
+        }
+        template.sendBody(messages.toString());
+    }
+
+}

Added: 
camel/trunk/tests/camel-itest-activemq-highvolume/src/main/resources/META-INF/activemq.xml
URL: 
http://svn.apache.org/viewvc/camel/trunk/tests/camel-itest-activemq-highvolume/src/main/resources/META-INF/activemq.xml?rev=988501&view=auto
==============================================================================
--- 
camel/trunk/tests/camel-itest-activemq-highvolume/src/main/resources/META-INF/activemq.xml
 (added)
+++ 
camel/trunk/tests/camel-itest-activemq-highvolume/src/main/resources/META-INF/activemq.xml
 Tue Aug 24 12:17:33 2010
@@ -0,0 +1,115 @@
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You 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.
+-->
+<!-- 
+<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.xsd
+                      http://activemq.apache.org/schema/core
+                      
http://activemq.apache.org/schema/core/activemq-core-5.3.0.xsd";>
+-->
+<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";
+  xmlns:osgi="http://www.springframework.org/schema/osgi";
+  xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
+  http://activemq.apache.org/schema/core 
http://activemq.apache.org/schema/core/activemq-core.xsd   
+  http://activemq.apache.org/camel/schema/spring 
http://activemq.apache.org/camel/schema/spring/camel-spring.xsd
+  http://www.springframework.org/schema/osgi 
http://www.springframework.org/schema/osgi/spring-osgi.xsd";>
+  
+    <!-- 
+        The <broker> element is used to configure the ActiveMQ broker. 
+    -->
+    <broker xmlns="http://activemq.apache.org/schema/core";
+            brokerName="brokerHighVolume"
+            persistent="false"
+            useJmx="true"
+            enableStatistics="true"
+            advisorySupport="false">
+        
+             <destinationInterceptors>
+               <virtualDestinationInterceptor>
+                 <virtualDestinations>
+                   <virtualTopic name=">" prefix="VirtualQueueConsumer." />
+                 </virtualDestinations>
+               </virtualDestinationInterceptor>
+             </destinationInterceptors>
+
+            <destinationPolicy>
+            <policyMap> 
+              <policyEntries>
+                <policyEntry topic=">" producerFlowControl="true" 
memoryLimit="1mb">                   
+                  <pendingSubscriberPolicy>
+                    <vmCursor />
+                  </pendingSubscriberPolicy>
+                </policyEntry>
+                
+                <policyEntry queue=">" producerFlowControl="true" 
memoryLimit="1mb">
+                  <pendingQueuePolicy>
+                    <vmQueueCursor/>
+                  </pendingQueuePolicy>
+                 </policyEntry>
+              </policyEntries>
+            </policyMap>
+        </destinationPolicy> 
+    
+        <!-- The store and forward broker networks ActiveMQ will listen to -->
+        <networkConnectors/>
+
+        <!--        
+        <persistenceAdapter>
+            <kahaDB directory="data/kahadb"/>
+        </persistenceAdapter>
+        --> 
+       
+ 
+         <!--
+            The systemUsage controls the maximum amount of space the broker 
will 
+            use before slowing down producers. For more information, see:
+            
+            http://activemq.apache.org/producer-flow-control.html
+         -->    
+        <systemUsage>
+            <systemUsage sendFailIfNoSpace="true">
+                <memoryUsage>
+                    <memoryUsage limit="256 mb"/>
+                </memoryUsage>
+                <storeUsage>
+                    <storeUsage limit="1 gb" name="foo"/>
+                </storeUsage>
+                <tempUsage>
+                    <tempUsage limit="100 mb"/>
+                </tempUsage>
+            </systemUsage>
+        </systemUsage>
+
+                 
+        <!-- 
+            The transport connectors expose ActiveMQ over a given protocol to
+            clients and other brokers. For more information, see: 
+            
+            http://activemq.apache.org/configuring-transports.html 
+        -->
+        <transportConnectors>
+            <transportConnector name="tcp" uri="tcp://0.0.0.0:61616" />
+        </transportConnectors>
+
+    </broker>
+  
+</beans>

Added: 
camel/trunk/tests/camel-itest-activemq-highvolume/src/main/resources/META-INF/spring/camel-context.xml
URL: 
http://svn.apache.org/viewvc/camel/trunk/tests/camel-itest-activemq-highvolume/src/main/resources/META-INF/spring/camel-context.xml?rev=988501&view=auto
==============================================================================
--- 
camel/trunk/tests/camel-itest-activemq-highvolume/src/main/resources/META-INF/spring/camel-context.xml
 (added)
+++ 
camel/trunk/tests/camel-itest-activemq-highvolume/src/main/resources/META-INF/spring/camel-context.xml
 Tue Aug 24 12:17:33 2010
@@ -0,0 +1,109 @@
+<?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.xsd
+       http://camel.apache.org/schema/spring
+       http://camel.apache.org/schema/spring/camel-spring.xsd";>
+
+       <camelContext xmlns="http://camel.apache.org/schema/spring";>
+       
+        <endpoint id="Timer" uri="timer:messages?period=1s"/>
+           <endpoint id="Direct" uri="direct:messages"/>
+           <endpoint id="Split" uri="bean:messages?method=split"/>
+           <endpoint id="GenerateMessages" 
uri="bean:messages?method=generate"/>
+           <endpoint id="JmsQueueProducer" uri="jmsProducer:topic:highVolume"/>
+           <endpoint id="JmsQueueConsumer" 
uri="jmsConsumer:queue:VirtualQueueConsumer.highVolume?concurrentConsumers=1"/>
+           <endpoint id="Log" uri="log:org.apache.camel.example?level=WARN"/>
+           
+           <route id="ProduceMessages" trace="false">
+                       <from ref="Timer"/>
+                       <to ref="GenerateMessages"/>
+               </route>
+
+               <route id="SplitandProduceMessagesOnActiveMq" trace="false">
+                       <from ref="Direct"/>
+                       <doTry>
+                               <to ref="Split"/>
+                               <to uri="JmsQueueProducer"/>
+                               <doCatch>
+                                       
<exception>javax.jms.ResourceAllocationException</exception>
+                                       <log message=">>>>>> PRODUCER SHOULD BE 
STOPPED"/>
+                               </doCatch>
+                       </doTry>
+               </route>
+           
+       <route id="ConsumeMessages" trace="false">
+                   <from ref="JmsQueueConsumer"/>
+                   <delay>
+               <constant>100</constant>
+            </delay>
+                       <to ref="Log"/>
+               </route>
+
+       </camelContext>
+       
+    <!-- 
*******************************************************************************************
 -->
+       
+       <!-- Create an embedded broker -->
+       <bean id="broker" class="org.apache.activemq.xbean.BrokerFactoryBean">
+           <property name="config" value="classpath:META-INF/activemq.xml" />
+           <property name="start" value="true" />
+       </bean>
+       
+       
+    <!-- 
*******************************************************************************************
 -->
+
+       <!-- Config used when we produce the messages 
+            protocol vm:// is used
+            and connection pool 
+            -->
+       
+       <!-- Connection for the client producing -->    
+    <bean id="jmsConnectionFactoryProducer" 
class="org.apache.activemq.ActiveMQConnectionFactory">
+               <property name="brokerURL" value="vm://localhost:61616" />
+       </bean>
+
+       <bean id="pooledConnectionFactory" 
class="org.apache.activemq.pool.PooledConnectionFactory">
+               <property name="maxConnections" value="10" />
+               <property name="maximumActive" value="500" />
+               <property name="connectionFactory" 
ref="jmsConnectionFactoryProducer" />
+       </bean>
+
+       <!-- Use pooled connection factory to produce messages -->
+    <bean id="jmsConfigProducer" 
class="org.apache.camel.component.jms.JmsConfiguration">
+        <property name="connectionFactory" ref="pooledConnectionFactory"/>
+        <property name="transacted" value="false"/>
+    </bean>
+    
+    <bean id="jmsProducer" 
class="org.apache.activemq.camel.component.ActiveMQComponent">
+        <property name="configuration" ref="jmsConfigProducer"/>
+    </bean>
+    
+    <!-- 
*******************************************************************************************
 -->
+    <!-- Config used to consume the messages 
+         Transport layer is different tcp:// instead of vm://
+         and not connection pool is used -->
+         
+    <!-- Connection for the client consuming -->       
+    <bean id="jmsConnectionFactoryConsumer" 
class="org.apache.activemq.ActiveMQConnectionFactory">
+               <property name="brokerURL" value="tcp://localhost:61616" />
+       </bean>
+    
+    <!-- Use simple connection factory to consume messages -->
+    <bean id="jmsConfigConsumer" 
class="org.apache.camel.component.jms.JmsConfiguration">
+        <property name="connectionFactory" ref="jmsConnectionFactoryConsumer"/>
+        <property name="transacted" value="false"/>
+    </bean>
+    
+    <bean id="jmsConsumer" 
class="org.apache.activemq.camel.component.ActiveMQComponent">
+        <property name="configuration" ref="jmsConfigConsumer"/>
+      
+    </bean>
+
+    <!-- 
*******************************************************************************************
 -->
+       
+       <bean name="messages" 
class="org.apache.camel.itest.highvolume.Messages" />
+
+</beans>
\ No newline at end of file

Added: 
camel/trunk/tests/camel-itest-activemq-highvolume/src/main/resources/log4j.properties
URL: 
http://svn.apache.org/viewvc/camel/trunk/tests/camel-itest-activemq-highvolume/src/main/resources/log4j.properties?rev=988501&view=auto
==============================================================================
--- 
camel/trunk/tests/camel-itest-activemq-highvolume/src/main/resources/log4j.properties
 (added)
+++ 
camel/trunk/tests/camel-itest-activemq-highvolume/src/main/resources/log4j.properties
 Tue Aug 24 12:17:33 2010
@@ -0,0 +1,38 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements.  See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You 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.
+## ---------------------------------------------------------------------------
+
+#
+# The logging properties used during tests..
+#
+log4j.rootLogger=WARN, out
+
+# Use the following line to turn on debug output for camel
+#log4j.logger.org.apache.camel=DEBUG
+
+log4j.logger.org.apache.activemq.spring=WARN
+
+# CONSOLE appender not used by default
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} 
- %m%n
+
+# File appender
+log4j.appender.out=org.apache.log4j.FileAppender
+log4j.appender.out.layout=org.apache.log4j.PatternLayout
+log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - 
%m%n
+log4j.appender.out.file=target/camel-itest-activemq-highvolume-test.log
+log4j.appender.out.append=true


Reply via email to