[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