You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2006/04/15 01:38:46 UTC
svn commit: r394227 [1/3] - in /incubator/servicemix/trunk: ./
servicemix-assembly/
servicemix-common/src/main/java/org/apache/servicemix/common/
servicemix-core/src/main/java/org/apache/servicemix/
servicemix-core/src/main/java/org/apache/servicemix/e...
Author: gnodet
Date: Fri Apr 14 16:38:22 2006
New Revision: 394227
URL: http://svn.apache.org/viewcvs?rev=394227&view=rev
Log:
SM-401: Create a new servicemix-eip component for standard Enterprise Integration Patterns
This includes a number of enhancements:
* servicemix-common derived components can send stateless jms clustered messages
* Store / StoreFactory interfaces define a clusterable / persistent kind of maps (need to add transactions)
* Add boolean / nodeset support on jaxp expressions
Added:
incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/expression/JAXPBooleanXPathExpression.java
incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/expression/JAXPNodeSetXPathExpression.java
incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/servicedesc/EndpointSupport.java
incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/store/
incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/store/Store.java
incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/store/StoreFactory.java
incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/store/memory/
incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/store/memory/MemoryStore.java
incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/store/memory/MemoryStoreFactory.java
incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/tck/ExchangeCompletedListener.java
incubator/servicemix/trunk/servicemix-eip/ (with props)
incubator/servicemix/trunk/servicemix-eip/maven.xml
incubator/servicemix/trunk/servicemix-eip/project.properties
incubator/servicemix/trunk/servicemix-eip/project.xml
incubator/servicemix/trunk/servicemix-eip/src/
incubator/servicemix/trunk/servicemix-eip/src/main/
incubator/servicemix/trunk/servicemix-eip/src/main/java/
incubator/servicemix/trunk/servicemix-eip/src/main/java/org/
incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/
incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/
incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/
incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPBootstrap.java
incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPComponent.java
incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPDeployer.java
incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPEndpoint.java
incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPLifeCycle.java
incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPSpringComponent.java
incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/patterns/
incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/patterns/ContentBasedRouter.java
incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/patterns/Pipeline.java
incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/patterns/StaticRecipientList.java
incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/patterns/StaticRoutingSlip.java
incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/patterns/WireTap.java
incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/patterns/XPathSplitter.java
incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/support/
incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/support/AbstractSplitter.java
incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/support/ExchangeTarget.java
incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/support/MessageUtil.java
incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/support/Predicate.java
incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/support/RoutingRule.java
incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/support/XPathPredicate.java
incubator/servicemix/trunk/servicemix-eip/src/main/resources/
incubator/servicemix/trunk/servicemix-eip/src/main/resources/org/
incubator/servicemix/trunk/servicemix-eip/src/main/resources/org/apache/
incubator/servicemix/trunk/servicemix-eip/src/main/resources/org/apache/servicemix/
incubator/servicemix/trunk/servicemix-eip/src/main/resources/org/apache/servicemix/eip/
incubator/servicemix/trunk/servicemix-eip/src/test/
incubator/servicemix/trunk/servicemix-eip/src/test/java/
incubator/servicemix/trunk/servicemix-eip/src/test/java/org/
incubator/servicemix/trunk/servicemix-eip/src/test/java/org/apache/
incubator/servicemix/trunk/servicemix-eip/src/test/java/org/apache/servicemix/
incubator/servicemix/trunk/servicemix-eip/src/test/java/org/apache/servicemix/eip/
incubator/servicemix/trunk/servicemix-eip/src/test/java/org/apache/servicemix/eip/AbstractEIPTest.java
incubator/servicemix/trunk/servicemix-eip/src/test/java/org/apache/servicemix/eip/ContentBasedRouterTest.java
incubator/servicemix/trunk/servicemix-eip/src/test/java/org/apache/servicemix/eip/PipelineTest.java
incubator/servicemix/trunk/servicemix-eip/src/test/java/org/apache/servicemix/eip/SpringConfigurationTest.java
incubator/servicemix/trunk/servicemix-eip/src/test/java/org/apache/servicemix/eip/StaticRecipientListTest.java
incubator/servicemix/trunk/servicemix-eip/src/test/java/org/apache/servicemix/eip/StaticRoutingSlipTest.java
incubator/servicemix/trunk/servicemix-eip/src/test/java/org/apache/servicemix/eip/VMEIPTests.java
incubator/servicemix/trunk/servicemix-eip/src/test/java/org/apache/servicemix/eip/WireTapJmsFlowTest.java
incubator/servicemix/trunk/servicemix-eip/src/test/java/org/apache/servicemix/eip/WireTapTest.java
incubator/servicemix/trunk/servicemix-eip/src/test/java/org/apache/servicemix/eip/XPathSplitterTest.java
incubator/servicemix/trunk/servicemix-eip/src/test/resources/
incubator/servicemix/trunk/servicemix-eip/src/test/resources/log4j-tests.properties
incubator/servicemix/trunk/servicemix-eip/src/test/resources/log4j.properties
incubator/servicemix/trunk/servicemix-eip/src/test/resources/org/
incubator/servicemix/trunk/servicemix-eip/src/test/resources/org/apache/
incubator/servicemix/trunk/servicemix-eip/src/test/resources/org/apache/servicemix/
incubator/servicemix/trunk/servicemix-eip/src/test/resources/org/apache/servicemix/eip/
incubator/servicemix/trunk/servicemix-eip/src/test/resources/org/apache/servicemix/eip/spring.xml
Modified:
incubator/servicemix/trunk/project.properties
incubator/servicemix/trunk/servicemix-assembly/project.xml
incubator/servicemix/trunk/servicemix-common/src/main/java/org/apache/servicemix/common/BaseLifeCycle.java
incubator/servicemix/trunk/servicemix-common/src/main/java/org/apache/servicemix/common/EndpointSupport.java
incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/JbiConstants.java
incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/nmr/flow/jca/JCAFlow.java
incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/nmr/flow/jms/JMSFlow.java
incubator/servicemix/trunk/servicemix-core/src/test/java/org/apache/servicemix/jbi/config/SpringConfigTest.java
Modified: incubator/servicemix/trunk/project.properties
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/project.properties?rev=394227&r1=394226&r2=394227&view=diff
==============================================================================
--- incubator/servicemix/trunk/project.properties (original)
+++ incubator/servicemix/trunk/project.properties Fri Apr 14 16:38:22 2006
@@ -93,6 +93,7 @@
servicemix-lwcontainer/project.xml,\
servicemix-bpe/project.xml,\
servicemix-wsn2005/project.xml,\
+ servicemix-eip/project.xml,\
servicemix-assembly/project.xml,\
tooling/maven-eclipse-plugin-plugin/project.xml,\
tooling/servicemix-packaging-descriptors/project.xml,\
Modified: incubator/servicemix/trunk/servicemix-assembly/project.xml
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-assembly/project.xml?rev=394227&r1=394226&r2=394227&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-assembly/project.xml (original)
+++ incubator/servicemix/trunk/servicemix-assembly/project.xml Fri Apr 14 16:38:22 2006
@@ -154,6 +154,16 @@
</dependency>
<dependency>
<groupId>${pom.groupId}</groupId>
+ <artifactId>servicemix-eip</artifactId>
+ <version>${pom.currentVersion}</version>
+ <type>zip</type>
+ <properties>
+ <eclipse.dependency>true</eclipse.dependency>
+ <component>true</component>
+ </properties>
+ </dependency>
+ <dependency>
+ <groupId>${pom.groupId}</groupId>
<artifactId>servicemix-gbean</artifactId>
<version>${pom.currentVersion}</version>
<properties>
Modified: incubator/servicemix/trunk/servicemix-common/src/main/java/org/apache/servicemix/common/BaseLifeCycle.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-common/src/main/java/org/apache/servicemix/common/BaseLifeCycle.java?rev=394227&r1=394226&r2=394227&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-common/src/main/java/org/apache/servicemix/common/BaseLifeCycle.java (original)
+++ incubator/servicemix/trunk/servicemix-common/src/main/java/org/apache/servicemix/common/BaseLifeCycle.java Fri Apr 14 16:38:22 2006
@@ -35,6 +35,7 @@
import javax.transaction.TransactionManager;
import org.apache.commons.logging.Log;
+import org.apache.servicemix.JbiConstants;
import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
import edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicBoolean;
@@ -373,7 +374,16 @@
}
processor.process(exchange);
} else {
- ExchangeProcessor processor = (ExchangeProcessor) processors.remove(exchange.getExchangeId());
+ ExchangeProcessor processor = null;
+ if (exchange.getProperty(JbiConstants.SENDER_ENDPOINT) != null) {
+ String key = exchange.getProperty(JbiConstants.SENDER_ENDPOINT).toString();
+ Endpoint ep = (Endpoint) this.component.getRegistry().getEndpoint(key);
+ if (ep != null) {
+ processor = ep.getProcessor();
+ }
+ } else {
+ processor = (ExchangeProcessor) processors.remove(exchange.getExchangeId());
+ }
if (processor == null) {
throw new IllegalStateException("No processor found for: " + exchange.getExchangeId());
}
@@ -381,11 +391,31 @@
}
}
+ /**
+ *
+ * @param exchange
+ * @param processor
+ * @throws MessagingException
+ * @deprecated use sendConsumerExchange(MessageExchange, Endpoint) instead
+ */
public void sendConsumerExchange(MessageExchange exchange, ExchangeProcessor processor) throws MessagingException {
- // If this is a DONE status, no answer is expected
- if (exchange.getStatus() != ExchangeStatus.DONE) {
+ // If the exchange is not ACTIVE, no answer is expected
+ if (exchange.getStatus() == ExchangeStatus.ACTIVE) {
processors.put(exchange.getExchangeId(), processor);
}
+ channel.send(exchange);
+ }
+
+ /**
+ * This method allows the component to keep no state in memory so that
+ * components can be clustered and provide fail-over and load-balancing.
+ * @param exchange
+ * @param endpoint
+ * @throws MessagingException
+ */
+ public void sendConsumerExchange(MessageExchange exchange, Endpoint endpoint) throws MessagingException {
+ String key = EndpointSupport.getKey(endpoint);
+ exchange.setProperty(JbiConstants.SENDER_ENDPOINT, key);
channel.send(exchange);
}
Modified: incubator/servicemix/trunk/servicemix-common/src/main/java/org/apache/servicemix/common/EndpointSupport.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-common/src/main/java/org/apache/servicemix/common/EndpointSupport.java?rev=394227&r1=394226&r2=394227&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-common/src/main/java/org/apache/servicemix/common/EndpointSupport.java (original)
+++ incubator/servicemix/trunk/servicemix-common/src/main/java/org/apache/servicemix/common/EndpointSupport.java Fri Apr 14 16:38:22 2006
@@ -18,17 +18,11 @@
import javax.jbi.servicedesc.ServiceEndpoint;
import javax.xml.namespace.QName;
+
public class EndpointSupport {
public static String getKey(QName service, String endpoint) {
- StringBuffer sb = new StringBuffer();
- sb.append("{");
- sb.append(service.getNamespaceURI());
- sb.append("}");
- sb.append(service.getLocalPart());
- sb.append(":");
- sb.append(endpoint);
- return sb.toString();
+ return org.apache.servicemix.jbi.servicedesc.EndpointSupport.getKey(service, endpoint);
}
public static String getKey(ServiceEndpoint endpoint) {
Modified: incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/JbiConstants.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/JbiConstants.java?rev=394227&r1=394226&r2=394227&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/JbiConstants.java (original)
+++ incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/JbiConstants.java Fri Apr 14 16:38:22 2006
@@ -15,6 +15,7 @@
*/
package org.apache.servicemix;
+
public interface JbiConstants {
String SEND_SYNC = "javax.jbi.messaging.sendSync";
@@ -36,5 +37,7 @@
String STATELESS_CONSUMER = "org.apache.servicemix.consumer.stateless";
String STATELESS_PROVIDER = "org.apache.servicemix.provider.stateless";
+
+ String SENDER_ENDPOINT = "org.apache.servicemix.senderEndpoint";
}
Added: incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/expression/JAXPBooleanXPathExpression.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/expression/JAXPBooleanXPathExpression.java?rev=394227&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/expression/JAXPBooleanXPathExpression.java (added)
+++ incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/expression/JAXPBooleanXPathExpression.java Fri Apr 14 16:38:22 2006
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2005-2006 The 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.servicemix.expression;
+
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpressionException;
+
+/**
+ * Evaluates an XPath expression and coerces the result into a String.
+ *
+ * @version $Revision: 359151 $
+ */
+public class JAXPBooleanXPathExpression extends JAXPXPathExpression {
+
+ public JAXPBooleanXPathExpression() {
+ }
+
+ public JAXPBooleanXPathExpression(String xpath) throws Exception {
+ super(xpath);
+ }
+
+ public Object evaluateXPath(Object object) throws XPathExpressionException {
+ return getXPathExpression().evaluate(object, XPathConstants.BOOLEAN);
+ }
+}
Added: incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/expression/JAXPNodeSetXPathExpression.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/expression/JAXPNodeSetXPathExpression.java?rev=394227&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/expression/JAXPNodeSetXPathExpression.java (added)
+++ incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/expression/JAXPNodeSetXPathExpression.java Fri Apr 14 16:38:22 2006
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2005-2006 The 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.servicemix.expression;
+
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpressionException;
+
+/**
+ * Evaluates an XPath expression and coerces the result into a String.
+ *
+ * @version $Revision: 359151 $
+ */
+public class JAXPNodeSetXPathExpression extends JAXPXPathExpression {
+
+ public JAXPNodeSetXPathExpression() {
+ }
+
+ public JAXPNodeSetXPathExpression(String xpath) throws Exception {
+ super(xpath);
+ }
+
+ public Object evaluateXPath(Object object) throws XPathExpressionException {
+ return getXPathExpression().evaluate(object, XPathConstants.NODESET);
+ }
+}
Modified: incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/nmr/flow/jca/JCAFlow.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/nmr/flow/jca/JCAFlow.java?rev=394227&r1=394226&r2=394227&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/nmr/flow/jca/JCAFlow.java (original)
+++ incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/nmr/flow/jca/JCAFlow.java Fri Apr 14 16:38:22 2006
@@ -72,6 +72,7 @@
import org.apache.servicemix.jbi.messaging.MessageExchangeImpl;
import org.apache.servicemix.jbi.nmr.Broker;
import org.apache.servicemix.jbi.nmr.flow.AbstractFlow;
+import org.apache.servicemix.jbi.servicedesc.EndpointSupport;
import org.apache.servicemix.jbi.servicedesc.InternalEndpoint;
import org.jencks.JCAConnector;
import org.jencks.SingletonEndpointFactory;
@@ -422,7 +423,7 @@
return;
}
try {
- String key = event.getEndpoint().getServiceName() + event.getEndpoint().getEndpointName();
+ String key = EndpointSupport.getKey(event.getEndpoint());
if(!connectorMap.containsKey(key)){
ActiveMQActivationSpec ac = new ActiveMQActivationSpec();
ac.setDestinationType("javax.jms.Queue");
@@ -447,7 +448,7 @@
public void onInternalEndpointUnregistered(EndpointEvent event, boolean broadcast) {
try{
- String key = event.getEndpoint().getServiceName() + event.getEndpoint().getEndpointName();
+ String key = EndpointSupport.getKey(event.getEndpoint());
JCAConnector connector=(JCAConnector) connectorMap.remove(key);
if(connector!=null){
connector.destroy();
@@ -529,7 +530,7 @@
String destination;
if (me.getRole() == Role.PROVIDER) {
if (me.getDestinationId() == null) {
- destination = INBOUND_PREFIX + me.getEndpoint().getServiceName() + me.getEndpoint().getEndpointName();
+ destination = INBOUND_PREFIX + EndpointSupport.getKey(me.getEndpoint());
} else if (Boolean.TRUE.equals(me.getProperty(JbiConstants.STATELESS_PROVIDER)) && !isSynchronous(me)) {
destination = INBOUND_PREFIX + me.getDestinationId().getName();
} else {
@@ -539,7 +540,15 @@
if (me.getSourceId() == null) {
throw new IllegalStateException("No sourceId set on the exchange");
} else if (Boolean.TRUE.equals(me.getProperty(JbiConstants.STATELESS_CONSUMER)) && !isSynchronous(me)) {
- destination = INBOUND_PREFIX + me.getSourceId().getName();
+ // If the consumer is stateless and has specified a sender endpoint,
+ // this exchange will be sent to the given endpoint queue, so that
+ // This property must have been created using EndpointSupport.getKey
+ // fail-over and load-balancing can be achieved
+ if (me.getProperty(JbiConstants.SENDER_ENDPOINT) != null) {
+ destination = INBOUND_PREFIX + me.getProperty(JbiConstants.SENDER_ENDPOINT);
+ } else {
+ destination = INBOUND_PREFIX + me.getSourceId().getName();
+ }
} else {
destination = INBOUND_PREFIX + me.getSourceId().getContainerName();
}
Modified: incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/nmr/flow/jms/JMSFlow.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/nmr/flow/jms/JMSFlow.java?rev=394227&r1=394226&r2=394227&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/nmr/flow/jms/JMSFlow.java (original)
+++ incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/nmr/flow/jms/JMSFlow.java Fri Apr 14 16:38:22 2006
@@ -58,6 +58,7 @@
import org.apache.servicemix.jbi.messaging.MessageExchangeImpl;
import org.apache.servicemix.jbi.nmr.Broker;
import org.apache.servicemix.jbi.nmr.flow.AbstractFlow;
+import org.apache.servicemix.jbi.servicedesc.EndpointSupport;
import org.apache.servicemix.jbi.servicedesc.InternalEndpoint;
import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
@@ -376,7 +377,7 @@
return;
}
try {
- String key = event.getEndpoint().getServiceName() + event.getEndpoint().getEndpointName();
+ String key = EndpointSupport.getKey(event.getEndpoint());
if (!consumerMap.containsKey(key)) {
Queue queue = inboundSession.createQueue(INBOUND_PREFIX + key);
MessageConsumer consumer = inboundSession.createConsumer(queue);
@@ -395,7 +396,7 @@
public void onInternalEndpointUnregistered(EndpointEvent event, boolean broadcast) {
try {
- String key = event.getEndpoint().getServiceName() + event.getEndpoint().getEndpointName();
+ String key = EndpointSupport.getKey(event.getEndpoint());
MessageConsumer consumer = (MessageConsumer) consumerMap.remove(key);
if (consumer != null) {
consumer.close();
@@ -471,7 +472,7 @@
String destination;
if (me.getRole() == Role.PROVIDER) {
if (me.getDestinationId() == null) {
- destination = INBOUND_PREFIX + me.getEndpoint().getServiceName() + me.getEndpoint().getEndpointName();
+ destination = INBOUND_PREFIX + EndpointSupport.getKey(me.getEndpoint());
} else if (Boolean.TRUE.equals(me.getProperty(JbiConstants.STATELESS_PROVIDER)) && !isSynchronous(me)) {
destination = INBOUND_PREFIX + me.getDestinationId().getName();
} else {
@@ -481,7 +482,15 @@
if (me.getSourceId() == null) {
throw new IllegalStateException("No sourceId set on the exchange");
} else if (Boolean.TRUE.equals(me.getProperty(JbiConstants.STATELESS_CONSUMER)) && !isSynchronous(me)) {
- destination = INBOUND_PREFIX + me.getSourceId().getName();
+ // If the consumer is stateless and has specified a sender endpoint,
+ // this exchange will be sent to the given endpoint queue, so that
+ // fail-over and load-balancing can be achieved
+ // This property must have been created using EndpointSupport.getKey
+ if (me.getProperty(JbiConstants.SENDER_ENDPOINT) != null) {
+ destination = INBOUND_PREFIX + me.getProperty(JbiConstants.SENDER_ENDPOINT);
+ } else {
+ destination = INBOUND_PREFIX + me.getSourceId().getName();
+ }
} else {
destination = INBOUND_PREFIX + me.getSourceId().getContainerName();
}
Added: incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/servicedesc/EndpointSupport.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/servicedesc/EndpointSupport.java?rev=394227&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/servicedesc/EndpointSupport.java (added)
+++ incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/jbi/servicedesc/EndpointSupport.java Fri Apr 14 16:38:22 2006
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2005-2006 The 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.servicemix.jbi.servicedesc;
+
+import javax.jbi.servicedesc.ServiceEndpoint;
+import javax.xml.namespace.QName;
+
+
+public class EndpointSupport {
+
+ public static String getKey(QName service, String endpoint) {
+ StringBuffer sb = new StringBuffer();
+ sb.append("{");
+ sb.append(service.getNamespaceURI());
+ sb.append("}");
+ sb.append(service.getLocalPart());
+ sb.append(":");
+ sb.append(endpoint);
+ return sb.toString();
+ }
+
+ public static String getKey(ServiceEndpoint endpoint) {
+ return getKey(endpoint.getServiceName(), endpoint.getEndpointName());
+ }
+
+}
Added: incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/store/Store.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/store/Store.java?rev=394227&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/store/Store.java (added)
+++ incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/store/Store.java Fri Apr 14 16:38:22 2006
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2005-2006 The 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.servicemix.store;
+
+import java.io.IOException;
+
+public interface Store {
+
+ String PERSISTENT = "Persistent";
+
+ String CLUSTERED = "Clustered";
+
+ public boolean hasFeature(String name);
+
+ public void store(String id, Object data) throws IOException;
+
+ public String store(Object data) throws IOException;
+
+ public Object load(String id) throws IOException;
+
+ public void remove(String id) throws IOException;
+
+}
Added: incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/store/StoreFactory.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/store/StoreFactory.java?rev=394227&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/store/StoreFactory.java (added)
+++ incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/store/StoreFactory.java Fri Apr 14 16:38:22 2006
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2005-2006 The 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.servicemix.store;
+
+import java.io.IOException;
+
+public interface StoreFactory {
+
+ public Store get(String name) throws IOException;
+
+ public void release(Store store) throws IOException;
+
+}
Added: incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/store/memory/MemoryStore.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/store/memory/MemoryStore.java?rev=394227&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/store/memory/MemoryStore.java (added)
+++ incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/store/memory/MemoryStore.java Fri Apr 14 16:38:22 2006
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2005-2006 The 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.servicemix.store.memory;
+
+import java.io.IOException;
+import java.util.Map;
+
+import org.apache.activemq.util.IdGenerator;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.servicemix.store.Store;
+
+import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
+
+public class MemoryStore implements Store {
+
+ private static final Log log = LogFactory.getLog(MemoryStore.class);
+
+ private Map datas = new ConcurrentHashMap();
+ private IdGenerator idGenerator;
+
+ public MemoryStore(IdGenerator idGenerator) {
+ this.idGenerator = idGenerator;
+ }
+
+ public boolean hasFeature(String name) {
+ return false;
+ }
+
+ public void store(String id, Object data) throws IOException {
+ log.debug("Storing object with id: " + id);
+ datas.put(id, data);
+ }
+
+ public String store(Object data) throws IOException {
+ String id = idGenerator.generateId();
+ datas.put(id, data);
+ return id;
+ }
+
+ public Object load(String id) throws IOException {
+ log.debug("Loading object with id: " + id);
+ return datas.get(id);
+ }
+
+ public void remove(String id) throws IOException {
+ datas.remove(id);
+ }
+
+
+}
Added: incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/store/memory/MemoryStoreFactory.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/store/memory/MemoryStoreFactory.java?rev=394227&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/store/memory/MemoryStoreFactory.java (added)
+++ incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/store/memory/MemoryStoreFactory.java Fri Apr 14 16:38:22 2006
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2005-2006 The 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.servicemix.store.memory;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.activemq.util.IdGenerator;
+import org.apache.servicemix.store.Store;
+import org.apache.servicemix.store.StoreFactory;
+
+public class MemoryStoreFactory implements StoreFactory {
+
+ private IdGenerator idGenerator = new IdGenerator();
+ private Map stores = new HashMap();
+
+ /* (non-Javadoc)
+ * @see org.apache.servicemix.store.ExchangeStoreFactory#get(java.lang.String)
+ */
+ public synchronized Store get(String name) throws IOException {
+ MemoryStore store = (MemoryStore) stores.get(name);
+ if (store == null) {
+ store = new MemoryStore(idGenerator);
+ stores.put(name, store);
+ }
+ return store;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.servicemix.store.ExchangeStoreFactory#release(org.apache.servicemix.store.ExchangeStore)
+ */
+ public synchronized void release(Store store) throws IOException {
+ stores.remove(store);
+ }
+
+
+}
Added: incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/tck/ExchangeCompletedListener.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/tck/ExchangeCompletedListener.java?rev=394227&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/tck/ExchangeCompletedListener.java (added)
+++ incubator/servicemix/trunk/servicemix-core/src/main/java/org/apache/servicemix/tck/ExchangeCompletedListener.java Fri Apr 14 16:38:22 2006
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2005-2006 The 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.servicemix.tck;
+
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.jbi.messaging.ExchangeStatus;
+import javax.jbi.messaging.MessageExchange;
+
+import junit.framework.Assert;
+
+import org.apache.servicemix.jbi.event.ExchangeEvent;
+import org.apache.servicemix.jbi.event.ExchangeListener;
+
+import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
+
+public class ExchangeCompletedListener extends Assert implements ExchangeListener {
+
+ private Map exchanges = new ConcurrentHashMap();
+
+ public void exchangeSent(ExchangeEvent event) {
+ exchanges.put(event.getExchange().getExchangeId(), event.getExchange());
+ }
+
+ public void assertExchangeCompleted() throws Exception {
+ Thread.sleep(50);
+ for (Iterator it = exchanges.values().iterator(); it.hasNext();) {
+ MessageExchange me = (MessageExchange) it.next();
+ assertTrue("Exchange is ACTIVE", me.getStatus() != ExchangeStatus.ACTIVE);
+ }
+ }
+
+}
Modified: incubator/servicemix/trunk/servicemix-core/src/test/java/org/apache/servicemix/jbi/config/SpringConfigTest.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-core/src/test/java/org/apache/servicemix/jbi/config/SpringConfigTest.java?rev=394227&r1=394226&r2=394227&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-core/src/test/java/org/apache/servicemix/jbi/config/SpringConfigTest.java (original)
+++ incubator/servicemix/trunk/servicemix-core/src/test/java/org/apache/servicemix/jbi/config/SpringConfigTest.java Fri Apr 14 16:38:22 2006
@@ -1,20 +1,18 @@
-/**
- *
- * Copyright 2005 LogicBlaze, Inc. http://www.logicblaze.com
- *
- * 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
- *
+/*
+ * Copyright 2005-2006 The 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.
- *
- **/
+ * 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.servicemix.jbi.config;
import org.apache.servicemix.examples.AbstractSpringTestSupport;
Propchange: incubator/servicemix/trunk/servicemix-eip/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Fri Apr 14 16:38:22 2006
@@ -0,0 +1,3 @@
+target
+.classpath
+.project
Added: incubator/servicemix/trunk/servicemix-eip/maven.xml
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-eip/maven.xml?rev=394227&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-eip/maven.xml (added)
+++ incubator/servicemix/trunk/servicemix-eip/maven.xml Fri Apr 14 16:38:22 2006
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!--
+
+ Copyright 2005 The 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.
+
+-->
+
+<project default="default"
+ xmlns:ant="jelly:ant"
+ xmlns:artifact="artifact">
+
+ <postGoal name="java:compile">
+ <attainGoal name="xbean:generate" />
+ </postGoal>
+
+ <goal name="xbean:generate" description="Generates the XBean XSD, documentation and META-INF/services files.">
+ <path id="test.classpath">
+ <pathelement path="${maven.build.dest}" />
+ <pathelement path="${basedir}/target/classes" />
+ <pathelement path="${basedir}/target/test-classes" />
+ <path refid="maven.dependency.classpath" />
+ </path>
+
+ <taskdef name="xsdGenerate" classname="org.apache.xbean.spring.generator.MappingGeneratorTask">
+ <classpath refid="test.classpath" />
+ </taskdef>
+ <xsdGenerate
+ destFile="${basedir}/target/servicemix-eip-${pom.currentVersion}.xsd" namespace="http://servicemix.apache.org/eip/1.0"
+ classpathref="test.classpath" srcdir="${basedir}/src/main/java" metaInfDir="${basedir}/target/generated/"/>
+ <copy file="${basedir}/target/servicemix-eip-${pom.currentVersion}.xsd" todir="${basedir}/target/generated/"/>
+ <copy file="${basedir}/target/servicemix-eip-${pom.currentVersion}.xsd" todir="${basedir}/../xdocs"/>
+ <copy file="${basedir}/target/servicemix-eip-${pom.currentVersion}.xsd.html" todir="${basedir}/../xdocs"/>
+ </goal>
+
+</project>
Added: incubator/servicemix/trunk/servicemix-eip/project.properties
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-eip/project.properties?rev=394227&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-eip/project.properties (added)
+++ incubator/servicemix/trunk/servicemix-eip/project.properties Fri Apr 14 16:38:22 2006
@@ -0,0 +1,28 @@
+# -------------------------------------------------------------------
+# Copyright 2001-2004 The 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.
+# -------------------------------------------------------------------
+# $Rev: 356022 $ $Date: 2005-12-11 12:58:34 -0800 (dim., 11 déc. 2005) $
+# -------------------------------------------------------------------
+# P R O J E C T P R O P E R T I E S
+# -------------------------------------------------------------------
+
+maven.multiproject.type=jbi
+
+jbi.component.class.name = org.apache.servicemix.eip.EIPComponent
+jbi.bootstrap.class.name = org.apache.servicemix.eip.EIPBootstrap
+jbi.component.type=service-engine
+
+org.apache.commons.attributes.enable=true
+org.apache.commons.attributes.index.enable=true
Added: incubator/servicemix/trunk/servicemix-eip/project.xml
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-eip/project.xml?rev=394227&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-eip/project.xml (added)
+++ incubator/servicemix/trunk/servicemix-eip/project.xml Fri Apr 14 16:38:22 2006
@@ -0,0 +1,333 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!--
+
+ Copyright 2005 The 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.
+
+-->
+
+<!DOCTYPE project>
+<project>
+ <pomVersion>3</pomVersion>
+ <extend>${basedir}/../etc/project.xml</extend>
+
+ <name>ServiceMix :: EIP Service Engine</name>
+ <id>servicemix-eip</id>
+ <shortDescription>EIP service engine</shortDescription>
+ <description>EIP service engine</description>
+
+ <package>org.apache.servicemix.eip</package>
+ <packageGroups>
+ <packageGroup>
+ <title>EIP service engine</title>
+ <packages>org.apache.servicemix.eip</packages>
+ </packageGroup>
+ </packageGroups>
+
+ <!-- ============ -->
+ <!-- Dependencies -->
+ <!-- ============ -->
+ <dependencies>
+
+ <dependency>
+ <groupId>${pom.groupId}</groupId>
+ <artifactId>maven-jbi-plugin</artifactId>
+ <version>${pom.currentVersion}</version>
+ <type>plugin</type>
+ </dependency>
+
+ <!-- JBI bundled dependencies -->
+ <dependency>
+ <groupId>${pom.groupId}</groupId>
+ <artifactId>servicemix-common</artifactId>
+ <version>${pom.currentVersion}</version>
+ <properties>
+ <eclipse.dependency>true</eclipse.dependency>
+ <jbi.bundle>true</jbi.bundle>
+ <jbi.bootstrap>true</jbi.bootstrap>
+ </properties>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>${commons_logging_version}</version>
+ <properties>
+ </properties>
+ </dependency>
+ <dependency>
+ <groupId>backport-util-concurrent</groupId>
+ <artifactId>backport-util-concurrent</artifactId>
+ <version>${backport_util_concurrent_version}</version>
+ <properties>
+ </properties>
+ </dependency>
+ <dependency>
+ <groupId>wsdl4j</groupId>
+ <artifactId>wsdl4j</artifactId>
+ <version>${wsdl4j_version}</version>
+ <properties>
+ </properties>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.xfire</groupId>
+ <artifactId>xfire-all</artifactId>
+ <version>${xfire_version}</version>
+ <properties>
+ <jbi.bundle>true</jbi.bundle>
+ </properties>
+ </dependency>
+ <dependency>
+ <groupId>stax</groupId>
+ <artifactId>stax-api</artifactId>
+ <version>${stax_api_version}</version>
+ <properties>
+ </properties>
+ </dependency>
+ <dependency>
+ <groupId>jdom</groupId>
+ <artifactId>jdom</artifactId>
+ <version>${jdom_version}</version>
+ <properties>
+ <jbi.bundle>true</jbi.bundle>
+ </properties>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.xbean</groupId>
+ <artifactId>xbean-spring</artifactId>
+ <version>${xbean_version}</version>
+ <properties>
+ </properties>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.xbean</groupId>
+ <artifactId>xbean-server</artifactId>
+ <version>${xbean_version}</version>
+ <properties>
+ </properties>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.xbean</groupId>
+ <artifactId>xbean-kernel</artifactId>
+ <version>${xbean_version}</version>
+ <properties>
+ </properties>
+ </dependency>
+ <dependency>
+ <groupId>springframework</groupId>
+ <artifactId>spring</artifactId>
+ <version>${spring_version}</version>
+ <properties>
+ </properties>
+ </dependency>
+ <dependency>
+ <groupId>woodstox</groupId>
+ <artifactId>wstx-asl</artifactId>
+ <version>${woodstox_version}</version>
+ <properties>
+ </properties>
+ </dependency>
+ <dependency>
+ <groupId>xmlbeans</groupId>
+ <artifactId>xbean</artifactId>
+ <version>${xmlbeans_version}</version>
+ <properties>
+ <jbi.bundle>true</jbi.bundle>
+ </properties>
+ </dependency>
+
+ <!-- Commons attribute -->
+ <dependency>
+ <groupId>commons-attributes</groupId>
+ <artifactId>commons-attributes-api</artifactId>
+ <version>${commons_attributes_version}</version>
+ <url>http://jakarta.apache.org/commons/attributes/</url>
+ <properties>
+ <jbi.bundle>true</jbi.bundle>
+ </properties>
+ </dependency>
+ <dependency>
+ <groupId>commons-attributes</groupId>
+ <artifactId>commons-attributes-plugin</artifactId>
+ <version>${commons_attributes_version}</version>
+ <type>plugin</type>
+ <url>http://jakarta.apache.org/commons/attributes/</url>
+ </dependency>
+
+ <!-- Backport 175 -->
+ <dependency>
+ <groupId>backport175</groupId>
+ <artifactId>backport175</artifactId>
+ <version>${backport175_version}</version>
+ <url>http://backport175.codehaus.org</url>
+ <properties>
+ <jbi.bundle>true</jbi.bundle>
+ </properties>
+ </dependency>
+
+ <!-- JAXB -->
+ <dependency>
+ <groupId>servicemix</groupId>
+ <artifactId>jaxb-api</artifactId>
+ <version>${jaxb_version}</version>
+ <properties>
+ <jbi.bundle>true</jbi.bundle>
+ </properties>
+ </dependency>
+
+ <!-- Provided dependencies -->
+ <dependency>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-j2ee-connector_1.5_spec</artifactId>
+ <version>${geronimo_spec_j2ee_connector_version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-jta_1.0.1B_spec</artifactId>
+ <version>${geronimo_spec_jta_version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${pom.groupId}</groupId>
+ <artifactId>servicemix-jbi</artifactId>
+ <version>${pom.currentVersion}</version>
+ <properties>
+ <eclipse.dependency>true</eclipse.dependency>
+ </properties>
+ </dependency>
+ <dependency>
+ <groupId>mx4j</groupId>
+ <artifactId>mx4j</artifactId>
+ <version>${mx4j_version}</version>
+ </dependency>
+ <dependency>
+ <groupId>mx4j</groupId>
+ <artifactId>mx4j-remote</artifactId>
+ <version>${mx4j_version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.ws.commons</groupId>
+ <artifactId>XmlSchema</artifactId>
+ <version>${xmlschema_version}</version>
+ </dependency>
+
+ <!-- Testing only -->
+ <dependency>
+ <groupId>${pom.groupId}</groupId>
+ <artifactId>servicemix-core</artifactId>
+ <version>${pom.currentVersion}</version>
+ <properties>
+ <eclipse.dependency>true</eclipse.dependency>
+ </properties>
+ </dependency>
+ <dependency>
+ <groupId>${pom.groupId}</groupId>
+ <artifactId>servicemix-components</artifactId>
+ <version>${pom.currentVersion}</version>
+ <properties>
+ <eclipse.dependency>true</eclipse.dependency>
+ </properties>
+ </dependency>
+ <dependency>
+ <groupId>incubator-activemq</groupId>
+ <artifactId>activemq-core</artifactId>
+ <version>${activemq_version}</version>
+ </dependency>
+ <dependency>
+ <groupId>incubator-activemq</groupId>
+ <artifactId>activeio-core</artifactId>
+ <version>${activeio_version}</version>
+ </dependency>
+ <dependency>
+ <groupId>servicemix</groupId>
+ <artifactId>stax-utils</artifactId>
+ <version>${stax_utils_version}</version>
+ </dependency>
+ <dependency>
+ <groupId>jencks</groupId>
+ <artifactId>jencks-all</artifactId>
+ <version>${jencks_version}</version>
+ </dependency>
+ <dependency>
+ <groupId>concurrent</groupId>
+ <artifactId>concurrent</artifactId>
+ <version>${concurrent_version}</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-beanutils</groupId>
+ <artifactId>commons-beanutils</artifactId>
+ <version>${commons_beanutils_version}</version>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>${log4j_version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-activation_1.0.2_spec</artifactId>
+ <version>${geronimo_spec_activation_version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>annogen</groupId>
+ <artifactId>annogen</artifactId>
+ <version>${annogen_version}</version>
+ <properties>
+ <scope>compile</scope>
+ </properties>
+ </dependency>
+ <dependency>
+ <groupId>qdox</groupId>
+ <artifactId>qdox</artifactId>
+ <version>${qdox_version}</version>
+ <properties>
+ <scope>compile</scope>
+ </properties>
+ </dependency>
+ <dependency>
+ <groupId>beehive</groupId>
+ <artifactId>wsm</artifactId>
+ <version>${beehive_wsm_version}</version>
+ <url>http://incubator.apache.org/beehive/</url>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <unitTest>
+ <includes>
+ <include>**/*Test.*</include>
+ </includes>
+ <excludes>
+ </excludes>
+ </unitTest>
+ <resources>
+ <resource>
+ <directory>src/main/resources</directory>
+ <includes>
+ <include>**/*.properties</include>
+ <include>**/*.xml</include>
+ <include>**/*</include>
+ </includes>
+ </resource>
+ <resource>
+ <directory>target/generated</directory>
+ <includes>
+ <include>**/*</include>
+ </includes>
+ <filtering>false</filtering>
+ </resource>
+ </resources>
+ </build>
+
+</project>
Added: incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPBootstrap.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPBootstrap.java?rev=394227&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPBootstrap.java (added)
+++ incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPBootstrap.java Fri Apr 14 16:38:22 2006
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2005-2006 The 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.servicemix.eip;
+
+import org.apache.servicemix.common.BaseBootstrap;
+
+/**
+ * @author gnodet
+ * @version $Revision: 376451 $
+ */
+public class EIPBootstrap extends BaseBootstrap {
+
+}
Added: incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPComponent.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPComponent.java?rev=394227&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPComponent.java (added)
+++ incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPComponent.java Fri Apr 14 16:38:22 2006
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2005-2006 The 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.servicemix.eip;
+
+import org.apache.servicemix.common.BaseComponent;
+
+/**
+ * @author gnodet
+ * @version $Revision: 376451 $
+ */
+public class EIPComponent extends BaseComponent {
+
+}
Added: incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPDeployer.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPDeployer.java?rev=394227&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPDeployer.java (added)
+++ incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPDeployer.java Fri Apr 14 16:38:22 2006
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2005-2006 The 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.servicemix.eip;
+
+import javax.jbi.management.DeploymentException;
+
+import org.apache.servicemix.common.BaseComponent;
+import org.apache.servicemix.common.Endpoint;
+import org.apache.servicemix.common.xbean.AbstractXBeanDeployer;
+
+/**
+ * @author gnodet
+ * @version $Revision: 376451 $
+ */
+public class EIPDeployer extends AbstractXBeanDeployer {
+
+ public EIPDeployer(BaseComponent component) {
+ super(component);
+ }
+
+ protected boolean validate(Endpoint endpoint) throws DeploymentException {
+ if (endpoint instanceof EIPEndpoint == false) {
+ throw new DeploymentException("Endpoint should be an EIPEndpoint");
+ }
+ ((EIPEndpoint) endpoint).validate();
+ return true;
+ }
+}
Added: incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPEndpoint.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPEndpoint.java?rev=394227&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPEndpoint.java (added)
+++ incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPEndpoint.java Fri Apr 14 16:38:22 2006
@@ -0,0 +1,161 @@
+/*
+ * Copyright 2005-2006 The 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.servicemix.eip;
+
+import javax.jbi.component.ComponentContext;
+import javax.jbi.management.DeploymentException;
+import javax.jbi.messaging.DeliveryChannel;
+import javax.jbi.messaging.ExchangeStatus;
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.messaging.MessageExchangeFactory;
+import javax.jbi.messaging.MessagingException;
+import javax.jbi.messaging.MessageExchange.Role;
+import javax.jbi.servicedesc.ServiceEndpoint;
+
+import org.apache.servicemix.common.BaseLifeCycle;
+import org.apache.servicemix.common.Endpoint;
+import org.apache.servicemix.common.ExchangeProcessor;
+import org.apache.servicemix.store.Store;
+import org.apache.servicemix.store.StoreFactory;
+import org.apache.servicemix.store.memory.MemoryStoreFactory;
+
+/**
+ * @author gnodet
+ * @version $Revision: 376451 $
+ */
+public abstract class EIPEndpoint extends Endpoint implements ExchangeProcessor {
+
+ private ServiceEndpoint activated;
+ private DeliveryChannel channel;
+
+ /**
+ * The store to keep pending exchanges
+ */
+ protected Store store;
+ /**
+ * The store factory.
+ */
+ protected StoreFactory storeFactory;
+ /**
+ * The exchange factory
+ */
+ protected MessageExchangeFactory exchangeFactory;
+
+ /**
+ * @return Returns the exchangeFactory.
+ */
+ public MessageExchangeFactory getExchangeFactory() {
+ return exchangeFactory;
+ }
+ /**
+ * @param exchangeFactory The exchangeFactory to set.
+ */
+ public void setExchangeFactory(MessageExchangeFactory exchangeFactory) {
+ this.exchangeFactory = exchangeFactory;
+ }
+ /**
+ * @return Returns the store.
+ */
+ public Store getStore() {
+ return store;
+ }
+ /**
+ * @param store The store to set.
+ */
+ public void setStore(Store store) {
+ this.store = store;
+ }
+ /**
+ * @return Returns the storeFactory.
+ */
+ public StoreFactory getStoreFactory() {
+ return storeFactory;
+ }
+ /**
+ * @param storeFactory The storeFactory to set.
+ */
+ public void setStoreFactory(StoreFactory storeFactory) {
+ this.storeFactory = storeFactory;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.servicemix.common.Endpoint#getRole()
+ */
+ public Role getRole() {
+ return Role.PROVIDER;
+ }
+
+ public void activate() throws Exception {
+ logger = this.serviceUnit.getComponent().getLogger();
+ ComponentContext ctx = getContext();
+ channel = ctx.getDeliveryChannel();
+ exchangeFactory = channel.createExchangeFactory();
+ activated = ctx.activateEndpoint(service, endpoint);
+ if (store == null) {
+ if (storeFactory == null) {
+ storeFactory = new MemoryStoreFactory();
+ }
+ store = storeFactory.get(getService().toString() + getEndpoint());
+ }
+ start();
+ }
+
+ public void deactivate() throws Exception {
+ stop();
+ ServiceEndpoint ep = activated;
+ activated = null;
+ ComponentContext ctx = getServiceUnit().getComponent().getComponentContext();
+ ctx.deactivateEndpoint(ep);
+ }
+
+ public ExchangeProcessor getProcessor() {
+ return this;
+ }
+
+ public void validate() throws DeploymentException {
+ }
+
+ protected ComponentContext getContext() {
+ return getServiceUnit().getComponent().getComponentContext();
+ }
+
+ protected void send(MessageExchange me) throws MessagingException {
+ if (me.getRole() == MessageExchange.Role.CONSUMER &&
+ me.getStatus() == ExchangeStatus.ACTIVE) {
+ BaseLifeCycle lf = (BaseLifeCycle) getServiceUnit().getComponent().getLifeCycle();
+ lf.sendConsumerExchange(me, (Endpoint) this);
+ } else {
+ channel.send(me);
+ }
+ }
+
+ protected void done(MessageExchange me) throws MessagingException {
+ me.setStatus(ExchangeStatus.DONE);
+ send(me);
+ }
+
+ protected void fail(MessageExchange me, Exception error) throws MessagingException {
+ me.setError(error);
+ send(me);
+ }
+
+ public void start() throws Exception {
+ }
+
+ public void stop() {
+ }
+
+}
Added: incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPLifeCycle.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPLifeCycle.java?rev=394227&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPLifeCycle.java (added)
+++ incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPLifeCycle.java Fri Apr 14 16:38:22 2006
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2005-2006 The 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.servicemix.eip;
+
+import org.apache.servicemix.common.BaseComponent;
+import org.apache.servicemix.common.BaseLifeCycle;
+
+/**
+ * @author gnodet
+ * @version $Revision: 376451 $
+ */
+public class EIPLifeCycle extends BaseLifeCycle {
+
+ public EIPLifeCycle(BaseComponent component) {
+ super(component);
+ }
+
+}
Added: incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPSpringComponent.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPSpringComponent.java?rev=394227&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPSpringComponent.java (added)
+++ incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/EIPSpringComponent.java Fri Apr 14 16:38:22 2006
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2005-2006 The 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.servicemix.eip;
+
+import org.apache.servicemix.common.BaseComponent;
+import org.apache.servicemix.common.BaseLifeCycle;
+import org.apache.servicemix.common.ServiceUnit;
+import org.apache.servicemix.common.xbean.XBeanServiceUnit;
+
+/**
+ *
+ * @author gnodet
+ * @version $Revision: 376451 $
+ * @org.apache.xbean.XBean element="component"
+ * description="An EIP component"
+ */
+public class EIPSpringComponent extends BaseComponent {
+
+ private EIPEndpoint[] endpoints;
+
+ /**
+ * @return Returns the endpoints.
+ */
+ public EIPEndpoint[] getEndpoints() {
+ return endpoints;
+ }
+
+ /**
+ * @param endpoints The endpoints to set.
+ */
+ public void setEndpoints(EIPEndpoint[] endpoints) {
+ this.endpoints = endpoints;
+ }
+
+ /* (non-Javadoc)
+ * @see org.servicemix.common.BaseComponent#createLifeCycle()
+ */
+ protected BaseLifeCycle createLifeCycle() {
+ return new LifeCycle();
+ }
+
+ /**
+ * @author gnodet
+ */
+ public class LifeCycle extends EIPLifeCycle {
+
+ protected ServiceUnit su;
+
+ public LifeCycle() {
+ super(EIPSpringComponent.this);
+ }
+
+ /* (non-Javadoc)
+ * @see org.servicemix.common.BaseLifeCycle#doInit()
+ */
+ protected void doInit() throws Exception {
+ super.doInit();
+ su = new XBeanServiceUnit();
+ su.setComponent(EIPSpringComponent.this);
+ for (int i = 0; i < endpoints.length; i++) {
+ endpoints[i].setServiceUnit(su);
+ endpoints[i].validate();
+ su.addEndpoint(endpoints[i]);
+ }
+ getRegistry().registerServiceUnit(su);
+ }
+
+ /* (non-Javadoc)
+ * @see org.servicemix.common.BaseLifeCycle#doStart()
+ */
+ protected void doStart() throws Exception {
+ super.doStart();
+ su.start();
+ }
+
+ /* (non-Javadoc)
+ * @see org.servicemix.common.BaseLifeCycle#doStop()
+ */
+ protected void doStop() throws Exception {
+ su.stop();
+ super.doStop();
+ }
+
+ /* (non-Javadoc)
+ * @see org.servicemix.common.BaseLifeCycle#doShutDown()
+ */
+ protected void doShutDown() throws Exception {
+ su.shutDown();
+ super.doShutDown();
+ }
+ }
+
+}
Added: incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/patterns/ContentBasedRouter.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/patterns/ContentBasedRouter.java?rev=394227&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/patterns/ContentBasedRouter.java (added)
+++ incubator/servicemix/trunk/servicemix-eip/src/main/java/org/apache/servicemix/eip/patterns/ContentBasedRouter.java Fri Apr 14 16:38:22 2006
@@ -0,0 +1,164 @@
+/*
+ * Copyright 2005-2006 The 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.servicemix.eip.patterns;
+
+import javax.jbi.management.DeploymentException;
+import javax.jbi.messaging.ExchangeStatus;
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.messaging.MessagingException;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.servicemix.JbiConstants;
+import org.apache.servicemix.eip.EIPEndpoint;
+import org.apache.servicemix.eip.support.ExchangeTarget;
+import org.apache.servicemix.eip.support.MessageUtil;
+import org.apache.servicemix.eip.support.RoutingRule;
+import org.apache.servicemix.store.Store;
+
+/**
+ * ContentBasedRouter can be used for all kind of content-based routing.
+ * This component implements the
+ * <a href="http://www.enterpriseintegrationpatterns.com/ContentBasedRouter.html">Content-Based Router</a>
+ * pattern.
+ *
+ * @author gnodet
+ * @version $Revision: 376451 $
+ * @org.apache.xbean.XBean element="content-based-router"
+ * description="A Content-Based Router"
+ */
+public class ContentBasedRouter extends EIPEndpoint {
+
+ private static final Log log = LogFactory.getLog(WireTap.class);
+
+
+ /**
+ * Routing rules that are evaluated to find the target destination
+ */
+ private RoutingRule[] rules;
+ /**
+ * The correlation property used by this component
+ */
+ private String correlation;
+
+ /**
+ * @return Returns the rules.
+ */
+ public RoutingRule[] getRules() {
+ return rules;
+ }
+
+ /**
+ * @param rules The rules to set.
+ */
+ public void setRules(RoutingRule[] rules) {
+ this.rules = rules;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.servicemix.eip.EIPEndpoint#validate()
+ */
+ public void validate() throws DeploymentException {
+ super.validate();
+ // Check rules
+ if (rules == null || rules.length == 0) {
+ throw new IllegalArgumentException("rules should contain at least one RoutingRule");
+ }
+ // Create correlation property
+ correlation = "AbstractContentBasedRouter.Correlation." + getService() + "." + getEndpoint();
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.servicemix.common.ExchangeProcessor#process(javax.jbi.messaging.MessageExchange)
+ */
+ public void process(MessageExchange exchange) throws MessagingException {
+ try {
+ if (exchange.getRole() == MessageExchange.Role.PROVIDER &&
+ exchange.getProperty(correlation) == null) {
+ // Retrieve target
+ ExchangeTarget target = getDestination(exchange);
+ // Create exchange for target
+ MessageExchange tme = exchangeFactory.createExchange(exchange.getPattern());
+ if (store.hasFeature(Store.CLUSTERED)) {
+ exchange.setProperty(JbiConstants.STATELESS_PROVIDER, Boolean.TRUE);
+ tme.setProperty(JbiConstants.STATELESS_CONSUMER, Boolean.TRUE);
+ }
+ target.configureTarget(tme, getContext());
+ // Set correlations
+ exchange.setProperty(correlation, tme.getExchangeId());
+ tme.setProperty(correlation, exchange.getExchangeId());
+ // Put exchange to store
+ store.store(exchange.getExchangeId(), exchange);
+ // Send in to listener and target
+ MessageUtil.transferTo(exchange, tme, "in");
+ send(tme);
+ // Mimic the exchange on the other side and send to needed listener
+ } else {
+ String id = (String) exchange.getProperty(correlation);
+ if (id == null) {
+ throw new IllegalStateException(correlation + " property not found");
+ }
+ MessageExchange org = (MessageExchange) store.load(id);
+ if (org == null) {
+ throw new IllegalStateException("Could not load original exchange with id " + id);
+ }
+ // Reproduce DONE status to the other side
+ if (exchange.getStatus() == ExchangeStatus.DONE) {
+ done(org);
+ // Reproduce ERROR status to the other side
+ } else if (exchange.getStatus() == ExchangeStatus.ERROR) {
+ fail(org, exchange.getError());
+ // Reproduce faults to the other side and listeners
+ } else if (exchange.getFault() != null) {
+ store.store(exchange.getExchangeId(), exchange);
+ MessageUtil.transferTo(exchange, org, "fault");
+ send(org);
+ // Reproduce answers to the other side
+ } else if (exchange.getMessage("out") != null) {
+ store.store(exchange.getExchangeId(), exchange);
+ MessageUtil.transferTo(exchange, org, "out");
+ send(org);
+ } else {
+ throw new IllegalStateException("Exchange status is " + ExchangeStatus.ACTIVE + " but has no Out nor Fault message");
+ }
+ }
+ // If an error occurs, log it and report the error back to the sender
+ // if the exchange is still ACTIVE
+ } catch (Exception e) {
+ log.error("An exception occured while processing exchange", e);
+ if (exchange.getStatus() == ExchangeStatus.ACTIVE) {
+ fail(exchange, e);
+ }
+ }
+ }
+
+ /**
+ * Find the target destination for the given JBI exchange
+ * @param exchange
+ * @return the target for the given exchange
+ * @throws Exception
+ */
+ protected ExchangeTarget getDestination(MessageExchange exchange) throws Exception {
+ for (int i = 0; i < rules.length; i++) {
+ if (rules[i].getPredicate() == null ||
+ rules[i].getPredicate().matches(exchange)) {
+ return rules[i].getTarget();
+ }
+ }
+ throw new MessagingException("No matching rule found for exchange");
+ }
+
+}