[jboss-svn-commits] JBL Code SVN: r13307 - in labs/jbossesb/trunk/product: rosetta/src/org/jboss/soa/esb/listeners/jca and 5 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Jul 10 14:12:48 EDT 2007


Author: tfennelly
Date: 2007-07-10 14:12:48 -0400 (Tue, 10 Jul 2007)
New Revision: 13307

Added:
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/ServiceInvoker.java
Removed:
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/MessageDeliveryAdapter.java
Modified:
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/ListenerUtil.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/jca/InflowGateway.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/jca/JcaInflowGateway.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/jca/JmsEndpoint.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/UncomposedMessageDeliveryAdapter.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/message/MessageDeliveryAdapterUnitTest.java
   labs/jbossesb/trunk/product/samples/quickstarts/webservice_bpel/jboss-esb.xml
   labs/jbossesb/trunk/product/samples/quickstarts/webservice_bpel/war/resources/WEB-INF/web.xml
   labs/jbossesb/trunk/product/samples/quickstarts/webservice_war1/war/src/org/jboss/soa/esb/samples/quickstart/webservicewar1/webservice/HelloWorldWS.java
Log:
Renamed MessageDeliveryAdapter to ServiceInvoker ala JBESB-575

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/ListenerUtil.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/ListenerUtil.java	2007-07-10 17:55:05 UTC (rev 13306)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/ListenerUtil.java	2007-07-10 18:12:48 UTC (rev 13307)
@@ -42,7 +42,7 @@
 import org.jboss.soa.esb.addressing.eprs.JMSEpr;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.listeners.message.MessageDeliverException;
-import org.jboss.soa.esb.listeners.MessageDeliveryAdapter;
+import org.jboss.soa.esb.listeners.ServiceInvoker;
 import org.jboss.soa.esb.message.Message;
 import org.jboss.soa.esb.services.registry.RegistryException;
 import org.jboss.soa.esb.util.Util;
@@ -68,7 +68,7 @@
 	public static void tryToDeliver(Message message, String category, String name)
 			throws MessageDeliverException, JMSException, RegistryException
 	{
-        MessageDeliveryAdapter adapter = new MessageDeliveryAdapter(category, name);
+        ServiceInvoker adapter = new ServiceInvoker(category, name);
         adapter.deliverAsync(message);
         JmsConnectionPoolContainer.removeAllPools();
 	}

