You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by an...@apache.org on 2006/12/21 16:02:28 UTC
svn commit: r489381 - in
/incubator/tuscany/java/sca/services/bindings/binding.jms/src:
main/java/org/apache/tuscany/binding/jms/
main/java/org/apache/tuscany/binding/jms/databinding/
test/java/org/apache/tuscany/binding/jms/
Author: antelder
Date: Thu Dec 21 07:02:27 2006
New Revision: 489381
URL: http://svn.apache.org/viewvc?view=rev&rev=489381
Log:
Change to use OperationAndDataBinding as described in the spec
Added:
incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/DefaultOperationAndDataBinding.java (with props)
incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/OperationAndDataBinding.java (with props)
Removed:
incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/DefaultOperationSelector.java
incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSDataBinding.java
incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/OperationSelector.java
incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/databinding/ObjectMsgDataBinding.java
incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/databinding/XMLTextMsgDataBinding.java
Modified:
incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBinding.java
incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingBuilder.java
incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingLoader.java
incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingLoader0961.java
incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSProxy.java
incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSReference.java
incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSResourceFactory.java
incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSService.java
incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSTargetInvoker.java
incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/SimpleJMSResourceFactory.java
incubator/tuscany/java/sca/services/bindings/binding.jms/src/test/java/org/apache/tuscany/binding/jms/JMSBindingTestCaseX.java
incubator/tuscany/java/sca/services/bindings/binding.jms/src/test/java/org/apache/tuscany/binding/jms/JMSProxyTestCase.java
Added: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/DefaultOperationAndDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/DefaultOperationAndDataBinding.java?view=auto&rev=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/DefaultOperationAndDataBinding.java (added)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/DefaultOperationAndDataBinding.java Thu Dec 21 07:02:27 2006
@@ -0,0 +1,162 @@
+/*
+ * 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.tuscany.binding.jms;
+
+import java.io.Serializable;
+import java.io.StringReader;
+
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.ObjectMessage;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+
+public class DefaultOperationAndDataBinding implements OperationAndDataBinding {
+
+ protected String operationPropertyName;
+
+ private boolean xmlFormat;
+
+ public DefaultOperationAndDataBinding(JMSBinding jmsBinding) {
+ this.operationPropertyName = jmsBinding.getOperationSelectorPropertyName();
+ this.xmlFormat = jmsBinding.isXMLFormat();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.tuscany.binding.jms.OperationAndDataBinding#getOperationName(javax.jms.Message)
+ */
+ public String getOperationName(Message message) {
+ try {
+
+ return message.getStringProperty(operationPropertyName);
+
+ } catch (JMSException e) {
+ throw new JMSBindingRuntimeException("Exception retreiving operation name from message", e);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.tuscany.binding.jms.OperationAndDataBinding#setOperationName(javax.jms.Message,
+ * java.lang.String)
+ */
+ public void setOperationName(String operationName, Message message) {
+ try {
+
+ message.setStringProperty(operationPropertyName, operationName);
+
+ } catch (JMSException e) {
+ throw new JMSBindingRuntimeException("Exception setting the operation name on message", e);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.tuscany.binding.jms.OperationAndDataBinding#extractPayload(javax.jms.Session,
+ * java.lang.Object)
+ */
+ public Message createJMSMessage(Session session, Object o) {
+ if (xmlFormat) {
+ return createXMLJMSMessage(session, o);
+ } else {
+ return createObjectJMSMessage(session, o);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.tuscany.binding.jms.OperationAndDataBinding#extractPayload(javax.jms.Message)
+ */
+ public Object extractPayload(Message msg) {
+ if (xmlFormat) {
+ return extractXMLPayload(msg);
+ } else {
+ return extractObjectPayload(msg);
+ }
+ }
+
+ protected Object extractXMLPayload(Message msg) {
+ try {
+
+ String xml = ((TextMessage)msg).getText();
+
+ XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(new StringReader(xml));
+ StAXOMBuilder builder = new StAXOMBuilder(reader);
+ OMElement omElement = builder.getDocumentElement();
+
+ return new Object[] {omElement};
+
+ } catch (XMLStreamException e) {
+ throw new JMSBindingRuntimeException(e);
+ } catch (JMSException e) {
+ throw new JMSBindingRuntimeException(e);
+ }
+ }
+
+ protected Message createXMLJMSMessage(Session session, Object o) {
+ try {
+
+ TextMessage message = session.createTextMessage();
+
+ if (o instanceof OMElement) {
+ message.setText(o.toString());
+ } else {
+ message.setText(((Object[])o)[0].toString());
+ }
+
+ return message;
+
+ } catch (JMSException e) {
+ throw new JMSBindingRuntimeException(e);
+ }
+ }
+
+ protected Object extractObjectPayload(Message msg) {
+ try {
+
+ return ((ObjectMessage)msg).getObject();
+
+ } catch (JMSException e) {
+ throw new JMSBindingRuntimeException(e);
+ }
+ }
+
+ protected Message createObjectJMSMessage(Session session, Object o) {
+ try {
+
+ ObjectMessage message = session.createObjectMessage(); // default
+ message.setObject((Serializable)o);
+ return message;
+
+ } catch (JMSException e) {
+ throw new JMSBindingRuntimeException(e);
+ }
+ }
+}
Propchange: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/DefaultOperationAndDataBinding.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/DefaultOperationAndDataBinding.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBinding.java?view=diff&rev=489381&r1=489380&r2=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBinding.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBinding.java Thu Dec 21 07:02:27 2006
@@ -57,11 +57,19 @@
private String operationSelectorName;
- private String operationSelectorPropertyName = "OpName";
+ private String operationSelectorPropertyName = DEFAULT_OPERATION_PROP_NAME;
private String correlationScheme;
private String responseDestinationName;
+ private String requestOperationAndDatabindingName = DEFAULT_ODB_CLASSNAME;
+ private String responseOperationAndDatabindingName = DEFAULT_ODB_CLASSNAME;
+
+ private boolean xmlFormat;
+
+ public static final String DEFAULT_ODB_CLASSNAME = DefaultOperationAndDataBinding.class.getName();
+ public static final String DEFAULT_OPERATION_PROP_NAME = "scaOperationName";
+
public JMSBinding(int destinationType, String destinationName, String connectionFactoryName, String activationSpecName, String initialContextFactoryName, String providerURL, int deliveryMode, int timeToLive, int priority, String replyTo) {
super();
this.destinationType = destinationType;
@@ -211,6 +219,30 @@
public void setCreateResponseDestination(String create) {
// TODO Auto-generated method stub
+ }
+
+ public void setRequestOperationAndDatabindingName(String name) {
+ this.requestOperationAndDatabindingName = name;
+ }
+
+ public String getRequestOperationAndDatabindingName() {
+ return requestOperationAndDatabindingName;
+ }
+
+ public void setResponseOperationAndDatabindingName(String name) {
+ this.responseOperationAndDatabindingName = name;
+ }
+
+ public String getResponseOperationAndDatabindingName() {
+ return responseOperationAndDatabindingName;
+ }
+
+ public boolean isXMLFormat() {
+ return xmlFormat;
+ }
+
+ public void setXMLFormat(boolean b) {
+ this.xmlFormat = b;
}
}
Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingBuilder.java?view=diff&rev=489381&r1=489380&r2=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingBuilder.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingBuilder.java Thu Dec 21 07:02:27 2006
@@ -23,7 +23,6 @@
import javax.naming.NamingException;
import org.apache.axiom.om.OMElement;
-import org.apache.tuscany.binding.jms.databinding.XMLTextMsgDataBinding;
import org.apache.tuscany.idl.wsdl.WSDLServiceContract;
import org.apache.tuscany.spi.component.CompositeComponent;
import org.apache.tuscany.spi.component.Reference;
@@ -59,22 +58,19 @@
JMSBinding jmsBinding = serviceDefinition.getBinding();
Class<?> interfaze = serviceDefinition.getServiceContract().getInterfaceClass();
- JMSResourceFactory jmsResourceFactory;
- OperationSelector opSec;
- try {
- jmsResourceFactory = getJMSResourceFactory(jmsBinding);
- opSec = getOperationSelector(jmsBinding);
- } catch (JMSBindingException e) {
- throw new JMSBindingRuntimeException("Error building JMS Service",e);
- }
-
ServiceContract serviceContract = serviceDefinition.getServiceContract();
+ jmsBinding.setXMLFormat(serviceContract instanceof WSDLServiceContract);
+
+ JMSResourceFactory jmsResourceFactory = getJMSResourceFactory(jmsBinding);
+
if (serviceContract instanceof WSDLServiceContract) {
serviceContract.setDataBinding(OM_DATA_BINDING);
- jmsResourceFactory.setDataBinding(new XMLTextMsgDataBinding());
}
- Service service = new JMSService(serviceDefinition.getName(),parent, wireService, jmsBinding, jmsResourceFactory,opSec,interfaze);
+ OperationAndDataBinding requestODB = getRequestOperationAndDatabinding(jmsBinding, deploymentContext.getClassLoader());
+ OperationAndDataBinding responseODB = getRequestOperationAndDatabinding(jmsBinding, deploymentContext.getClassLoader());
+
+ Service service = new JMSService(serviceDefinition.getName(),parent, wireService, jmsBinding, jmsResourceFactory, requestODB, responseODB, interfaze);
service.setBindingServiceContract(serviceContract);
return service;
@@ -96,14 +92,8 @@
serviceContract.setDataBinding(OM_DATA_BINDING);
JMSBinding jmsBinding = referenceDefinition.getBinding();
- JMSResourceFactory jmsResourceFactory;
- OperationSelector opSec;
- try {
- jmsResourceFactory = getJMSResourceFactory(jmsBinding);
- opSec = getOperationSelector(jmsBinding);
- } catch (JMSBindingException e) {
- throw new JMSBindingRuntimeException("Error building JMS reference",e);
- }
+ JMSResourceFactory jmsResourceFactory = getJMSResourceFactory(jmsBinding);
+
Destination requestDest;
Destination replyDest = null;
try {
@@ -115,13 +105,16 @@
throw new JMSBindingRuntimeException(e);
}
- Reference reference = new JMSReference(name,parent,wireService, jmsBinding, jmsResourceFactory,opSec,interfaze, requestDest, replyDest);
+ OperationAndDataBinding requestODB = getRequestOperationAndDatabinding(jmsBinding, deploymentContext.getClassLoader());
+ OperationAndDataBinding responseODB = getRequestOperationAndDatabinding(jmsBinding, deploymentContext.getClassLoader());
+
+ Reference reference = new JMSReference(name,parent,wireService, jmsBinding, jmsResourceFactory, requestODB, responseODB, interfaze, requestDest, replyDest);
reference.setBindingServiceContract(serviceContract);
return reference;
}
- private JMSResourceFactory getJMSResourceFactory(JMSBinding jmsBinding) throws JMSBindingException {
+ private JMSResourceFactory getJMSResourceFactory(JMSBinding jmsBinding) {
String className = jmsBinding.getJmsResourceFactoryName();
if (className != null && !className.equals("")){
try {
@@ -129,52 +122,56 @@
Constructor constructor = factoryClass.getDeclaredConstructor(new Class[]{JMSBinding.class});
return (JMSResourceFactory) constructor.newInstance(jmsBinding);
} catch (ClassNotFoundException e) {
- throw new JMSBindingException("Error loading the JMSResourceFactory",e);
+ throw new JMSBindingRuntimeException("Error loading the JMSResourceFactory",e);
} catch (SecurityException e) {
- throw new JMSBindingException("Error loading the JMSResourceFactory",e);
+ throw new JMSBindingRuntimeException("Error loading the JMSResourceFactory",e);
} catch (NoSuchMethodException e) {
- throw new JMSBindingException("Error loading the JMSResourceFactory",e);
+ throw new JMSBindingRuntimeException("Error loading the JMSResourceFactory",e);
} catch (IllegalArgumentException e) {
- throw new JMSBindingException("Error loading the JMSResourceFactory",e);
+ throw new JMSBindingRuntimeException("Error loading the JMSResourceFactory",e);
} catch (InstantiationException e) {
- throw new JMSBindingException("Error loading the JMSResourceFactory",e);
+ throw new JMSBindingRuntimeException("Error loading the JMSResourceFactory",e);
} catch (IllegalAccessException e) {
- throw new JMSBindingException("Error loading the JMSResourceFactory",e);
+ throw new JMSBindingRuntimeException("Error loading the JMSResourceFactory",e);
} catch (InvocationTargetException e) {
- throw new JMSBindingException("Error loading the JMSResourceFactory",e);
+ throw new JMSBindingRuntimeException("Error loading the JMSResourceFactory",e);
}
}else{
return new SimpleJMSResourceFactory(jmsBinding);
}
}
-
- private OperationSelector getOperationSelector(JMSBinding jmsBinding) throws JMSBindingException {
- String className = jmsBinding.getOperationSelectorName();
-
- if (className != null && !className.equals("")){
- try {
- Class factoryClass = Class.forName(className != null ? className : DEFAULT_OPERATION_SELECTOR);
- Constructor constructor = factoryClass.getDeclaredConstructor(new Class[]{JMSBinding.class});
- return (OperationSelector) constructor.newInstance(jmsBinding);
- } catch (ClassNotFoundException e) {
- throw new JMSBindingException("Error loading the OperationSelector",e);
- } catch (SecurityException e) {
- throw new JMSBindingException("Error loading the OperationSelector",e);
- } catch (NoSuchMethodException e) {
- throw new JMSBindingException("Error loading the OperationSelector",e);
- } catch (IllegalArgumentException e) {
- throw new JMSBindingException("Error loading the OperationSelector",e);
- } catch (InstantiationException e) {
- throw new JMSBindingException("Error loading the OperationSelector",e);
- } catch (IllegalAccessException e) {
- throw new JMSBindingException("Error loading the OperationSelector",e);
- } catch (InvocationTargetException e) {
- throw new JMSBindingException("Error loading the OperationSelector",e);
- }
- }else{
- return new DefaultOperationSelector(jmsBinding);
- }
- }
+ protected OperationAndDataBinding getRequestOperationAndDatabinding(JMSBinding jmsBinding, ClassLoader cl) {
+ String className = jmsBinding.getRequestOperationAndDatabindingName();
+ OperationAndDataBinding operationAndDataBinding = instantiateClass(jmsBinding, cl, className);
+ return operationAndDataBinding;
+ }
+
+ protected OperationAndDataBinding getResponseOperationAndDatabinding(JMSBinding jmsBinding, ClassLoader cl) {
+ String className = jmsBinding.getResponseOperationAndDatabindingName();
+ OperationAndDataBinding operationAndDataBinding = instantiateClass(jmsBinding, cl, className);
+ return operationAndDataBinding;
+ }
+
+ protected OperationAndDataBinding instantiateClass(JMSBinding jmsBinding, ClassLoader cl, String className) {
+ OperationAndDataBinding operationAndDataBinding;
+ if (cl == null) {
+ cl = this.getClass().getClassLoader();
+ }
+ try {
+ Class clazz;
+ try {
+ clazz = cl.loadClass(className);
+ } catch (ClassNotFoundException e) {
+ clazz = this.getClass().getClassLoader().loadClass(className);
+ }
+ Constructor constructor = clazz.getDeclaredConstructor(new Class[] {JMSBinding.class});
+ operationAndDataBinding = (OperationAndDataBinding)constructor.newInstance(jmsBinding);
+
+ } catch (Throwable e) {
+ throw new JMSBindingRuntimeException("Exception instantiating OperationAndDataBinding class", e);
+ }
+ return operationAndDataBinding;
+ }
}
Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingLoader.java?view=diff&rev=489381&r1=489380&r2=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingLoader.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingLoader.java Thu Dec 21 07:02:27 2006
@@ -102,7 +102,6 @@
binding.setReplyTo(replyTo);
binding.setJmsResourceFactoryName(jmsResourceFactoryName);
binding.setOperationSelectorName(operationSelector);
- binding.setOperationSelectorPropertyName(jmsOpSecPropertyName);
if (deliveryMode != null && deliveryMode.trim().equals("")){
try{
Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingLoader0961.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingLoader0961.java?view=diff&rev=489381&r1=489380&r2=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingLoader0961.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingLoader0961.java Thu Dec 21 07:02:27 2006
@@ -140,7 +140,18 @@
}
protected void parseOperationAndDataBinding(XMLStreamReader reader, JMSBinding jmsBinding) throws XMLStreamException {
- // TODO Auto-generated method stub
+ String name = reader.getAttributeValue(null, "name");
+ String use = reader.getAttributeValue(null, "use");
+ if (name != null && name.length() > 0) {
+ if ("request".equalsIgnoreCase(use)) {
+ jmsBinding.setRequestOperationAndDatabindingName(name);
+ } else if ("response".equalsIgnoreCase(use)) {
+ jmsBinding.setResponseOperationAndDatabindingName(name);
+ } else {
+ jmsBinding.setRequestOperationAndDatabindingName(name);
+ jmsBinding.setResponseOperationAndDatabindingName(name);
+ }
+ }
}
protected void parseHeaders(XMLStreamReader reader, JMSBinding jmsBinding) throws XMLStreamException {
Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSProxy.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSProxy.java?view=diff&rev=489381&r1=489380&r2=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSProxy.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSProxy.java Thu Dec 21 07:02:27 2006
@@ -38,17 +38,20 @@
protected Method operationMethod;
protected JMSResourceFactory jmsResourceFactory;
- protected OperationSelector operationSelector;
+ protected OperationAndDataBinding requestOperationAndDataBinding;
+ protected OperationAndDataBinding responseOperationAndDataBinding;
protected InboundWire inboundWire;
protected String correlationScheme;
public JMSProxy(InboundWire inboundWire,
JMSResourceFactory jmsResourceFactory,
- OperationSelector operationSelector,
+ OperationAndDataBinding requestOperationAndDataBinding,
+ OperationAndDataBinding responseOperationAndDataBinding,
String correlationScheme) throws NamingException {
this.jmsResourceFactory = jmsResourceFactory;
- this.operationSelector = operationSelector;
+ this.requestOperationAndDataBinding = requestOperationAndDataBinding;
+ this.responseOperationAndDataBinding = responseOperationAndDataBinding;
this.inboundWire = inboundWire;
this.correlationScheme = correlationScheme;
}
@@ -64,8 +67,8 @@
protected Object invokeService(Message requestJMSMsg) throws JMSBindingException, JMSException {
- String operationName = operationSelector.getOperationName(requestJMSMsg);
- Object requestPayload = jmsResourceFactory.getMessagePayload(requestJMSMsg);
+ String operationName = requestOperationAndDataBinding.getOperationName(requestJMSMsg);
+ Object requestPayload = requestOperationAndDataBinding.extractPayload(requestJMSMsg);
Operation op = (Operation)inboundWire.getServiceContract().getOperations().get(operationName);
InvocationChain chain = inboundWire.getInvocationChains().get(op);
@@ -95,7 +98,11 @@
}
Session session = jmsResourceFactory.createSession();
- Message replyJMSMsg = jmsResourceFactory.createMessage(session, responsePayload);
+ Message replyJMSMsg = responseOperationAndDataBinding.createJMSMessage(session, responsePayload);
+
+ replyJMSMsg.setJMSDeliveryMode(requestJMSMsg.getJMSDeliveryMode());
+ replyJMSMsg.setJMSExpiration(requestJMSMsg.getJMSExpiration());
+ replyJMSMsg.setJMSPriority(requestJMSMsg.getJMSPriority());
if (correlationScheme == null || "RequestMsgIDToCorrelID".equalsIgnoreCase(correlationScheme)) {
replyJMSMsg.setJMSCorrelationID(requestJMSMsg.getJMSMessageID());
Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSReference.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSReference.java?view=diff&rev=489381&r1=489380&r2=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSReference.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSReference.java Thu Dec 21 07:02:27 2006
@@ -34,7 +34,8 @@
protected JMSBinding jmsBinding;
protected JMSResourceFactory jmsResourceFactory;
- protected OperationSelector operationSelector;
+ protected OperationAndDataBinding requestOperationAndDataBinding;
+ protected OperationAndDataBinding responseOperationAndDataBinding;
protected Destination requestDest;
protected Destination replyDest;
@@ -43,7 +44,8 @@
WireService wireService,
JMSBinding jmsBinding,
JMSResourceFactory jmsResourceFactory,
- OperationSelector operationSelector,
+ OperationAndDataBinding requestOperationAndDataBinding,
+ OperationAndDataBinding responseOperationAndDataBinding,
Class<?> service,
Destination requestDest,
Destination replyDest) {
@@ -52,14 +54,16 @@
this.jmsBinding = jmsBinding;
this.jmsResourceFactory = jmsResourceFactory;
- this.operationSelector = operationSelector;
+ this.requestOperationAndDataBinding = requestOperationAndDataBinding;
+ this.responseOperationAndDataBinding = responseOperationAndDataBinding;
this.requestDest = requestDest;
this.replyDest = replyDest;
}
public TargetInvoker createTargetInvoker(ServiceContract contract, Operation operation) {
- return new JMSTargetInvoker(jmsResourceFactory, jmsBinding, operation.getName(), operationSelector,
- requestDest, replyDest);
+ return new JMSTargetInvoker(jmsResourceFactory, jmsBinding, operation.getName(),
+ requestOperationAndDataBinding, responseOperationAndDataBinding, requestDest,
+ replyDest);
}
}
Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSResourceFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSResourceFactory.java?view=diff&rev=489381&r1=489380&r2=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSResourceFactory.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSResourceFactory.java Thu Dec 21 07:02:27 2006
@@ -21,7 +21,6 @@
import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.JMSException;
-import javax.jms.Message;
import javax.jms.Session;
import javax.naming.NamingException;
@@ -37,13 +36,5 @@
public abstract void closeConnection() throws JMSException, NamingException;
- public abstract Message createMessage(Session session, Object payload)
- throws JMSException;
-
- public abstract Object getMessagePayload(Message jmsMessage)
- throws JMSException;
-
public abstract Destination lookupDestination(String jndiName) throws NamingException;
-
- public abstract void setDataBinding(JMSDataBinding jmsDataBinding);
}
Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSService.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSService.java?view=diff&rev=489381&r1=489380&r2=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSService.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSService.java Thu Dec 21 07:02:27 2006
@@ -18,7 +18,6 @@
*/
package org.apache.tuscany.binding.jms;
-
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
@@ -34,55 +33,59 @@
*/
public class JMSService extends ServiceExtension {
- private JMSBinding jmsBinding;
- private JMSResourceFactory jmsResourceFactory;
+ private JMSBinding jmsBinding;
+ private JMSResourceFactory jmsResourceFactory;
private MessageConsumer consumer;
- private OperationSelector operationSelector;
-
+ protected OperationAndDataBinding requestOperationAndDataBinding;
+ protected OperationAndDataBinding responseOperationAndDataBinding;
+
public JMSService(String name,
CompositeComponent parent,
WireService wireService,
JMSBinding jmsBinding,
JMSResourceFactory jmsResourceFactory,
- OperationSelector operationSelector,
+ OperationAndDataBinding requestOperationAndDataBinding,
+ OperationAndDataBinding responseOperationAndDataBinding,
Class<?> service) {
super(name, service, parent, wireService);
this.jmsBinding = jmsBinding;
this.jmsResourceFactory = jmsResourceFactory;
- this.operationSelector = operationSelector;
+ this.requestOperationAndDataBinding = requestOperationAndDataBinding;
+ this.responseOperationAndDataBinding = responseOperationAndDataBinding;
}
public void start() {
super.start();
try {
- registerListerner();
- } catch (Exception e) {
- throw new JMSBindingRuntimeException("Error starting JMSService",e);
- }
+ registerListerner();
+ } catch (Exception e) {
+ throw new JMSBindingRuntimeException("Error starting JMSService", e);
+ }
}
public void stop() {
-
- try {
- consumer.close();
- jmsResourceFactory.closeConnection();
- } catch (Exception e) {
- throw new JMSBindingRuntimeException("Error stopping JMSService",e);
- }
-
- super.stop();
+
+ try {
+ consumer.close();
+ jmsResourceFactory.closeConnection();
+ } catch (Exception e) {
+ throw new JMSBindingRuntimeException("Error stopping JMSService", e);
+ }
+
+ super.stop();
}
-
- private void registerListerner() throws NamingException, JMSException{
-
- Session session = jmsResourceFactory.createSession();
+
+ private void registerListerner() throws NamingException, JMSException {
+
+ Session session = jmsResourceFactory.createSession();
Destination destination = session.createQueue(jmsBinding.getDestinationName());
-
+
consumer = session.createConsumer(destination);
- consumer.setMessageListener(new JMSProxy(getInboundWire(),jmsResourceFactory,operationSelector, jmsBinding.getCorrelationScheme()));
-
+ consumer.setMessageListener(new JMSProxy(getInboundWire(), jmsResourceFactory, requestOperationAndDataBinding,
+ responseOperationAndDataBinding, jmsBinding.getCorrelationScheme()));
+
jmsResourceFactory.startConnection();
-
- }
+
+ }
}
Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSTargetInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSTargetInvoker.java?view=diff&rev=489381&r1=489380&r2=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSTargetInvoker.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSTargetInvoker.java Thu Dec 21 07:02:27 2006
@@ -39,7 +39,8 @@
protected JMSResourceFactory jmsResourceFactory;
protected String operationName;
- protected OperationSelector operationSelector;
+ protected OperationAndDataBinding requestOperationAndDataBinding;
+ protected OperationAndDataBinding responseOperationAndDataBinding;
protected Destination requestDest;
protected Destination replyDest;
@@ -47,14 +48,16 @@
public JMSTargetInvoker(JMSResourceFactory jmsResourceFactory,
JMSBinding jmsBinding,
String operationName,
- OperationSelector operationSelector,
+ OperationAndDataBinding requestOperationAndDataBinding,
+ OperationAndDataBinding responseOperationAndDataBinding,
Destination requestDest,
Destination replyDest) {
super(null, null, null);
this.jmsBinding = jmsBinding;
this.jmsResourceFactory = jmsResourceFactory;
this.operationName = operationName;
- this.operationSelector = operationSelector;
+ this.requestOperationAndDataBinding = requestOperationAndDataBinding;
+ this.responseOperationAndDataBinding = responseOperationAndDataBinding;
this.requestDest = requestDest;
this.replyDest = replyDest;
}
@@ -68,7 +71,7 @@
Message requestMsg = sendRequest((Object[])payload, session, replyToDest);
Message replyMsg = receiveReply(session, replyToDest, requestMsg.getJMSMessageID());
- return jmsResourceFactory.getMessagePayload(replyMsg);
+ return responseOperationAndDataBinding.extractPayload(replyMsg);
} finally {
session.close();
@@ -84,8 +87,13 @@
protected Message sendRequest(Object[] payload, Session session, Destination replyToDest) throws JMSException,
JMSBindingException {
- Message requestMsg = jmsResourceFactory.createMessage(session, payload);
- operationSelector.setOperationName(operationName, requestMsg);
+
+ Message requestMsg = requestOperationAndDataBinding.createJMSMessage(session, payload);
+
+ requestMsg.setJMSDeliveryMode(jmsBinding.getDeliveryMode());
+ requestMsg.setJMSPriority(jmsBinding.getPriority());
+
+ requestOperationAndDataBinding.setOperationName(operationName, requestMsg);
requestMsg.setJMSReplyTo(replyToDest);
MessageProducer producer = session.createProducer(requestDest);
Added: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/OperationAndDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/OperationAndDataBinding.java?view=auto&rev=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/OperationAndDataBinding.java (added)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/OperationAndDataBinding.java Thu Dec 21 07:02:27 2006
@@ -0,0 +1,48 @@
+/*
+ * 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.tuscany.binding.jms;
+
+import javax.jms.Message;
+import javax.jms.Session;
+
+/**
+ * Interface for a component that does operation selection and message payload databinding
+ */
+public interface OperationAndDataBinding {
+
+ /**
+ * Get the operation name from a JMS Message
+ */
+ public abstract String getOperationName(Message message);
+
+ /**
+ * Set the operation name on a JMS Message
+ */
+ public abstract void setOperationName(String operationName, Message message);
+
+ /**
+ * Extracts the payload from a JMS Message
+ */
+ public abstract Object extractPayload(Message msg);
+
+ /**
+ * Create a JMS Message containing the payload
+ */
+ public abstract Message createJMSMessage(Session session, Object payload);
+}
Propchange: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/OperationAndDataBinding.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/OperationAndDataBinding.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/SimpleJMSResourceFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/SimpleJMSResourceFactory.java?view=diff&rev=489381&r1=489380&r2=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/SimpleJMSResourceFactory.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/SimpleJMSResourceFactory.java Thu Dec 21 07:02:27 2006
@@ -24,25 +24,20 @@
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
-import javax.jms.Message;
import javax.jms.Session;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
-import org.apache.tuscany.binding.jms.databinding.ObjectMsgDataBinding;
-
public class SimpleJMSResourceFactory implements JMSResourceFactory {
private JMSBinding jmsBinding;
private Connection con;
private Context context;
private boolean isConnectionStarted;
- private JMSDataBinding jmsDataBinding;
public SimpleJMSResourceFactory(JMSBinding jmsBinding){
this.jmsBinding = jmsBinding;
- this.jmsDataBinding = new ObjectMsgDataBinding();
}
/*
@@ -88,16 +83,6 @@
}
}
- /* (non-Javadoc)
- * @see org.apache.tuscany.binding.jms.JMSResourceFactory#createTextMessage(javax.jms.Session)
- */
- public Message createMessage(Session session, Object payload) throws JMSException {
- Message message = jmsDataBinding.toJMSMessage(session, payload);
- message.setJMSDeliveryMode(jmsBinding.getDeliveryMode());
- message.setJMSPriority(jmsBinding.getPriority());
- return message;
- }
-
private void createConnection() throws NamingException, JMSException {
if(context == null){
createInitialContext();
@@ -120,13 +105,5 @@
}
return (Destination)context.lookup(jndiName);
}
-
- public void setDataBinding(JMSDataBinding jmsDataBinding) {
- this.jmsDataBinding = jmsDataBinding;
- }
-
- public Object getMessagePayload(Message jmsMessage) throws JMSException {
- return jmsDataBinding.fromJMSMessage(jmsMessage);
- }
}
Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/test/java/org/apache/tuscany/binding/jms/JMSBindingTestCaseX.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/test/java/org/apache/tuscany/binding/jms/JMSBindingTestCaseX.java?view=diff&rev=489381&r1=489380&r2=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/test/java/org/apache/tuscany/binding/jms/JMSBindingTestCaseX.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/test/java/org/apache/tuscany/binding/jms/JMSBindingTestCaseX.java Thu Dec 21 07:02:27 2006
@@ -29,7 +29,6 @@
import org.activemq.broker.BrokerContainer;
import org.activemq.broker.impl.BrokerContainerImpl;
import org.activemq.store.vm.VMPersistenceAdapter;
-import org.apache.tuscany.binding.jms.databinding.XMLTextMsgDataBinding;
import org.apache.tuscany.test.SCATestCase;
import org.custommonkey.xmlunit.Diff;
import org.custommonkey.xmlunit.XMLUnit;
@@ -65,11 +64,11 @@
binding.setJNDIProviderURL("tcp://localhost:61616");
binding.setDestinationName("dynamicQueues/HelloworldServiceQueue");
binding.setTimeToLive(3000);
- binding.setOperationSelectorPropertyName("scaOperationName");
+ binding.setXMLFormat(true);
JMSResourceFactory rf = new SimpleJMSResourceFactory(binding);
- rf.setDataBinding(new XMLTextMsgDataBinding());
Destination requestDest = rf.lookupDestination(binding.getDestinationName());
- JMSTargetInvoker invoker = new JMSTargetInvoker(rf, binding, "getGreetings", new DefaultOperationSelector(binding), requestDest, null);
+ DefaultOperationAndDataBinding odb = new DefaultOperationAndDataBinding(binding);
+ JMSTargetInvoker invoker = new JMSTargetInvoker(rf, binding, "getGreetings", odb, odb, requestDest, null);
return invoker;
}
Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/test/java/org/apache/tuscany/binding/jms/JMSProxyTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/test/java/org/apache/tuscany/binding/jms/JMSProxyTestCase.java?view=diff&rev=489381&r1=489380&r2=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/test/java/org/apache/tuscany/binding/jms/JMSProxyTestCase.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/test/java/org/apache/tuscany/binding/jms/JMSProxyTestCase.java Thu Dec 21 07:02:27 2006
@@ -46,18 +46,28 @@
EasyMock.replay(session);
ObjectMessage responseJMSMsg = EasyMock.createMock(ObjectMessage.class);
+ responseJMSMsg.setJMSDeliveryMode(1);
+ responseJMSMsg.setJMSExpiration(1);
+ responseJMSMsg.setJMSPriority(1);
responseJMSMsg.setJMSCorrelationID(id);
EasyMock.replay(responseJMSMsg);
-
JMSResourceFactory jmsResourceFactory = EasyMock.createMock(JMSResourceFactory.class);
EasyMock.expect(jmsResourceFactory.createSession()).andReturn(session);
- EasyMock.expect(jmsResourceFactory.createMessage(EasyMock.eq(session), EasyMock.isA(Exception.class))).andReturn(responseJMSMsg);
- JMSProxy jmsProxy = new JMSProxy(null, jmsResourceFactory, null, null);
+ OperationAndDataBinding odb = EasyMock.createMock(OperationAndDataBinding.class);
+ EasyMock.expect(odb.createJMSMessage(EasyMock.eq(session), EasyMock.isA(Exception.class))).andReturn(responseJMSMsg);
+ EasyMock.replay(odb);
+
+ JMSProxy jmsProxy = new JMSProxy(null, jmsResourceFactory, null, odb, null);
Message requestJMSMsg = EasyMock.createMock(Message.class);
EasyMock.expect(requestJMSMsg.getJMSReplyTo()).andReturn(new Destination(){});
+
+ EasyMock.expect(requestJMSMsg.getJMSDeliveryMode()).andReturn(1);
+ EasyMock.expect(requestJMSMsg.getJMSExpiration()).andReturn(1L);
+ EasyMock.expect(requestJMSMsg.getJMSPriority()).andReturn(1);
+
EasyMock.expect(requestJMSMsg.getJMSReplyTo()).andReturn(new Destination(){});
EasyMock.expect(requestJMSMsg.getJMSMessageID()).andReturn(id);
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org