http://git-wip-us.apache.org/repos/asf/camel/blob/6d05326f/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/vm/SameDisruptorVmQueueSizeAndNoSizeTest.java ---------------------------------------------------------------------- diff --git a/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/vm/SameDisruptorVmQueueSizeAndNoSizeTest.java b/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/vm/SameDisruptorVmQueueSizeAndNoSizeTest.java new file mode 100644 index 0000000..dcf152b --- /dev/null +++ b/components/camel-disruptor/src/test/java/org/apache/camel/component/disruptor/vm/SameDisruptorVmQueueSizeAndNoSizeTest.java @@ -0,0 +1,79 @@ +/** + * 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. + */ +package org.apache.camel.component.disruptor.vm; + +import org.apache.camel.CamelExecutionException; +import org.apache.camel.ContextTestSupport; +import org.apache.camel.ResolveEndpointFailedException; +import org.apache.camel.builder.RouteBuilder; + +/** + * + */ +public class SameDisruptorVmQueueSizeAndNoSizeTest extends ContextTestSupport { + + public void testSameQueue() throws Exception { + for (int i = 0; i < 128; i++) { + template.sendBody("disruptor-vm:foo?blockWhenFull=false", "" + i); + } + + try { + template.sendBody("disruptor-vm:foo?blockWhenFull=false", "Should be full now"); + fail("Should fail"); + } catch (CamelExecutionException e) { + IllegalStateException ise = assertIsInstanceOf(IllegalStateException.class, e.getCause()); + assertEquals("Disruptors ringbuffer was full", ise.getMessage()); + } + } + + public void testSameQueueDifferentSize() throws Exception { + try { + template.sendBody("disruptor-vm:foo?size=256", "Should fail"); + fail("Should fail"); + } catch (ResolveEndpointFailedException e) { + IllegalArgumentException ise = assertIsInstanceOf(IllegalArgumentException.class, e.getCause()); + assertEquals( + "Cannot use existing queue disruptor-vm://foo as the existing queue size 128 does not match given queue size 256", + ise.getMessage()); + } + } + + public void testSameQueueDifferentSizeBar() throws Exception { + try { + template.sendBody("disruptor-vm:bar?size=256", "Should fail"); + fail("Should fail"); + } catch (ResolveEndpointFailedException e) { + IllegalArgumentException ise = assertIsInstanceOf(IllegalArgumentException.class, e.getCause()); + assertEquals("Cannot use existing queue disruptor-vm://bar as the existing queue size " + 1024 + + " does not match given queue size 256", ise.getMessage()); + } + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + from("disruptor-vm:foo?size=128&blockWhenFull=false").routeId("foo").noAutoStartup() + .to("mock:foo"); + + from("disruptor-vm:bar").routeId("bar").noAutoStartup() + .to("mock:bar"); + } + }; + } +}
http://git-wip-us.apache.org/repos/asf/camel/blob/6d05326f/components/camel-disruptor/src/test/resources/log4j.properties ---------------------------------------------------------------------- diff --git a/components/camel-disruptor/src/test/resources/log4j.properties b/components/camel-disruptor/src/test/resources/log4j.properties new file mode 100644 index 0000000..285eb27 --- /dev/null +++ b/components/camel-disruptor/src/test/resources/log4j.properties @@ -0,0 +1,30 @@ +# +# 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. +# +log4j.rootLogger=INFO, file + +# File appender +log4j.appender.file=org.apache.log4j.FileAppender +log4j.appender.file.layout=org.apache.log4j.PatternLayout +log4j.appender.file.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n +log4j.appender.file.file=target/camel-disruptor-test.log +log4j.appender.file.append=true + +log4j.appender.console=org.apache.log4j.ConsoleAppender +log4j.appender.console.layout=org.apache.log4j.PatternLayout +log4j.appender.console.layout.conversionPattern=%d{HH:mm:ss,SSS} - %-5p - %16.16t - %50.50c # %m%n + +#log4j.logger.org.apache.camel.component.disruptor = DEBUG \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/6d05326f/components/pom.xml ---------------------------------------------------------------------- diff --git a/components/pom.xml b/components/pom.xml index af6bbc2..df1304a 100644 --- a/components/pom.xml +++ b/components/pom.xml @@ -73,6 +73,7 @@ <module>camel-couchdb</module> <module>camel-crypto</module> <module>camel-csv</module> + <module>camel-disruptor</module> <module>camel-dns</module> <module>camel-dozer</module> <module>camel-eclipse</module> http://git-wip-us.apache.org/repos/asf/camel/blob/6d05326f/parent/pom.xml ---------------------------------------------------------------------- diff --git a/parent/pom.xml b/parent/pom.xml index 807afb0..d352cad 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -108,6 +108,7 @@ <cxf-xjc-utils-version>2.6.0</cxf-xjc-utils-version> <deltaspike-version>0.3-incubating</deltaspike-version> <derby-version>10.10.1.1</derby-version> + <disruptor.version>3.0.1</disruptor.version> <dnsjava-version>2.1.1</dnsjava-version> <dnsjava-bundle-version>2.1.1_1</dnsjava-bundle-version> <dom4j-bundle-version>1.6.1_5</dom4j-bundle-version> @@ -597,6 +598,11 @@ </dependency> <dependency> <groupId>org.apache.camel</groupId> + <artifactId>camel-disruptor</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> <artifactId>camel-dns</artifactId> <version>${project.version}</version> </dependency> @@ -1586,6 +1592,13 @@ <version>${castor-bundle-version}</version> </dependency> + <!-- optional disruptor dependencies --> + <dependency> + <groupId>com.lmax</groupId> + <artifactId>disruptor</artifactId> + <version>${disruptor.version}</version> + </dependency> + <!-- optional dozer dependencies --> <dependency> <groupId>net.sf.dozer</groupId>