Deleted: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/MessageDeliveryAdapter.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/MessageDeliveryAdapter.java	2007-07-10 17:55:05 UTC (rev 13306)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/MessageDeliveryAdapter.java	2007-07-10 18:12:48 UTC (rev 13307)
@@ -1,302 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2006, JBoss Inc., and others contributors as indicated
- * by the @authors tag. All rights reserved.
- * See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- * This copyrighted material is made available to anyone wishing to use,
- * modify, copy, or redistribute it subject to the terms and conditions
- * of the GNU Lesser General Public License, v. 2.1.
- * This program is distributed in the hope that it will be useful, but WITHOUT A
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
- * You should have received a copy of the GNU Lesser General Public License,
- * v.2.1 along with this distribution; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA  02110-1301, USA.
- *
- * (C) 2005-2006, JBoss Inc.
- */
-package org.jboss.soa.esb.listeners;
-
-import java.util.Date;
-import java.util.List;
-
-import org.apache.log4j.Logger;
-import org.jboss.internal.soa.esb.assertion.AssertArgument;
-import org.jboss.soa.esb.ConfigurationException;
-import org.jboss.soa.esb.addressing.EPR;
-import org.jboss.soa.esb.addressing.MalformedEPRException;
-import org.jboss.soa.esb.common.Configuration;
-import org.jboss.soa.esb.couriers.Courier;
-import org.jboss.soa.esb.couriers.CourierException;
-import org.jboss.soa.esb.couriers.CourierFactory;
-import org.jboss.soa.esb.couriers.CourierUtil;
-import org.jboss.soa.esb.couriers.TwoWayCourier;
-import org.jboss.soa.esb.listeners.RegistryUtil;
-import org.jboss.soa.esb.listeners.message.MessageDeliverException;
-import org.jboss.soa.esb.listeners.ha.LoadBalancePolicy;
-import org.jboss.soa.esb.listeners.ha.ServiceClusterInfo;
-import org.jboss.soa.esb.listeners.ha.ServiceClusterInfoImpl;
-import org.jboss.soa.esb.message.Message;
-import org.jboss.soa.esb.services.registry.RegistryException;
-import org.jboss.soa.esb.util.ClassUtil;
-
-/**
- * Adapter class for managing {@link Message} delivery to a specified Service.
- * <p/>
- * Manages loading of {@link EPR EPRs}, {@link Courier} selection and
- * message delivery. Provides a unified/simplified interface for message
- * delivery.
- *
- * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
- */
-public class MessageDeliveryAdapter {
-
-    /**
-     * Class logger.
-     */
-    private static Logger logger = Logger.getLogger(MessageDeliveryAdapter.class);
-
-    /**
-     * The <b>category name</b> of the Service to which this instance will
-     * deliver messages.
-     */
-    private String serviceCategory;
-    /**
-     * The <b>name</b> of the Service to which this instance will
-     * deliver messages.
-     */
-    private String serviceName;
-    /**
-     * 
-     */
-    private LoadBalancePolicy loadBalancer;
-    /**
-     * 
-     */
-    private ServiceClusterInfo serviceClusterInfo;
-    /**
-     * Synchronous courier "pickup" deliver timeout.
-     */
-    private ThreadLocal<Long> syncPickupDeliveryTimeout = new ThreadLocal<Long>();
-    /**
-     * 
-     */
-    private Date expirationDate;
-    /**
-     * Public constructor.
-     *
-     * @param serviceCategory The <b>category name</b> of the Service to which this instance will
-     *                        deliver messages.
-     * @param serviceName     The <b>name</b> of the Service to which this instance will
-     *                        deliver messages.
-     * @throws RegistryException Failed to lookup EPRs for the specified Service.
-     */
-    public MessageDeliveryAdapter(String serviceCategory, String serviceName) throws RegistryException, MessageDeliverException {
-        AssertArgument.isNotNullAndNotEmpty(serviceCategory, "serviceCategory");
-        AssertArgument.isNotNullAndNotEmpty(serviceName, "serviceName");
-        this.serviceCategory = serviceCategory;
-        this.serviceName = serviceName;
-        String lbClass = Configuration.getLoadBalancerPolicy();
-        try {
-            Class c = ClassUtil.forName(lbClass, this.getClass());
-            loadBalancer = (LoadBalancePolicy) c.newInstance();
-            loadServiceClusterInfo();
-        } catch (ClassNotFoundException clf) {
-            logger.error("No such LoadBalancePolicy class = " + lbClass);
-            throw new MessageDeliverException( clf.getMessage(), clf);
-        } catch (InstantiationException ie) {
-            logger.error("Could not instatiate LoadBalancePolicy class = " + lbClass);
-            throw new MessageDeliverException( ie.getMessage(), ie.getCause());
-        } catch (IllegalAccessException iae) {
-            logger.error("Illegal access while instantiating LoadBalancePolicy class = " + lbClass);
-            throw new MessageDeliverException( iae.getMessage(), iae);
-        }
-    }
-
-    /**
-     * Synchronously deliver the supplied message to the target service associated with this adapter instance.
-     *
-     * @param message       The message to be delivered.
-     * @param timeoutMillis Number of milliseconds before synchronous reply pickup should timeout.
-     * @return Returns the reply message if the message was delivered
-     *         without error, otherwise an exception is thrown.
-     * @throws MessageDeliverException Failed to deliver message, after trying all available EPRs.
-     */
-    public Message deliverSync(Message message, long timeoutMillis) throws MessageDeliverException, RegistryException {
-        syncPickupDeliveryTimeout.set(timeoutMillis);
-        return deliver(message, true);
-    }
-
-    /**
-     * Asynchronously deliver the supplied message to the target service associated with this adapter instance.
-     *
-     * @param message The message to be delivered.
-     * @throws MessageDeliverException Failed to deliver message, after trying all available EPRs.
-     */
-    public void deliverAsync(Message message) throws MessageDeliverException {
-        // Not interested in a reply
-        deliver(message, false);
-    }
-
-    /**
-     * Deliver the supplied message to the target service associated with this adapter instance.
-     *
-     * @param message     The message to be delivered.
-     * @param synchronous Is the message to be delivered synchronously or not (asynchronously).
-     * @return Returns the message (or a reply message if synchronous) if the message was delivered
-     *         without error, otherwise an exception is thrown.
-     * @throws MessageDeliverException Failed to deliver message, after trying all available EPRs.
-     */
-    private Message deliver(Message message, boolean synchronous) throws MessageDeliverException
-    {
-        int numberOfAttemps=0;
-        while (numberOfAttemps++ < 2) {
-            if ((serviceClusterInfo.getEPRs().size()==0) || (new Date().after(expirationDate)) ) { 
-                loadServiceClusterInfo();
-            }
-            Message replyMessage = null;
-            EPR epr = null;
-            // Iterate over all the EPRs in the list until delivered
-            while ((epr = loadBalancer.chooseEPR(serviceClusterInfo))!=null) {
-                replyMessage = attemptDelivery(message, epr, synchronous);
-                if (replyMessage != null) {
-                    // We've delivered it, we're done!
-                    return replyMessage;
-                } else {
-                    logger.info("Dead EPR: " + epr);
-                    serviceClusterInfo.removeDeadEPR(epr);
-                }
-            }
-        }
-        
-        // Throw exception if delivery failed...
-        throw new MessageDeliverException("Failed to deliver message to Service [" + serviceCategory + ":" + serviceName + "].  Check for errors.");
-    }
-
-    /**
-     * Get the Service category name for the Service for which this instance is delivering messages.
-     *
-     * @return Service Category.
-     */
-    public String getServiceCategory() {
-        return serviceCategory;
-    }
-
-    /**
-     * Get the Service name for the Service for which this instance is delivering messages.
-     *
-     * @return Service name.
-     */
-    public String getServiceName() {
-        return serviceName;
-    }
-
-    /**
-     * Attempt to deliver the supplied message using the supplied EPR.
-     *
-     * @param message     The message to be delivered.
-     * @param epr         The EPR to be used in the delivery attempt.
-     * @param synchronous Is the message to be delivered synchronously or not (asynchronously).
-     * @return Returns the message (or a reply message if synchronous) if the message was delivered
-     *         without error, otherwise null.
-     */
-    private Message attemptDelivery(Message message, EPR epr, boolean synchronous) {
-        TwoWayCourier courier = null;
-
-        // Get a courier for the EPR...
-        try {
-            courier = getCourier(epr);
-        } catch (CourierException e) {
-            logger.debug("Courier lookup failed for EPR [" + epr + "] for Service [" + serviceCategory + ":" + serviceName + "].", e);
-        } catch (MalformedEPRException e) {
-            logger.warn("Badly formed EPR [" + epr + "] for Service [" + serviceCategory + ":" + serviceName + "]. " + e.getMessage());
-        } catch (Throwable t) {
-            logger.warn("Unexpected exception during Courier lookup for EPR [" + epr + "] for Service [" + serviceCategory + ":" + serviceName + "].", t);
-        }
-
-        // Try delivering the message using the courier we just looked up....
-        if (courier != null) {
-            try {
-                EPR replyToEPR = null;
-
-                if (synchronous) {
-                    replyToEPR = getReplyToAddress(epr);
-                    if(replyToEPR == null) {
-                        logger.debug("Not using epr [" + epr + "] for Service [" + serviceCategory + ":" + serviceName + "]. No reply-to address available for synchronous response.");
-                        return null;
-                    }
-                    message.getHeader().getCall().setReplyTo(replyToEPR);
-                }
-                if (courier.deliver(message)) {
-                    if (replyToEPR != null) {
-                        courier.setReplyToEpr(replyToEPR);
-                        return courier.pickup(syncPickupDeliveryTimeout.get());
-                    } else {
-                        return message;
-                    }
-                }
-            } catch (CourierException e) {
-                logger.debug("Badly formed EPR [" + epr + "] for Service [" + serviceCategory + ":" + serviceName + "]. " + e.getMessage());
-            } catch (MalformedEPRException e) {
-                // Hmmmm???... Can this really happen?  The Courier has already been created.  Haven't we already validated the EPR during the Courier lookup (above)??
-                logger.warn("Unexpected error.  Badly formed EPR [" + epr + "] for Service [" + serviceCategory + ":" + serviceName + "]. But the EPR has already been validated!!");
-            } catch (Throwable t) {
-                logger.warn("Unexpected exception during attempted message delivery over Courier for EPR [" + epr + "] for Service [" + serviceCategory + ":" + serviceName + "].", t);
-            } finally {
-                // TODO: So does this mean that Couriers are stateful?  If so, do we need to synchronize on using them??
-                CourierUtil.cleanCourier(courier);
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * Get the reply to address for synchronous delivery.
-     *
-     * @param toEpr The to address.
-     * @return The replyTo address.
-     * @throws ConfigurationException
-     */
-    protected EPR getReplyToAddress(EPR toEpr) throws ConfigurationException {
-        // This method just allows us to override Courier lookup during unit testing.
-        try {
-            return CourierUtil.getDefaultReplyToEpr(toEpr);
-        } catch (CourierException e) {
-            throw new ConfigurationException("Bad configuration. Unable to support synchronous reply on 'to' address " + toEpr, e);
-        } catch (MalformedEPRException e) {
-            throw new ConfigurationException("Bad configuration. Unable to support synchronous reply on 'to' address " + toEpr, e);
-        }
-    }
-
-    /**
-     * Get a {@link org.jboss.soa.esb.couriers.Courier} for the supplied EPR.
-     *
-     * @param epr The EPR for which a {@link org.jboss.soa.esb.couriers.Courier}
-     *            is being sought.
-     * @return The courier for the EPR.
-     * @throws CourierException      A courier implementation cannot be created.
-     * @throws MalformedEPRException Bad EPR.
-     */
-    protected TwoWayCourier getCourier(EPR epr) throws CourierException, MalformedEPRException {
-        // This method just allows us to override Courier lookup during unit testing.
-        return CourierFactory.getInstance().getMessageCourier(epr);
-    }
-    /**
-     * Loads the EPRs fresh from the Registry. Right now we will do this every minute
-     * until we can expect to get updates from the registry. For now this should work
-     * just fine.
-     */
-    public void loadServiceClusterInfo() throws MessageDeliverException
-    {
-        try {
-            List<EPR> serviceEprs = RegistryUtil.getEprs(serviceCategory, serviceName);
-            serviceClusterInfo = new ServiceClusterInfoImpl(serviceName, serviceEprs);
-            expirationDate = new Date(java.lang.System.currentTimeMillis() + 60000);
-        } catch (RegistryException e) {
-            throw new MessageDeliverException(e.getMessage(), e);
-        }
-    }
-}

Copied: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/ServiceInvoker.java (from rev 13306, labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/MessageDeliveryAdapter.java)
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/ServiceInvoker.java	                        (rev 0)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/ServiceInvoker.java	2007-07-10 18:12:48 UTC (rev 13307)
@@ -0,0 +1,302 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and others contributors as indicated
+ * by the @authors tag. All rights reserved.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * (C) 2005-2006, JBoss Inc.
+ */
+package org.jboss.soa.esb.listeners;
+
+import java.util.Date;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.jboss.internal.soa.esb.assertion.AssertArgument;
+import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.addressing.EPR;
+import org.jboss.soa.esb.addressing.MalformedEPRException;
+import org.jboss.soa.esb.common.Configuration;
+import org.jboss.soa.esb.couriers.Courier;
+import org.jboss.soa.esb.couriers.CourierException;
+import org.jboss.soa.esb.couriers.CourierFactory;
+import org.jboss.soa.esb.couriers.CourierUtil;
+import org.jboss.soa.esb.couriers.TwoWayCourier;
+import org.jboss.soa.esb.listeners.RegistryUtil;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
+import org.jboss.soa.esb.listeners.ha.LoadBalancePolicy;
+import org.jboss.soa.esb.listeners.ha.ServiceClusterInfo;
+import org.jboss.soa.esb.listeners.ha.ServiceClusterInfoImpl;
+import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.services.registry.RegistryException;
+import org.jboss.soa.esb.util.ClassUtil;
+
+/**
+ * Invoker class for managing {@link Message} delivery to a specified Service.
+ * <p/>
+ * Manages loading of {@link EPR EPRs}, {@link Courier} selection and
+ * message delivery. Provides a unified/simplified interface for message
+ * delivery.
+ *
+ * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
+ */
+public class ServiceInvoker {
+
+    /**
+     * Class logger.
+     */
+    private static Logger logger = Logger.getLogger(ServiceInvoker.class);
+
+    /**
+     * The <b>category name</b> of the Service to which this instance will
+     * deliver messages.
+     */
+    private String serviceCategory;
+    /**
+     * The <b>name</b> of the Service to which this instance will
+     * deliver messages.
+     */
+    private String serviceName;
+    /**
+     * 
+     */
+    private LoadBalancePolicy loadBalancer;
+    /**
+     * 
+     */
+    private ServiceClusterInfo serviceClusterInfo;
+    /**
+     * Synchronous courier "pickup" deliver timeout.
+     */
+    private ThreadLocal<Long> syncPickupDeliveryTimeout = new ThreadLocal<Long>();
+    /**
+     * 
+     */
+    private Date expirationDate;
+    /**
+     * Public constructor.
+     *
+     * @param serviceCategory The <b>category name</b> of the Service to which this instance will
+     *                        deliver messages.
+     * @param serviceName     The <b>name</b> of the Service to which this instance will
+     *                        deliver messages.
+     * @throws RegistryException Failed to lookup EPRs for the specified Service.
+     */
+    public ServiceInvoker(String serviceCategory, String serviceName) throws RegistryException, MessageDeliverException {
+        AssertArgument.isNotNullAndNotEmpty(serviceCategory, "serviceCategory");
+        AssertArgument.isNotNullAndNotEmpty(serviceName, "serviceName");
+        this.serviceCategory = serviceCategory;
+        this.serviceName = serviceName;
+        String lbClass = Configuration.getLoadBalancerPolicy();
+        try {
+            Class c = ClassUtil.forName(lbClass, this.getClass());
+            loadBalancer = (LoadBalancePolicy) c.newInstance();
+            loadServiceClusterInfo();
+        } catch (ClassNotFoundException clf) {
+            logger.error("No such LoadBalancePolicy class = " + lbClass);
+            throw new MessageDeliverException( clf.getMessage(), clf);
+        } catch (InstantiationException ie) {
+            logger.error("Could not instatiate LoadBalancePolicy class = " + lbClass);
+            throw new MessageDeliverException( ie.getMessage(), ie.getCause());
+        } catch (IllegalAccessException iae) {
+            logger.error("Illegal access while instantiating LoadBalancePolicy class = " + lbClass);
+            throw new MessageDeliverException( iae.getMessage(), iae);
+        }
+    }
+
+    /**
+     * Synchronously deliver the supplied message to the target service associated with this adapter instance.
+     *
+     * @param message       The message to be delivered.
+     * @param timeoutMillis Number of milliseconds before synchronous reply pickup should timeout.
+     * @return Returns the reply message if the message was delivered
+     *         without error, otherwise an exception is thrown.
+     * @throws MessageDeliverException Failed to deliver message, after trying all available EPRs.
+     */
+    public Message deliverSync(Message message, long timeoutMillis) throws MessageDeliverException, RegistryException {
+        syncPickupDeliveryTimeout.set(timeoutMillis);
+        return deliver(message, true);
+    }
+
+    /**
+     * Asynchronously deliver the supplied message to the target service associated with this adapter instance.
+     *
+     * @param message The message to be delivered.
+     * @throws MessageDeliverException Failed to deliver message, after trying all available EPRs.
+     */
+    public void deliverAsync(Message message) throws MessageDeliverException {
+        // Not interested in a reply
+        deliver(message, false);
+    }
+
+    /**
+     * Deliver the supplied message to the target service associated with this adapter instance.
+     *
+     * @param message     The message to be delivered.
+     * @param synchronous Is the message to be delivered synchronously or not (asynchronously).
+     * @return Returns the message (or a reply message if synchronous) if the message was delivered
+     *         without error, otherwise an exception is thrown.
+     * @throws MessageDeliverException Failed to deliver message, after trying all available EPRs.
+     */
+    private Message deliver(Message message, boolean synchronous) throws MessageDeliverException
+    {
+        int numberOfAttemps=0;
+        while (numberOfAttemps++ < 2) {
+            if ((serviceClusterInfo.getEPRs().size()==0) || (new Date().after(expirationDate)) ) { 
+                loadServiceClusterInfo();
+            }
+            Message replyMessage = null;
+            EPR epr = null;
+            // Iterate over all the EPRs in the list until delivered
+            while ((epr = loadBalancer.chooseEPR(serviceClusterInfo))!=null) {
+                replyMessage = attemptDelivery(message, epr, synchronous);
+                if (replyMessage != null) {
+                    // We've delivered it, we're done!
+                    return replyMessage;
+                } else {
+                    logger.info("Dead EPR: " + epr);
+                    serviceClusterInfo.removeDeadEPR(epr);
+                }
+            }
+        }
+        
+        // Throw exception if delivery failed...
+        throw new MessageDeliverException("Failed to deliver message to Service [" + serviceCategory + ":" + serviceName + "].  Check for errors.");
+    }
+
+    /**
+     * Get the Service category name for the Service for which this instance is delivering messages.
+     *
+     * @return Service Category.
+     */
+    public String getServiceCategory() {
+        return serviceCategory;
+    }
+
+    /**
+     * Get the Service name for the Service for which this instance is delivering messages.
+     *
+     * @return Service name.
+     */
+    public String getServiceName() {
+        return serviceName;
+    }
+
+    /**
+     * Attempt to deliver the supplied message using the supplied EPR.
+     *
+     * @param message     The message to be delivered.
+     * @param epr         The EPR to be used in the delivery attempt.
+     * @param synchronous Is the message to be delivered synchronously or not (asynchronously).
+     * @return Returns the message (or a reply message if synchronous) if the message was delivered
+     *         without error, otherwise null.
+     */
+    private Message attemptDelivery(Message message, EPR epr, boolean synchronous) {
+        TwoWayCourier courier = null;
+
+        // Get a courier for the EPR...
+        try {
+            courier = getCourier(epr);
+        } catch (CourierException e) {
+            logger.debug("Courier lookup failed for EPR [" + epr + "] for Service [" + serviceCategory + ":" + serviceName + "].", e);
+        } catch (MalformedEPRException e) {
+            logger.warn("Badly formed EPR [" + epr + "] for Service [" + serviceCategory + ":" + serviceName + "]. " + e.getMessage());
+        } catch (Throwable t) {
+            logger.warn("Unexpected exception during Courier lookup for EPR [" + epr + "] for Service [" + serviceCategory + ":" + serviceName + "].", t);
+        }
+
+        // Try delivering the message using the courier we just looked up....
+        if (courier != null) {
+            try {
+                EPR replyToEPR = null;
+
+                if (synchronous) {
+                    replyToEPR = getReplyToAddress(epr);
+                    if(replyToEPR == null) {
+                        logger.debug("Not using epr [" + epr + "] for Service [" + serviceCategory + ":" + serviceName + "]. No reply-to address available for synchronous response.");
+                        return null;
+                    }
+                    message.getHeader().getCall().setReplyTo(replyToEPR);
+                }
+                if (courier.deliver(message)) {
+                    if (replyToEPR != null) {
+                        courier.setReplyToEpr(replyToEPR);
+                        return courier.pickup(syncPickupDeliveryTimeout.get());
+                    } else {
+                        return message;
+                    }
+                }
+            } catch (CourierException e) {
+                logger.debug("Badly formed EPR [" + epr + "] for Service [" + serviceCategory + ":" + serviceName + "]. " + e.getMessage());
+            } catch (MalformedEPRException e) {
+                // Hmmmm???... Can this really happen?  The Courier has already been created.  Haven't we already validated the EPR during the Courier lookup (above)??
+                logger.warn("Unexpected error.  Badly formed EPR [" + epr + "] for Service [" + serviceCategory + ":" + serviceName + "]. But the EPR has already been validated!!");
+            } catch (Throwable t) {
+                logger.warn("Unexpected exception during attempted message delivery over Courier for EPR [" + epr + "] for Service [" + serviceCategory + ":" + serviceName + "].", t);
+            } finally {
+                // TODO: So does this mean that Couriers are stateful?  If so, do we need to synchronize on using them??
+                CourierUtil.cleanCourier(courier);
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Get the reply to address for synchronous delivery.
+     *
+     * @param toEpr The to address.
+     * @return The replyTo address.
+     * @throws ConfigurationException
+     */
+    protected EPR getReplyToAddress(EPR toEpr) throws ConfigurationException {
+        // This method just allows us to override Courier lookup during unit testing.
+        try {
+            return CourierUtil.getDefaultReplyToEpr(toEpr);
+        } catch (CourierException e) {
+            throw new ConfigurationException("Bad configuration. Unable to support synchronous reply on 'to' address " + toEpr, e);
+        } catch (MalformedEPRException e) {
+            throw new ConfigurationException("Bad configuration. Unable to support synchronous reply on 'to' address " + toEpr, e);
+        }
+    }
+
+    /**
+     * Get a {@link org.jboss.soa.esb.couriers.Courier} for the supplied EPR.
+     *
+     * @param epr The EPR for which a {@link org.jboss.soa.esb.couriers.Courier}
+     *            is being sought.
+     * @return The courier for the EPR.
+     * @throws CourierException      A courier implementation cannot be created.
+     * @throws MalformedEPRException Bad EPR.
+     */
+    protected TwoWayCourier getCourier(EPR epr) throws CourierException, MalformedEPRException {
+        // This method just allows us to override Courier lookup during unit testing.
+        return CourierFactory.getInstance().getMessageCourier(epr);
+    }
+    /**
+     * Loads the EPRs fresh from the Registry. Right now we will do this every minute
+     * until we can expect to get updates from the registry. For now this should work
+     * just fine.
+     */
+    public void loadServiceClusterInfo() throws MessageDeliverException
+    {
+        try {
+            List<EPR> serviceEprs = RegistryUtil.getEprs(serviceCategory, serviceName);
+            serviceClusterInfo = new ServiceClusterInfoImpl(serviceName, serviceEprs);
+            expirationDate = new Date(java.lang.System.currentTimeMillis() + 60000);
+        } catch (RegistryException e) {
+            throw new MessageDeliverException(e.getMessage(), e);
+        }
+    }
+}


Property changes on: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/ServiceInvoker.java
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/jca/InflowGateway.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/jca/InflowGateway.java	2007-07-10 17:55:05 UTC (rev 13306)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/jca/InflowGateway.java	2007-07-10 18:12:48 UTC (rev 13307)
@@ -21,7 +21,7 @@
 */
 package org.jboss.soa.esb.listeners.jca;
 
-import org.jboss.soa.esb.listeners.MessageDeliveryAdapter;
+import org.jboss.soa.esb.listeners.ServiceInvoker;
 
 /**
  * Required interface for JCA ESB Gateways
@@ -34,5 +34,5 @@
  */
 public interface InflowGateway
 {
-   public void setServiceInvoker(MessageDeliveryAdapter invoker);
+   public void setServiceInvoker(ServiceInvoker invoker);
 }

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/jca/JcaInflowGateway.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/jca/JcaInflowGateway.java	2007-07-10 17:55:05 UTC (rev 13306)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/jca/JcaInflowGateway.java	2007-07-10 18:12:48 UTC (rev 13307)
@@ -31,7 +31,7 @@
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.listeners.ListenerTagNames;
 import org.jboss.soa.esb.listeners.ListenerUtil;
-import org.jboss.soa.esb.listeners.MessageDeliveryAdapter;
+import org.jboss.soa.esb.listeners.ServiceInvoker;
 import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 import org.jboss.soa.esb.listeners.lifecycle.AbstractThreadedManagedLifecycle;
 import org.jboss.soa.esb.listeners.lifecycle.ManagedLifecycleException;
@@ -225,10 +225,10 @@
 
    protected void doRun()
    {
-      MessageDeliveryAdapter invoker;
+      ServiceInvoker invoker;
       try
       {
-         invoker = new MessageDeliveryAdapter(serviceCategory, serviceName);
+         invoker = new ServiceInvoker(serviceCategory, serviceName);
          bean.setServiceInvoker(invoker);
          bridge.activate();
       }

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/jca/JmsEndpoint.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/jca/JmsEndpoint.java	2007-07-10 17:55:05 UTC (rev 13306)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/jca/JmsEndpoint.java	2007-07-10 18:12:48 UTC (rev 13307)
@@ -25,7 +25,7 @@
 import javax.jms.MessageListener;
 
 import org.jboss.soa.esb.listeners.gateway.PackageJmsMessageContents;
-import org.jboss.soa.esb.listeners.MessageDeliveryAdapter;
+import org.jboss.soa.esb.listeners.ServiceInvoker;
 
 /**
  * comment
@@ -35,10 +35,10 @@
  */
 public class JmsEndpoint implements InflowGateway, MessageListener
 {
-   private MessageDeliveryAdapter service;
+   private ServiceInvoker service;
    private PackageJmsMessageContents transformer = new PackageJmsMessageContents();
 
-   public void setServiceInvoker(MessageDeliveryAdapter invoker)
+   public void setServiceInvoker(ServiceInvoker invoker)
    {
       this.service = invoker;
    }

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/UncomposedMessageDeliveryAdapter.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/UncomposedMessageDeliveryAdapter.java	2007-07-10 17:55:05 UTC (rev 13306)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/message/UncomposedMessageDeliveryAdapter.java	2007-07-10 18:12:48 UTC (rev 13307)
@@ -23,18 +23,18 @@
 import org.jboss.soa.esb.ConfigurationException;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.listeners.*;
-import org.jboss.soa.esb.listeners.MessageDeliveryAdapter;
+import org.jboss.soa.esb.listeners.ServiceInvoker;
 import org.jboss.soa.esb.message.Message;
 import org.jboss.soa.esb.services.registry.RegistryException;
 
 /**
  * Adapter class for delivering uncomposed (ESB unaware) message payloads to a target service.
  * <p/>
- * Basically wires a {@link MessageDeliveryAdapter} instance with a {@link MessageComposer}
+ * Basically wires a {@link ServiceInvoker} instance with a {@link MessageComposer}
  * instance.
  *
  * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
- * @see org.jboss.soa.esb.listeners.MessageDeliveryAdapter
+ * @see org.jboss.soa.esb.listeners.ServiceInvoker
  */
 public class UncomposedMessageDeliveryAdapter {
 
@@ -42,7 +42,7 @@
      * Composed message delivery adapter.  Performs the delivery after this class
      * composes the message.
      */
-    private MessageDeliveryAdapter messageDeliveryAdapter;
+    private ServiceInvoker serviceInvoker;
     /**
      * Message composer.
      */
@@ -63,7 +63,7 @@
         AssertArgument.isNotNull(serviceCategory, "serviceCategory");
         AssertArgument.isNotNull(serviceName, "serviceName");
         AssertArgument.isNotNull(composer, "composer");
-        messageDeliveryAdapter = new org.jboss.soa.esb.listeners.MessageDeliveryAdapter(serviceCategory, serviceName);
+        serviceInvoker = new org.jboss.soa.esb.listeners.ServiceInvoker(serviceCategory, serviceName);
         this.composer = composer;
     }
 
@@ -104,7 +104,7 @@
         Message message = composer.compose(messagePayload);
 
         // Deliver the message...
-        return messageDeliveryAdapter.deliverSync(message, timeoutMillis);
+        return serviceInvoker.deliverSync(message, timeoutMillis);
     }
 
     /**
@@ -118,7 +118,7 @@
         AssertArgument.isNotNull(messagePayload, "messagePayload");
         Message message = composer.compose(messagePayload);
 
-        messageDeliveryAdapter.deliverAsync(message);
+        serviceInvoker.deliverAsync(message);
     }
 
     /**
@@ -127,8 +127,8 @@
      *
      * @return Message Delivery Adapter.
      */
-    public MessageDeliveryAdapter getDeliveryAdapter() {
-        return messageDeliveryAdapter;
+    public ServiceInvoker getDeliveryAdapter() {
+        return serviceInvoker;
     }
 
     /**

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/message/MessageDeliveryAdapterUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/message/MessageDeliveryAdapterUnitTest.java	2007-07-10 17:55:05 UTC (rev 13306)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/soa/esb/listeners/message/MessageDeliveryAdapterUnitTest.java	2007-07-10 18:12:48 UTC (rev 13307)
@@ -40,7 +40,7 @@
 import org.junit.Test;
 
 /**
- * Tests for the MessageDeliveryAdapter and UncomposedMessageDeliveryAdapter
+ * Tests for the ServiceInvoker and UncomposedMessageDeliveryAdapter
  * classes.
  *
  * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>

Modified: labs/jbossesb/trunk/product/samples/quickstarts/webservice_bpel/jboss-esb.xml
===================================================================
--- labs/jbossesb/trunk/product/samples/quickstarts/webservice_bpel/jboss-esb.xml	2007-07-10 17:55:05 UTC (rev 13306)
+++ labs/jbossesb/trunk/product/samples/quickstarts/webservice_bpel/jboss-esb.xml	2007-07-10 18:12:48 UTC (rev 13307)
@@ -126,7 +126,8 @@
                      template and will then use OGNL to populate the values (from the Smooks 
                      EXTRACTED_BEANS_HASH) into the soap message. -->
                 <action name="soapui-client" class="org.jboss.soa.esb.actions.soap.SOAPClient">
-                    <property name="wsdl" value="http://localhost:18080/active-bpel/services/RetailerCallback?wsdl"/>
+                    <!-- property name="wsdl" value="http://localhost:18080/active-bpel/services/RetailerCallback?wsdl"/ -->
+                    <property name="wsdl" value="https://localhost:18443/active-bpel/services/RetailerCallback?wsdl"/>
                     <property name="operation" value="SendSalesOrderNotification"/>
                     <property name="paramsLocation" value="EXTRACTED_BEANS_HASH"/>
                     <property name="responseXStreamConfig">

Modified: labs/jbossesb/trunk/product/samples/quickstarts/webservice_bpel/war/resources/WEB-INF/web.xml
===================================================================
--- labs/jbossesb/trunk/product/samples/quickstarts/webservice_bpel/war/resources/WEB-INF/web.xml	2007-07-10 17:55:05 UTC (rev 13306)
+++ labs/jbossesb/trunk/product/samples/quickstarts/webservice_bpel/war/resources/WEB-INF/web.xml	2007-07-10 18:12:48 UTC (rev 13307)
@@ -25,4 +25,27 @@
         <url-pattern>/ABI_Shipping</url-pattern>
     </servlet-mapping>
 
+	<security-constraint>
+		<web-resource-collection>
+			<web-resource-name>Secure Content</web-resource-name>
+			<url-pattern>/*</url-pattern>
+		</web-resource-collection>
+		<auth-constraint>
+			<role-name>JBossAdmin</role-name>
+		</auth-constraint>
+		<user-data-constraint>
+			<transport-guarantee>NONE</transport-guarantee>
+		</user-data-constraint>
+	</security-constraint>
+	<!-- ... -->
+	<login-config>
+		<auth-method>BASIC</auth-method>
+	<realm-name>Order Management Service</realm-name>
+	</login-config>
+	<!-- ... -->
+	<security-role>
+		<description>The role required to access restricted content </description>
+		<role-name>JBossAdmin</role-name>
+	</security-role>
+    
 </web-app>

Modified: labs/jbossesb/trunk/product/samples/quickstarts/webservice_war1/war/src/org/jboss/soa/esb/samples/quickstart/webservicewar1/webservice/HelloWorldWS.java
===================================================================
--- labs/jbossesb/trunk/product/samples/quickstarts/webservice_war1/war/src/org/jboss/soa/esb/samples/quickstart/webservicewar1/webservice/HelloWorldWS.java	2007-07-10 17:55:05 UTC (rev 13306)
+++ labs/jbossesb/trunk/product/samples/quickstarts/webservice_war1/war/src/org/jboss/soa/esb/samples/quickstart/webservicewar1/webservice/HelloWorldWS.java	2007-07-10 18:12:48 UTC (rev 13307)
@@ -30,7 +30,7 @@
 import org.jboss.soa.esb.message.Message; // jbossesb-rosetta.jar
 import org.jboss.soa.esb.message.format.MessageFactory; // jbossesb-rosetta.jar
 import org.jboss.soa.esb.message.format.MessageType; // jbossesb-rosetta.jar
-import org.jboss.soa.esb.listeners.MessageDeliveryAdapter; // jbossesb-rosetta.jar
+import org.jboss.soa.esb.listeners.ServiceInvoker; // jbossesb-rosetta.jar
 
 @WebService(name = "HelloWorld", targetNamespace = "http://webservice_war1/helloworld")
 @SOAPBinding(style = SOAPBinding.Style.RPC)
@@ -40,12 +40,12 @@
         System.out.println("HelloWorld Hit! " + toWhom);
         String results = "";
         try {
-            MessageDeliveryAdapter deliveryAdapter;
+            ServiceInvoker deliveryAdapter;
             Message requestMessage;
             Message replyMessage = null;
 
             // Create the delivery adapter for the target service (you'd normally cache this!!)...
-            deliveryAdapter = new org.jboss.soa.esb.listeners.MessageDeliveryAdapter("MyServiceCategory", "MyService");
+            deliveryAdapter = new org.jboss.soa.esb.listeners.ServiceInvoker("MyServiceCategory", "MyService");
             // Create and populate the request message...
             requestMessage = MessageFactory.getInstance().getMessage(MessageType.JBOSS_XML);
             requestMessage.getBody().setByteArray(toWhom.getBytes()); // inject the value from the WS client




More information about the jboss-svn-commits mailing list