[jboss-svn-commits] JBL Code SVN: r25284 - labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/client.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun Feb 15 19:53:52 EST 2009


Author: mark.little at jboss.com
Date: 2009-02-15 19:53:50 -0500 (Sun, 15 Feb 2009)
New Revision: 25284

Modified:
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/client/ServiceInvoker.java
Log:
https://jira.jboss.org/jira/browse/JBESB-2097 further update.

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-15 23:59:01 UTC (rev 25283)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/client/ServiceInvoker.java	2009-02-16 00:53:50 UTC (rev 25284)
@@ -24,6 +24,7 @@
 import java.util.List;
 
 import javax.crypto.SealedObject;
+import javax.imageio.spi.ServiceRegistry;
 
 import org.apache.log4j.Logger;
 import org.jboss.internal.soa.esb.addressing.helpers.EPRHelper;
@@ -165,7 +166,7 @@
         try {
             Class c = ClassUtil.forName(lbClass, this.getClass());
             loadBalancer = (LoadBalancePolicy) c.newInstance();
-            loadServiceClusterInfo();
+            loadServiceClusterInfoSilent();
         } catch (ClassNotFoundException clf) {
             logger.error("No such LoadBalancePolicy class = " + lbClass);
             throw new MessageDeliverException(clf.getMessage(), clf);
@@ -175,10 +176,6 @@
         } catch (IllegalAccessException iae) {
             logger.error("Illegal access while instantiating LoadBalancePolicy class = " + lbClass);
             throw new MessageDeliverException(iae.getMessage(), iae);
-        } catch (final RegistryException ex) {
-        	// ignore this as it may be ok at construction time - assume service there later.
-        	
-        	logger.debug("Problem encountered with the registry: "+ex);
         }
     }
 
@@ -224,7 +221,11 @@
 
                 deliverToDeadLetterService(message);
             }
-            throw mde;
+            
+            if (mde.getCause() instanceof ServiceNotFoundException)
+            	throw new RegistryException("Problem when using registry.", mde.getCause());
+            else
+            	throw mde;
         }
         return message;
     }
@@ -270,10 +271,6 @@
         } 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);
-        }
     }
 
     /**
@@ -282,7 +279,6 @@
      * For internal package use only.
      *
      * @param message The message to be delivered to the dead letter chennel.
-     * @throws RegistryException       Service endpoint lookup failure.
      * @throws MessageDeliverException Message delivery failure.
      */
     protected static synchronized void deliverToDeadLetterService(Message message) throws MessageDeliverException {
@@ -308,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, RegistryException {
+    private Message post(Message message, EPRInvoker eprInvoker) throws MessageDeliverException, FaultMessageException {
         boolean staleEPRCache = true;
         boolean initialPass = true;
 
@@ -512,11 +508,10 @@
      * until we can expect to get updates from the registry. For now this should work
      * just fine.
      *
-     * @throws RegistryException Registry lookup failure.
      * @throws MessageDeliverException some other error occurs.
      */
     
-    public void loadServiceClusterInfo() throws MessageDeliverException, RegistryException {
+    public void loadServiceClusterInfo() throws MessageDeliverException {
         List<EPR> serviceEprs = new ArrayList<EPR>();
         try {
             serviceEprs = RegistryUtil.getEprs(service.getCategory(), service.getName());
@@ -532,7 +527,9 @@
         } catch (final ServiceNotFoundException snfe) {
             logger.info("Service: " + service + " not found in the registry");
             
-            throw new RegistryException("Service: " + service + " not found in the registry", snfe);
+            // yeuch - broken API that we have to live with for now.
+            
+            throw new MessageDeliverException("Service: " + service + " not found in the registry", snfe);
         } catch (final Exception e) {
             throw new MessageDeliverException(e.getMessage(), e);
         }
@@ -541,6 +538,31 @@
     }
     
     /*
+     * If doing a load at construction time it's possible the registry may not
+     * be set yet, so we ignore such faults.
+     */
+    
+    private final void loadServiceClusterInfoSilent () throws MessageDeliverException
+    {
+    	try
+    	{
+    		loadServiceClusterInfo();
+    	}
+    	catch (final MessageDeliverException ex) 
+    	{
+        	// we now throw MessageDeliverException from loadServiceClusterInfo if there's a registry problem ...
+        	
+        	if (ex.getCause() instanceof ServiceNotFoundException)
+        	{
+        		// assume service is there later
+        		logger.debug("Problem with registry but will ignore.");
+        	}
+        	else
+        		throw ex;
+    	}
+    }
+    	
+    /*
      * Is redelivery overridden on a per message basis? If not, use the global setting.
      */
     
@@ -558,6 +580,30 @@
         }
     }
     
+    private final void asyncDLQ (final Message message) throws MessageDeliverException
+    {
+    	if (message.getProperties().getProperty(RedeliverStore.IS_REDELIVERY) == null
+				&& asyncRedelivery(message) && !service.equals(dlqService))
+		{
+			message.getProperties().setProperty(MessageStore.CLASSIFICATION,
+					MessageStore.CLASSIFICATION_RDLVR);
+			message.getProperties().setProperty(DELIVER_TO, service);
+			
+			try
+			{
+				logger.info("Delivering message [" + message.getHeader()
+						+ "] to RDLVRQ.");
+
+				deliverToDeadLetterService(message);
+			}
+			finally
+			{
+				message.getProperties().remove(MessageStore.CLASSIFICATION);
+				message.getProperties().remove(DELIVER_TO);
+			}
+		}
+    }
+    
     private class EPRInvoker {
 
         private boolean synchronous = false;




More information about the jboss-svn-commits mailing list