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();
-
        }
 
 }


Reply via email to