You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fx-dev@ws.apache.org by ch...@apache.org on 2006/11/02 05:08:26 UTC
svn commit: r470218 [3/3] - in /webservices/sandesha/trunk/java:
src/org/apache/sandesha2/ src/org/apache/sandesha2/client/
src/org/apache/sandesha2/util/ src/org/apache/sandesha2/workers/
test/src/org/apache/sandesha2/
Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java?view=diff&rev=470218&r1=470217&r2=470218
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java Wed Nov 1 20:08:26 2006
@@ -18,7 +18,9 @@
package org.apache.sandesha2.util;
import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
+import java.io.PrintWriter;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.Iterator;
@@ -220,14 +222,6 @@
sender.runSenderForTheSequence(context, sequenceID);
}
}
-
- private static void stopSenderForTheSequence(String sequenceID, ConfigurationContext context) {
- Sender sender = (Sender) context.getProperty(Sandesha2Constants.SENDER);
-
- if (sender!=null) {
- sender.stopSenderForTheSequence(sequenceID);
- }
- }
public static void stopSender(ConfigurationContext context) {
Sender sender = (Sender) context.getProperty(Sandesha2Constants.SENDER);
@@ -267,12 +261,6 @@
if (pollingManager!=null)
pollingManager.stopPolling ();
}
-
- private static void stopInvokerForTheSequence(String sequenceID, ConfigurationContext context) {
- Invoker invoker = (Invoker) context.getProperty(Sandesha2Constants.INVOKER);
- if (invoker!=null)
- invoker.stopInvokerForTheSequence(sequenceID);
- }
public static void stopInvoker(ConfigurationContext context) {
Invoker invoker = (Invoker) context.getProperty(Sandesha2Constants.INVOKER);
@@ -1148,5 +1136,22 @@
return newMsg;
}
+
+ /**
+ * Returns an Exception as a String
+ *
+ * @param exc
+ * @return
+ */
+ public static String getStackTrace(Throwable exc)
+ {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ PrintWriter pw = new PrintWriter(baos);
+ exc.printStackTrace(pw);
+ pw.flush();
+ String stackTrace = baos.toString();
+ return stackTrace;
+ }
+
}
Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java?view=diff&rev=470218&r1=470217&r2=470218
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java Wed Nov 1 20:08:26 2006
@@ -11,7 +11,6 @@
import org.apache.axis2.context.OperationContext;
import org.apache.axis2.description.TransportOutDescription;
import org.apache.axis2.engine.AxisEngine;
-import org.apache.axis2.transport.TransportSender;
import org.apache.axis2.transport.TransportUtils;
import org.apache.axis2.transport.http.HTTPConstants;
import org.apache.commons.logging.Log;
@@ -25,11 +24,12 @@
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.Transaction;
import org.apache.sandesha2.storage.beanmanagers.SenderBeanMgr;
+import org.apache.sandesha2.storage.beanmanagers.SequencePropertyBeanMgr;
import org.apache.sandesha2.storage.beans.SenderBean;
+import org.apache.sandesha2.storage.beans.SequencePropertyBean;
import org.apache.sandesha2.util.AcknowledgementManager;
import org.apache.sandesha2.util.MessageRetransmissionAdjuster;
import org.apache.sandesha2.util.MsgInitializer;
-import org.apache.sandesha2.util.RMMsgCreator;
import org.apache.sandesha2.util.SandeshaUtil;
import org.apache.sandesha2.util.TerminateManager;
import org.apache.sandesha2.wsrm.TerminateSequence;
@@ -52,6 +52,9 @@
public void run () {
+ if (log.isDebugEnabled())
+ log.debug("Enter: SenderWorker::run");
+
Transaction transaction = null;
try {
@@ -76,6 +79,8 @@
boolean continueSending = MessageRetransmissionAdjuster.adjustRetransmittion(rmMsgCtx, senderBean, configurationContext,
storageManager);
if (!continueSending) {
+ if (log.isDebugEnabled())
+ log.debug("Exit: SenderWorker::run, !continueSending");
return;
}
@@ -88,6 +93,8 @@
String qualifiedForSending = (String) msgCtx.getProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING);
if (qualifiedForSending != null && !qualifiedForSending.equals(Sandesha2Constants.VALUE_TRUE)) {
+ if (log.isDebugEnabled())
+ log.debug("Exit: SenderWorker::run, !qualified for sending");
return;
}
@@ -101,6 +108,8 @@
ArrayList msgsNotToSend = SandeshaUtil.getPropertyBean(msgCtx.getAxisOperation()).getMsgTypesToDrop();
if (msgsNotToSend != null && msgsNotToSend.contains(new Integer(rmMsgCtx.getMessageType()))) {
+ if (log.isDebugEnabled())
+ log.debug("Exit: SenderWorker::run, message type to be dropped " + rmMsgCtx.getMessageType());
return;
}
@@ -171,7 +180,55 @@
} catch (Exception e) {
String message = SandeshaMessageHelper.getMessage(
SandeshaMessageKeys.sendMsgError, e.toString());
- log.error(message, e);
+
+ if (log.isErrorEnabled())
+ log.error(message, e);
+ // Store the Exception as a sequence property to enable the client to lookup the last
+ // exception time and timestamp.
+
+ // Create a new Transaction
+ transaction = storageManager.getTransaction();
+
+ try
+ {
+
+ // Get the internal sequence id from the context
+ String internalSequenceId = (String)rmMsgCtx.getProperty(Sandesha2Constants.MessageContextProperties.INTERNAL_SEQUENCE_ID);
+
+ // Get the sequence property bean manager
+ SequencePropertyBeanMgr seqPropMgr = storageManager.getSequencePropertyBeanMgr();
+
+ // Add the new sequence property beans.
+ String exceptionStr = SandeshaUtil.getStackTrace(e);
+ SequencePropertyBean eBean =
+ new SequencePropertyBean(internalSequenceId,
+ Sandesha2Constants.SequenceProperties.LAST_FAILED_TO_SEND_ERROR,
+ exceptionStr);
+
+ SequencePropertyBean etsBean =
+ new SequencePropertyBean(internalSequenceId,
+ Sandesha2Constants.SequenceProperties.LAST_FAILED_TO_SEND_ERROR_TIMESTAMP,
+ String.valueOf(System.currentTimeMillis()));
+
+
+ // Insert the exception bean
+ seqPropMgr.insert(eBean);
+
+ // Insert the timestamp bean
+ seqPropMgr.insert(etsBean);
+
+ // Commit the properties
+ transaction.commit();
+ }
+ catch (Exception e1)
+ {
+ if (log.isErrorEnabled())
+ log.error(e1);
+
+ if (transaction != null && transaction.isActive())
+ transaction.rollback();
+ }
+
} finally {
transaction = storageManager.getTransaction();
msgCtx.setProperty(Sandesha2Constants.WITHIN_TRANSACTION,
@@ -224,16 +281,30 @@
msgCtx.setProperty(Sandesha2Constants.WITHIN_TRANSACTION, Sandesha2Constants.VALUE_FALSE);
} catch (SandeshaStorageException e) {
+ if (log.isDebugEnabled())
+ log.debug(e);
if (transaction!=null && transaction.isActive())
transaction.rollback();
} catch (SandeshaException e) {
- e.printStackTrace();
+ if (log.isDebugEnabled())
+ log.debug(e);
+ if (transaction!=null && transaction.isActive())
+ transaction.rollback();
} catch (MissingResourceException e) {
- e.printStackTrace();
+ if (log.isFatalEnabled())
+ log.fatal("Unable to load message bundle", e);
+ if (transaction!=null && transaction.isActive())
+ transaction.rollback();
} catch (AxisFault e) {
- e.printStackTrace();
+ if (log.isDebugEnabled())
+ log.debug(e);
+ if (transaction!=null && transaction.isActive())
+ transaction.rollback();
} catch (Exception e) {
- e.printStackTrace();
+ if (log.isDebugEnabled())
+ log.debug(e);
+ if (transaction!=null && transaction.isActive())
+ transaction.rollback();
} finally {
if (transaction!=null && transaction.isActive())
transaction.commit();
@@ -242,6 +313,9 @@
lock.removeWork(workId);
}
}
+
+ if (log.isDebugEnabled())
+ log.debug("Exit: SenderWorker::run");
}
private void updateMessage(MessageContext msgCtx1) throws SandeshaException {
@@ -347,7 +421,7 @@
log.debug("Exit: Sender::checkForSyncResponses");
}
- private boolean isFaultEnvelope(SOAPEnvelope envelope) throws SandeshaException {
+ private boolean isFaultEnvelope(SOAPEnvelope envelope) {
if (log.isDebugEnabled())
log.debug("Enter: Sender::isFaultEnvelope, " + envelope.getBody().getFault());
SOAPFault fault = envelope.getBody().getFault();
Modified: webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/SandeshaClientTest.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/SandeshaClientTest.java?view=diff&rev=470218&r1=470217&r2=470218
==============================================================================
--- webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/SandeshaClientTest.java (original)
+++ webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/SandeshaClientTest.java Wed Nov 1 20:08:26 2006
@@ -18,14 +18,19 @@
import java.io.File;
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axiom.soap.SOAP11Constants;
import org.apache.axis2.AxisFault;
import org.apache.axis2.Constants;
+import org.apache.axis2.Constants.Configuration;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.ConfigurationContextFactory;
-import org.apache.axis2.context.MessageContextConstants;
import org.apache.axis2.transport.http.SimpleHTTPServer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -40,18 +45,17 @@
private Log log = LogFactory.getLog(getClass());
int serverPort = DEFAULT_SERVER_TEST_PORT;
+ private static final String applicationNamespaceName = "http://tempuri.org/";
+ private static final String ping = "ping";
+ private static final String Text = "Text";
+
+
public SandeshaClientTest () {
super ("SandeshaClientTest");
}
- public void setUp () throws AxisFault {
+ public void setUp () {
- String repoPath = "target" + File.separator + "repos" + File.separator + "server";
- String axis2_xml = "target" + File.separator + "repos" + File.separator + "server" + File.separator + "server_axis2.xml";
-
-
- ConfigurationContext configContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem(repoPath,axis2_xml);
-
String serverPortStr = getTestProperty("test.server.port");
if (serverPortStr!=null) {
@@ -62,6 +66,15 @@
}
}
+ }
+
+ private void startServer() throws AxisFault {
+
+ String repoPath = "target" + File.separator + "repos" + File.separator + "server";
+ String axis2_xml = "target" + File.separator + "repos" + File.separator + "server" + File.separator + "server_axis2.xml";
+
+
+ ConfigurationContext configContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem(repoPath,axis2_xml);
httpServer = new SimpleHTTPServer (configContext,serverPort);
httpServer.start();
try {
@@ -69,6 +82,7 @@
} catch (InterruptedException e) {
throw new SandeshaException ("sleep interupted");
}
+
}
public void tearDown () throws SandeshaException {
@@ -84,6 +98,8 @@
public void testCreateSequenceWithOffer () throws AxisFault,InterruptedException {
+ startServer();
+
String to = "http://127.0.0.1:" + serverPort + "/axis2/services/RMSampleService";
String transportTo = "http://127.0.0.1:" + serverPort + "/axis2/services/RMSampleService";
@@ -95,7 +111,7 @@
Options clientOptions = new Options ();
clientOptions.setTo(new EndpointReference (to));
- clientOptions.setProperty(MessageContextConstants.TRANSPORT_URL,transportTo);
+ clientOptions.setProperty(Configuration.TRANSPORT_URL,transportTo);
String sequenceKey = SandeshaUtil.getUUID();
clientOptions.setProperty(SandeshaClientConstants.SEQUENCE_KEY,sequenceKey);
@@ -156,5 +172,75 @@
//
// }
+ /**
+ * Tests that the last error and timestamp are set for the simple case of the target service not being available
+ */
+ public void testLastErrorAndTimestamp() throws Exception
+ {
+ String to = "http://127.0.0.1:" + serverPort + "/axis2/services/RMSampleService";
+ String transportTo = "http://127.0.0.1:" + serverPort + "/axis2/services/RMSampleService";
+
+ String repoPath = "target" + File.separator + "repos" + File.separator + "client";
+ String axis2_xml = "target" + File.separator + "repos" + File.separator + "client" + File.separator + "client_axis2.xml";
+
+ ConfigurationContext configContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem(repoPath,axis2_xml);
+
+ //clientOptions.setSoapVersionURI(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
+ Options clientOptions = new Options ();
+ clientOptions.setSoapVersionURI(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
+
+ clientOptions.setTo(new EndpointReference (to));
+ clientOptions.setProperty(Configuration.TRANSPORT_URL,transportTo);
+
+ String sequenceKey = "sequence1";
+ clientOptions.setProperty(SandeshaClientConstants.SEQUENCE_KEY,sequenceKey);
+
+ ServiceClient serviceClient = new ServiceClient (configContext,null);
+
+ serviceClient.setOptions(clientOptions);
+
+ serviceClient.fireAndForget(getPingOMBlock("ping1"));
+
+ //starting the server after a wait
+ Thread.sleep(10000);
+
+ // Check that the last error and last error time stamp have been set
+ String lastSendError = SandeshaClient.getLastSendError(serviceClient);
+ long lastSendErrorTime = SandeshaClient.getLastSendErrorTimestamp(serviceClient);
+
+ // Check the values are valid
+ assertNotNull(lastSendError);
+ assertTrue(lastSendErrorTime > -1);
+
+ startServer();
+
+ clientOptions.setProperty(SandeshaClientConstants.LAST_MESSAGE, "true");
+ serviceClient.fireAndForget(getPingOMBlock("ping2"));
+
+
+ Thread.sleep(10000);
+
+ SequenceReport sequenceReport = SandeshaClient.getOutgoingSequenceReport(serviceClient);
+ assertTrue(sequenceReport.getCompletedMessages().contains(new Long(1)));
+ assertTrue(sequenceReport.getCompletedMessages().contains(new Long(2)));
+ assertEquals(sequenceReport.getSequenceStatus(),SequenceReport.SEQUENCE_STATUS_TERMINATED);
+ assertEquals(sequenceReport.getSequenceDirection(),SequenceReport.SEQUENCE_DIRECTION_OUT);
+
+ configContext.getListenerManager().stop();
+ serviceClient.cleanup();
+ }
+
+ private OMElement getPingOMBlock(String text) {
+ OMFactory fac = OMAbstractFactory.getOMFactory();
+ OMNamespace namespace = fac.createOMNamespace(applicationNamespaceName,"ns1");
+ OMElement pingElem = fac.createOMElement(ping, namespace);
+ OMElement textElem = fac.createOMElement(Text, namespace);
+
+ textElem.setText(text);
+ pingElem.addChild(textElem);
+
+ return pingElem;
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org