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/18 17:48:01 UTC

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

Author: wjaniszewski
Date: Sat Apr 18 15:48:01 2009
New Revision: 766345

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

Modified:
    tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ErlangInvoker.java
    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/main/java/org/apache/tuscany/sca/binding/erlang/impl/types/TypeHelpersProxy.java
    tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/MboxInterface.java
    tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ReferenceServiceTestCase.java
    tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ServiceInterface.java
    tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ServiceTestComponent.java
    tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ServiceTestComponentImpl.java
    tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ServiceTestComponentImplClone.java
    tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ServiceTestComponentImplTimeout.java

Modified: tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ErlangInvoker.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/ErlangInvoker.java?rev=766345&r1=766344&r2=766345&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ErlangInvoker.java (original)
+++ tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ErlangInvoker.java Sat Apr 18 15:48:01 2009
@@ -62,6 +62,7 @@
 		} else {
 			// NOTE: don't throw exception if not declared
 			// TODO: externalize message?
+			msg.setBody(null);
 			logger
 					.log(Level.WARNING, "Problem while sending/receiving data",
 							e);
@@ -82,7 +83,11 @@
 				node.setCookie(binding.getCookie());
 			}
 			tmpMbox = node.createMbox();
-			Object[] args = msg.getBody();
+			// obtain args, make sure they aren't null
+			// NOTE: sending message with no content (but only with senders PID)
+			// is possible
+			Object[] args = (Object[]) (msg.getBody() != null ? msg.getBody()
+					: new Object[0]);
 			Method jmethod = ((JavaOperation) msg.getOperation())
 					.getJavaMethod();
 			// create and send msg with self pid in the beginning

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=766345&r1=766344&r2=766345&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 Sat Apr 18 15:48:01 2009
@@ -152,10 +152,8 @@
 								&& operation.getOutputType().getPhysical()
 										.isArray()) {
 							// output type is array
-							Annotation[][] outNotes = new Annotation[][] { jmethod
-									.getAnnotations() };
-							response = TypeHelpersProxy.toErlangAsList(result,
-									outNotes);
+							response = TypeHelpersProxy.toErlangAsResultList(
+									result, jmethod.getAnnotations());
 						} else if (operation.getOutputType() == null) {
 							// output type is void, create empty reply
 							Object[] arrArg = new Object[] {};
@@ -248,8 +246,7 @@
 				msgNoSender = msg.getMsg();
 			}
 		} catch (Exception e) {
-			// TODO: check when this exception can occur
-			e.printStackTrace();
+			logger.log(Level.WARNING, "Unexpected error", e);
 		}
 
 		if (operations == null) {
@@ -294,10 +291,8 @@
 							&& matchedOperation.getOutputType().getPhysical()
 									.isArray()) {
 						// result type is array
-						Annotation[][] outNotes = new Annotation[][] { jmethod
-								.getAnnotations() };
-						response = TypeHelpersProxy.toErlangAsList(result,
-								outNotes);
+						response = TypeHelpersProxy.toErlangAsResultList(
+								result, jmethod.getAnnotations());
 					} else if (matchedOperation.getOutputType() != null) {
 						// result type is not array and not void
 						response = TypeHelpersProxy.toErlang(result, jmethod
@@ -330,13 +325,10 @@
 							e1.printStackTrace();
 						}
 					} else {
-						// unknown/unhandled error
-						// TODO: decide what to do with this exception
-						e.printStackTrace();
+						logger.log(Level.WARNING, "Unexpected error", e);
 					}
 				} catch (Exception e) {
-					// FIXME: log this problem? use linking feature? send error?
-					e.printStackTrace();
+					logger.log(Level.WARNING, "Unexpected error", e);
 				}
 			} else {
 				// TODO: externalize message?

Modified: tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/types/TypeHelpersProxy.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/types/TypeHelpersProxy.java?rev=766345&r1=766344&r2=766345&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/types/TypeHelpersProxy.java (original)
+++ tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/types/TypeHelpersProxy.java Sat Apr 18 15:48:01 2009
@@ -72,13 +72,23 @@
 		for (int i = 0; i < notes.length; i++) {
 			typeHelper = primitiveTypes.get(notes[i].annotationType());
 			if (typeHelper != null) {
-				// annotation found, check if it points to array
-				// FIXME: check if annotation points to proper type
-				// ie. ErlangAtom -> String. If not, then log? exception?
-				if (forClass.isArray()) {
-					typeHelper = new AnnotatedListTypeHelper(notes);
+				// get type which is annotated, reduce array if needed
+				Class<?> annotatedType = forClass;
+				while (annotatedType.isArray()) {
+					annotatedType = annotatedType.getComponentType();
+				}
+				if (notes[i].annotationType().equals(ErlangAtom.class)
+						&& !annotatedType.equals(String.class)) {
+					// NOTE: @ErlangAtom atom will be ignored if not annotates
+					// string
+					typeHelper = null;
+				} else {
+					// check if annotation points to array
+					if (forClass.isArray()) {
+						typeHelper = new AnnotatedListTypeHelper(notes);
+					}
+					break;
 				}
-				break;
 			}
 		}
 		// check for standard types
@@ -145,24 +155,42 @@
 	 * Creates Erlang list basing on unknown Java arrays
 	 * 
 	 * @param array
+	 * @param notes
 	 * @return
 	 */
 	public static OtpErlangList toErlangAsList(Object array,
 			Annotation[][] notes) {
+		return toErlangAsList(array, notes, false);
+	}
+
+	/**
+	 * Creates Erlang list of result elements
+	 * 
+	 * @param array
+	 * @param notes
+	 * @return
+	 */
+	public static OtpErlangList toErlangAsResultList(Object array,
+			Annotation[] notes) {
+		return toErlangAsList(array, new Annotation[][] { notes }, true);
+	}
+
+	/**
+	 * 
+	 * @param array
+	 * @param notes
+	 * @param isArray
+	 * @return
+	 */
+	private static OtpErlangList toErlangAsList(Object array,
+			Annotation[][] notes, boolean isArray) {
 		OtpErlangList result = null;
 		if (array != null) {
 			List<OtpErlangObject> attrsList = new ArrayList<OtpErlangObject>();
 			int i = 0;
 			while (true) {
 				try {
-					// FIXME: if notes.length == 1 then its used to annotate
-					// array. Clean up.
-					Annotation[] currNotes = null;
-					if (notes.length == 1) {
-						currNotes = notes[0];
-					} else {
-						currNotes = notes[i];
-					}
+					Annotation[] currNotes = isArray ? notes[0] : notes[i];
 					TypeHelper helper = getTypeHelper(Array.get(array, i)
 							.getClass(), currNotes);
 					attrsList.add(helper.toErlang(Array.get(array, i)));

Modified: tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/MboxInterface.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/MboxInterface.java?rev=766345&r1=766344&r2=766345&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/MboxInterface.java (original)
+++ tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/MboxInterface.java Sat Apr 18 15:48:01 2009
@@ -60,6 +60,6 @@
 	@ErlangAtom
 	String[][] sendArgs(@ErlangAtom String[][] arg1, int arg2);
 
-	void sendArgs();
+	void sendArgs() throws Exception;
 
 }

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=766345&r1=766344&r2=766345&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 Sat Apr 18 15:48:01 2009
@@ -32,7 +32,6 @@
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -464,6 +463,30 @@
 	}
 
 	/**
+	 * Tests Erlang Atom types on service side
+	 * 
+	 * @throws Exception
+	 */
+	@Test(timeout = 1000)
+	public void testServiceAtoms() throws Exception {
+		String[] args = { "Say", "Atoms" };
+		OtpErlangObject[] toList = new OtpErlangObject[2];
+		toList[0] = new OtpErlangString(args[0]);
+		toList[1] = new OtpErlangString(args[1]);
+		OtpErlangList list = new OtpErlangList(toList);
+		OtpErlangObject[] toTuple = new OtpErlangObject[2];
+		toTuple[0] = refMbox.self();
+		toTuple[1] = list;
+		refMbox.send("sayAtoms", "RPCServerMbox", new OtpErlangTuple(toTuple));
+		OtpErlangObject result = refMbox.receiveMsg().getMsg();
+		assertEquals(args.length, ((OtpErlangList) result).arity());
+		for (int i = 0; i < args.length; i++) {
+			assertEquals(args[i], ((OtpErlangAtom) ((OtpErlangList) result)
+					.elementAt(i)).atomValue());
+		}
+	}
+
+	/**
 	 * Tests mismatched interface
 	 * 
 	 * @throws Exception
@@ -886,12 +909,16 @@
 		cookieModuleReference.sayHellos();
 	}
 
+	/**
+	 * Tests fix which allow to send message with no user specified content (in
+	 * fact always will be some content - senders PID at the content beginning).
+	 * 
+	 * @throws Exception
+	 */
 	@Test(timeout = 1000)
-	@Ignore("Nothing to test yet")
 	public void testMboxNoArgs() throws Exception {
-		// FIXME: decide what to do while invoking mbox reference with no params
-		// exception? log?
 		mboxReference.sendArgs();
+		// no exception should occur
 	}
 
 }

Modified: tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ServiceInterface.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/ServiceInterface.java?rev=766345&r1=766344&r2=766345&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ServiceInterface.java (original)
+++ tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ServiceInterface.java Sat Apr 18 15:48:01 2009
@@ -41,5 +41,5 @@
 	void notExistWithException() throws Exception;
 
 	void notExist();
-	
+
 }

Modified: tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ServiceTestComponent.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/ServiceTestComponent.java?rev=766345&r1=766344&r2=766345&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ServiceTestComponent.java (original)
+++ tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ServiceTestComponent.java Sat Apr 18 15:48:01 2009
@@ -19,6 +19,8 @@
 
 package org.apache.tuscany.sca.binding.erlang.testing;
 
+import org.apache.tuscany.sca.binding.erlang.meta.ErlangAtom;
+
 /**
  * @version $Rev$ $Date$
  */
@@ -28,6 +30,9 @@
 
 	String[] sayHellos() throws Exception;
 
+	@ErlangAtom
+	String[] sayAtoms(@ErlangAtom String[] arg);
+
 	StructuredTuple passComplexArgs(StructuredTuple arg1, String[] arg2);
 
 	void doNothing();

Modified: tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ServiceTestComponentImpl.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/ServiceTestComponentImpl.java?rev=766345&r1=766344&r2=766345&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ServiceTestComponentImpl.java (original)
+++ tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ServiceTestComponentImpl.java Sat Apr 18 15:48:01 2009
@@ -41,4 +41,8 @@
 		// doing nothing
 	}
 
+	public String[] sayAtoms(String[] arg) {
+		return arg;
+	}
+
 }

Modified: tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ServiceTestComponentImplClone.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/ServiceTestComponentImplClone.java?rev=766345&r1=766344&r2=766345&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ServiceTestComponentImplClone.java (original)
+++ tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ServiceTestComponentImplClone.java Sat Apr 18 15:48:01 2009
@@ -41,4 +41,8 @@
 
 	}
 
+	public String[] sayAtoms(String[] arg) {
+		return arg;
+	}
+
 }

Modified: tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ServiceTestComponentImplTimeout.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/ServiceTestComponentImplTimeout.java?rev=766345&r1=766344&r2=766345&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ServiceTestComponentImplTimeout.java (original)
+++ tuscany/branches/sca-java-1.x/modules/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ServiceTestComponentImplTimeout.java Sat Apr 18 15:48:01 2009
@@ -25,7 +25,7 @@
 public class ServiceTestComponentImplTimeout implements ServiceTestComponent {
 
 	private long duration = 1000;
-	
+
 	public String sayHello(String arg1, String arg2) {
 		try {
 			Thread.sleep(duration);
@@ -58,4 +58,8 @@
 
 	}
 
+	public String[] sayAtoms(String[] arg) {
+		return arg;
+	}
+
 }