diff options
Diffstat (limited to 'sca-java-1.x/tags/1.6/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/jms/JMSOutTransportInfo.java')
-rw-r--r-- | sca-java-1.x/tags/1.6/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/jms/JMSOutTransportInfo.java | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/sca-java-1.x/tags/1.6/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/jms/JMSOutTransportInfo.java b/sca-java-1.x/tags/1.6/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/jms/JMSOutTransportInfo.java new file mode 100644 index 0000000000..5fa6542eec --- /dev/null +++ b/sca-java-1.x/tags/1.6/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/jms/JMSOutTransportInfo.java @@ -0,0 +1,220 @@ +/*
+ * 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.sca.binding.ws.axis2.jms;
+
+import java.util.Hashtable;
+
+import javax.jms.ConnectionFactory;
+import javax.jms.Destination;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NameNotFoundException;
+import javax.naming.NamingException;
+
+import org.apache.axis2.transport.OutTransportInfo;
+import org.apache.axis2.transport.jms.JMSConstants;
+import org.apache.axis2.transport.jms.JMSUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * The JMS OutTransportInfo
+ */
+public class JMSOutTransportInfo implements OutTransportInfo {
+
+ private static final Log log = LogFactory.getLog(JMSOutTransportInfo.class);
+
+ private ConnectionFactory connectionFactory = null;
+ private String connectionFactoryUser = null;
+ private String connectionFactoryPassword = null;
+ private Destination destination = null;
+
+ private String contentType = null;
+
+ /**
+ * Creates an instance using the given connection factory and destination
+ *
+ * @param connectionFactory the connection factory
+ * @param dest the destination
+ */
+ JMSOutTransportInfo(ConnectionFactory connectionFactory, Destination dest) {
+ this.connectionFactory = connectionFactory;
+ this.destination = dest;
+ }
+
+ /**
+ * Creates an instance using the given connection factory and destination
+ *
+ * @param connectionFactory the connection factory
+ * @param dest the destination
+ */
+ JMSOutTransportInfo(ConnectionFactory connectionFactory, String connectionFactoryUser, String connectionFactoryPassword, Destination dest) {
+ this.connectionFactory = connectionFactory;
+ this.connectionFactoryUser = connectionFactoryUser;
+ this.connectionFactoryPassword = connectionFactoryPassword;
+ this.destination = dest;
+ }
+
+ /**
+ * Creates and instance using the given URL
+ *
+ * @param url the URL
+ */
+ JMSOutTransportInfo(String url) {
+ if (!url.startsWith(JMSConstants.JMS_PREFIX)) {
+ handleException("Invalid JMS URL : " + url +
+ " Must begin with the prefix " + JMSConstants.JMS_PREFIX);
+ } else {
+ Context context = null;
+ Hashtable props = JMSUtils.getProperties(url);
+ try {
+ context = new InitialContext(props);
+ } catch (NamingException e) {
+ handleException("Could not get the initial context", e);
+ }
+
+ connectionFactory = getConnectionFactory(context, props);
+ connectionFactoryUser = getConnectionFactoryUser(context, props);
+ connectionFactoryPassword = getConnectionFactoryPass(context, props);
+ destination = getDestination(context, url);
+ }
+ }
+
+ /**
+ * Get the referenced ConnectionFactory using the properties from the context
+ *
+ * @param context the context to use for lookup
+ * @param props the properties which contains the JNDI name of the factory
+ * @return the connection factory
+ */
+ private ConnectionFactory getConnectionFactory(Context context, Hashtable props) {
+ try {
+
+ String conFacJndiName = (String) props.get(JMSConstants.CONFAC_JNDI_NAME_PARAM);
+ if (conFacJndiName != null) {
+ return (ConnectionFactory) context.lookup(conFacJndiName);
+ } else {
+ throw new NamingException(
+ "JMS Connection Factory JNDI name cannot be determined from url");
+ }
+ } catch (NamingException e) {
+ handleException("Cannot get JMS Connection factory with props : " + props, e);
+ }
+ return null;
+ }
+
+ /**
+ * Get the referenced ConnectionFactory Username (if supplied) using the properties from the context
+ *
+ * @param context the context to use for lookup
+ * @param props the properties which contains the JNDI name of the factory username
+ * @return the connection factory username (or null if one is not in the JNDI tree)
+ */
+ private String getConnectionFactoryUser(Context context, Hashtable props) {
+ try {
+
+ String conFacJndiUser = (String) props.get(JMSConstants.CONFAC_JNDI_NAME_USER);
+ if (conFacJndiUser != null) {
+ return (String) context.lookup(conFacJndiUser);
+ } else {
+ return null;
+ }
+ } catch (NamingException e) {
+ handleException("Cannot get JMS Connection factory username with props : " + props, e);
+ }
+ return null;
+ }
+
+ /**
+ * Get the referenced ConnectionFactory Password (if supplied) using the properties from the context
+ *
+ * @param context the context to use for lookup
+ * @param props the properties which contains the JNDI name of the factory password
+ * @return the connection factory password (or null if one is not in the JNDI tree)
+ */
+ private String getConnectionFactoryPass(Context context, Hashtable props) {
+ try {
+
+ String conFacJndiPass = (String) props.get(JMSConstants.CONFAC_JNDI_NAME_PASS);
+ if (conFacJndiPass != null) {
+ return (String) context.lookup(conFacJndiPass);
+ } else {
+ return null;
+ }
+ } catch (NamingException e) {
+ handleException("Cannot get JMS Connection factory password with props : " + props, e);
+ }
+ return null;
+ }
+
+ /**
+ * Get the JMS destination specified by the given URL from the context
+ *
+ * @param context the Context to lookup
+ * @param url URL
+ * @return the JMS destination, or null if it does not exist
+ */
+ private Destination getDestination(Context context, String url) {
+ String destinationName = JMSUtils.getDestination(url);
+ try {
+ return (Destination) context.lookup(destinationName);
+
+ } catch (NameNotFoundException e) {
+ log.warn("Cannot get or lookup JMS destination : " + destinationName +
+ " from url : " + url + " : " + e.getMessage());
+
+ } catch (NamingException e) {
+ handleException("Cannot get JMS destination : " + destinationName +
+ " from url : " + url, e);
+ }
+ return null;
+ }
+
+
+ private void handleException(String s) {
+ log.error(s);
+ throw new AxisJMSException(s);
+ }
+
+ private void handleException(String s, Exception e) {
+ log.error(s, e);
+ throw new AxisJMSException(s, e);
+ }
+
+ public Destination getDestination() {
+ return destination;
+ }
+
+ public ConnectionFactory getConnectionFactory() {
+ return connectionFactory;
+ }
+
+ public String getConnectionFactoryPassword() {
+ return connectionFactoryPassword;
+ }
+
+ public String getConnectionFactoryUser() {
+ return connectionFactoryUser;
+ }
+
+ public void setContentType(String contentType) {
+ this.contentType = contentType;
+ }
+}
|