You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by wj...@apache.org on 2009/04/16 10:44:36 UTC

svn commit: r765512 - in /tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src: main/java/org/apache/tuscany/sca/binding/erlang/impl/ test/java/org/apache/tuscany/sca/binding/erlang/testing/

Author: wjaniszewski
Date: Thu Apr 16 08:44:36 2009
New Revision: 765512

URL: http://svn.apache.org/viewvc?rev=765512&view=rev
Log:
Messaging improvements

Modified:
    tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ServiceExecutor.java
    tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/MboxListener.java
    tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ReferenceServiceTestCase.java

Modified: tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ServiceExecutor.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ServiceExecutor.java?rev=765512&r1=765511&r2=765512&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ServiceExecutor.java (original)
+++ tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ServiceExecutor.java Thu Apr 16 08:44:36 2009
@@ -214,14 +214,17 @@
 			if (msg.getMsg().getClass().equals(OtpErlangTuple.class)
 					&& (((OtpErlangTuple) msg.getMsg()).elementAt(0))
 							.getClass().equals(OtpErlangPid.class)) {
+				// PID provided by client
 				senderPid = (OtpErlangPid) ((OtpErlangTuple) msg.getMsg())
 						.elementAt(0);
 				msgNoSender = ((OtpErlangTuple) msg.getMsg()).elementAt(1);
 			} else {
+				// PID obtained from jinterface
+				senderPid = msg.getSenderPid();
 				msgNoSender = msg.getMsg();
 			}
 		} catch (Exception e) {
-
+			e.printStackTrace();
 		}
 
 		if (operations == null) {
@@ -265,13 +268,32 @@
 					if (response != null && senderPid != null) {
 						connection.send(senderPid, response);
 					} else if (response != null && senderPid == null) {
-						// FIXME: cannot send reply - sender didn't provided
-						// pid. Use PID obtained by jinteface or log this error?
-						// connection.send(msg.getSenderPid(), response);
+						// TODO: externalize message?
+						// TODO: do we need to send this reply?
+						logger
+								.log(
+										Level.WARNING,
+										"Cannot send reply - Erlang client didn't provide it's PID and couldn't obtain sender PID from jinterface");
 					}
 				} catch (InvocationTargetException e) {
-					// FIXME: use linking feature? send some error?
-					e.printStackTrace();
+					if (e.getCause() != null
+							&& e.getCause().getClass().equals(
+									IllegalArgumentException.class)) {
+						// arguments number or type mismatch
+						try {
+							// TODO: externalize message?
+							connection
+									.send(
+											senderPid,
+											new OtpErlangString(
+													"Operation name found in SCA component, but parameters types didn't match."));
+						} catch (IOException e1) {
+							// TODO Auto-generated catch block
+							e1.printStackTrace();
+						}
+					} else {
+						e.printStackTrace();
+					}
 					// } catch (IOException e) {
 				} catch (Exception e) {
 					// FIXME: log this problem? use linking feature? send error?

Modified: tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/MboxListener.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/MboxListener.java?rev=765512&r1=765511&r2=765512&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/MboxListener.java (original)
+++ tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/MboxListener.java Thu Apr 16 08:44:36 2009
@@ -22,6 +22,7 @@
 import org.apache.tuscany.sca.binding.erlang.impl.types.TypeHelpersProxy;
 
 import com.ericsson.otp.erlang.OtpErlangObject;
+import com.ericsson.otp.erlang.OtpErlangPid;
 import com.ericsson.otp.erlang.OtpErlangTuple;
 import com.ericsson.otp.erlang.OtpMbox;
 import com.ericsson.otp.erlang.OtpMsg;
@@ -50,10 +51,16 @@
 		try {
 			msg = mbox.receiveMsg();
 			Thread.sleep(duration);
+			OtpErlangPid senderPid = null;
 			if (response != null) {
 				Object[] args = new Object[1];
 				args[0] = response;
-				mbox.send(msg.getSenderPid(), TypeHelpersProxy.toErlang(args));
+				if (msg.getMsg().getClass().equals(OtpErlangTuple.class) && ((OtpErlangTuple) msg.getMsg()).elementAt(0).getClass().equals(OtpErlangPid.class)) {
+					senderPid = (OtpErlangPid) ((OtpErlangTuple) msg.getMsg()).elementAt(0);
+				} else {
+					senderPid = msg.getSenderPid();
+				}
+				mbox.send(senderPid, TypeHelpersProxy.toErlang(args));
 			}
 		} catch (Exception e) {
 			e.printStackTrace();

Modified: tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ReferenceServiceTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ReferenceServiceTestCase.java?rev=765512&r1=765511&r2=765512&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ReferenceServiceTestCase.java (original)
+++ tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ReferenceServiceTestCase.java Thu Apr 16 08:44:36 2009
@@ -649,6 +649,21 @@
 				.getMsg();
 		assertEquals("Hello world !", result.stringValue());
 	}
+	
+	/**
+	 * Tests receiving reply without sending self PID
+	 * @throws Exception
+	 */
+	@Test(timeout = 1000)
+	public void testMsgWithoutPid() throws Exception {
+		OtpErlangObject[] args = new OtpErlangObject[2];
+		args[0] = new OtpErlangString("world");
+		args[1] = new OtpErlangString("!");
+		refMbox.send("sayHello", "RPCServerMbox", new OtpErlangTuple(args));
+		OtpErlangString result = (OtpErlangString) refMbox.receiveMsg()
+				.getMsg();
+		assertEquals("Hello world !", result.stringValue());
+	}
 
 	/**
 	 * Tests service mbox receiving complex message
@@ -814,7 +829,6 @@
 
 		// testing correct cookie
 		cookieModuleReference.sayHellos();
-
 	}
 
 }