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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Feb 13 14:53:07 EST 2009


Author: mark.little at jboss.com
Date: 2009-02-13 14:53:07 -0500 (Fri, 13 Feb 2009)
New Revision: 25258

Modified:
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/client/ServiceInvoker.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/SqlTableGatewayListener.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/mina/MessageHandler.java
Log:
https://jira.jboss.org/jira/browse/JBESB-2097

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/client/ServiceInvoker.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/client/ServiceInvoker.java	2009-02-13 19:29:15 UTC (rev 25257)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/client/ServiceInvoker.java	2009-02-13 19:53:07 UTC (rev 25258)
@@ -175,6 +175,9 @@
         } catch (IllegalAccessException iae) {
             logger.error("Illegal access while instantiating LoadBalancePolicy class = " + lbClass);
             throw new MessageDeliverException(iae.getMessage(), iae);
+        } catch (final RegistryException ex) {
+        	logger.error("Problem encountered with the registry: "+ex);
+        	throw new MessageDeliverException("Problem encountered with the registry.", ex);
         }
     }
 
@@ -263,6 +266,10 @@
         } catch (FaultMessageException ex) {
             throw new MessageDeliverException("Unexpected FaultMessageException during message delivery.", ex);
         }
+        catch (final RegistryException ex)
+        {
+        	throw new MessageDeliverException("Problem encountered while using Registry", ex);
+        }
     }
 
     /**
@@ -297,7 +304,7 @@
      *         without error, otherwise an exception is thrown.
      * @throws MessageDeliverException Failed to deliver message, after trying all available EPRs.
      */
-    private Message post(Message message, EPRInvoker eprInvoker) throws MessageDeliverException, FaultMessageException {
+    private Message post(Message message, EPRInvoker eprInvoker) throws MessageDeliverException, FaultMessageException, RegistryException {
         boolean staleEPRCache = true;
         boolean initialPass = true;
 
@@ -318,6 +325,8 @@
             message.getContext().setContext(SecurityService.AUTH_REQUEST, encryptedAuthRequest);
         }
 
+        boolean timedout = false;
+        
         try {
             //We are removing dead EPRs from the serviceClusterInfo. *Previous* deliveries maybe have
             //removed EPRs that have now come back to life. We should try once more to pull a fresh list of EPRS
@@ -352,7 +361,23 @@
                 while ((epr = loadBalancer.chooseEPR(serviceClusterInfo)) != null) {
                 	try
                 	{
-    	                replyMessage = eprInvoker.attemptDelivery(message, epr);
+                		try
+                		{
+                			replyMessage = eprInvoker.attemptDelivery(message, epr);
+                		}
+                		catch (final ResponseTimeoutException ex)
+                		{
+                			// do this so we can loop through the list of eprs if there's more than one.
+                			
+                			if (serviceClusterInfo.getEPRs().size() == 1)
+                				throw ex;
+                			else
+                			{
+                				replyMessage = null;
+                				timedout = true;
+                			}
+                		}
+                		
     	                if (replyMessage != null) {
                             if(eprInvoker.synchronous) {
                                 // remove the security context so that it is not exposed to the action pipeline.
@@ -389,7 +414,7 @@
     	                     */
     
     	                    if (("true".equals(message.getProperties().getProperty(Environment.EXCEPTION_ON_DELIVERY_FAILURE, "false")) || exceptionOnDeliveryFailure))
-    	                	throw new MessageDeliverException("Failed to deliver message ["+message.getHeader()+"] to Service [" + service + "].  Told not to retry.");
+    	                    	throw new MessageDeliverException("Failed to deliver message ["+message.getHeader()+"] to Service [" + service + "].  Told not to retry by 'exceptionOnDeliverFailure' property.");
     	                }
                 	}
                 	catch (MalformedEPRException ex)  // so we can differentiate failure modes, since returning null is limiting
@@ -410,8 +435,13 @@
             message.getContext().removeContext(SecurityService.AUTH_REQUEST);
         }
 
-        // Throw exception if delivery failed...
-        throw new MessageDeliverException("Failed to deliver message ["+message.getHeader()+"] to Service [" + service + "].  Check for errors.");
+        if (timedout)
+        	throw new ResponseTimeoutException("Failed to get response from service(s).");
+        else
+        {
+	        // Throw exception if delivery failed...
+	        throw new MessageDeliverException("Failed to deliver message ["+message.getHeader()+"] to Service [" + service + "].  Check for errors.");
+        }
     }
 
     /**
@@ -478,9 +508,11 @@
      * until we can expect to get updates from the registry. For now this should work
      * just fine.
      *
-     * @throws MessageDeliverException Registry lookup failure.
+     * @throws RegistryException Registry lookup failure.
+     * @throws MessageDeliverException some other error occurs.
      */
-    public void loadServiceClusterInfo() throws MessageDeliverException {
+    
+    public void loadServiceClusterInfo() throws MessageDeliverException, RegistryException {
         List<EPR> serviceEprs = new ArrayList<EPR>();
         try {
             serviceEprs = RegistryUtil.getEprs(service.getCategory(), service.getName());
@@ -493,9 +525,11 @@
                     }
                 }
             }
-        } catch (ServiceNotFoundException snfe) {
+        } catch (final ServiceNotFoundException snfe) {
             logger.info("Service: " + service + " not found in the registry");
-        } catch (RegistryException e) {
+            
+            throw new RegistryException("Service: " + service + " not found in the registry", snfe);
+        } catch (final Exception e) {
             throw new MessageDeliverException(e.getMessage(), e);
         }
         serviceClusterInfo = new ServiceClusterInfoImpl(service.getName(), serviceEprs);

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/SqlTableGatewayListener.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/SqlTableGatewayListener.java	2009-02-13 19:29:15 UTC (rev 25257)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/SqlTableGatewayListener.java	2009-02-13 19:53:07 UTC (rev 25258)
@@ -140,7 +140,7 @@
         try {
         	_serviceInvoker = new ServiceInvoker(_targetServiceCategory, _targetServiceName);
         	_serviceInvoker.loadServiceClusterInfo();
-        } catch (MessageDeliverException mde) {
+        } catch (final Exception mde) {
         	throw new ManagedLifecycleException(mde);    		
         }
 

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/mina/MessageHandler.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/mina/MessageHandler.java	2009-02-13 19:29:15 UTC (rev 25257)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/mina/MessageHandler.java	2009-02-13 19:53:07 UTC (rev 25258)
@@ -33,7 +33,7 @@
 public interface MessageHandler extends IoHandler {
 
     /**
-     * Set the {@link ServiceInoker} instance to be used
+     * Set the {@link ServiceInvoker} instance to be used
      * to dispatch messages to the ESB Service
      *
      * @param invoker The ServiceInvoker instance.




More information about the jboss-svn-commits mailing list