Author: wjaniszewski
Date: Fri Mar 6 21:57:58 2009
New Revision: 751092
URL: http://svn.apache.org/viewvc?rev=751092&view=rev
Log:
Service RPC updated by allowing to have more than one SCA-Erlang module on
single SCA-Erlang node
Added:
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ErlangNode.java
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ServiceTestComponentImplClone.java
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/resources/ErlangServiceModuleDuplicate.composite
Removed:
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/RpcServer.java
Modified:
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ErlangBindingProviderFactory.java
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ErlangServiceBindingProvider.java
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/RpcExecutor.java
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/exceptions/ErlangException.java
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ReferenceServiceTestCase.java
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ReferenceTestComponentImpl.java
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/resources/ErlangReference.composite
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/resources/ErlangService.composite
Modified:
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ErlangBindingProviderFactory.java
URL:
http://svn.apache.org/viewvc/tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ErlangBindingProviderFactory.java?rev=751092&r1=751091&r2=751092&view=diff
==============================================================================
---
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ErlangBindingProviderFactory.java
(original)
+++
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ErlangBindingProviderFactory.java
Fri Mar 6 21:57:58 2009
@@ -19,6 +19,9 @@
package org.apache.tuscany.sca.binding.erlang.impl;
+import java.util.HashMap;
+import java.util.Map;
+
import org.apache.tuscany.sca.binding.erlang.ErlangBinding;
import org.apache.tuscany.sca.core.ExtensionPointRegistry;
import org.apache.tuscany.sca.provider.BindingProviderFactory;
@@ -31,34 +34,61 @@
/**
* @version $Rev: $ $Date: $
*/
-public class ErlangBindingProviderFactory implements
BindingProviderFactory<ErlangBinding> {
-
- public ErlangBindingProviderFactory(ExtensionPointRegistry registry) {
-
- }
- /**
- * @see
org.apache.tuscany.sca.provider.BindingProviderFactory#createReferenceBindingProvider(org.apache.tuscany.sca.runtime.RuntimeComponent,
org.apache.tuscany.sca.runtime.RuntimeComponentReference,
org.apache.tuscany.sca.assembly.Binding)
- */
- public ReferenceBindingProvider
createReferenceBindingProvider(RuntimeComponent component,
-
RuntimeComponentReference reference,
-
ErlangBinding binding) {
- return new ErlangReferenceBindingProvider(binding, reference);
- }
-
- /**
- * @see
org.apache.tuscany.sca.provider.BindingProviderFactory#createServiceBindingProvider(org.apache.tuscany.sca.runtime.RuntimeComponent,
org.apache.tuscany.sca.runtime.RuntimeComponentService,
org.apache.tuscany.sca.assembly.Binding)
- */
- public ServiceBindingProvider
createServiceBindingProvider(RuntimeComponent component,
-
RuntimeComponentService service,
- ErlangBinding
binding) {
- return new ErlangServiceBindingProvider(binding, service);
- }
-
- /**
- * @see org.apache.tuscany.sca.provider.ProviderFactory#getModelType()
- */
- public Class<ErlangBinding> getModelType() {
- return ErlangBinding.class;
- }
+public class ErlangBindingProviderFactory implements
+ BindingProviderFactory<ErlangBinding> {
+
+ private Map<String, ErlangNode> nodes = new HashMap<String,
ErlangNode>();
+
+ public ErlangBindingProviderFactory(ExtensionPointRegistry registry) {
+
+ }
+
+ /**
+ * @see
org.apache.tuscany.sca.provider.BindingProviderFactory#createReferenceBindingProvider(org.apache.tuscany.sca.runtime.RuntimeComponent,
+ * org.apache.tuscany.sca.runtime.RuntimeComponentReference,
+ * org.apache.tuscany.sca.assembly.Binding)
+ */
+ public ReferenceBindingProvider createReferenceBindingProvider(
+ RuntimeComponent component, RuntimeComponentReference
reference,
+ ErlangBinding binding) {
+ return new ErlangReferenceBindingProvider(binding, reference);
+ }
+
+ /**
+ * @see
org.apache.tuscany.sca.provider.BindingProviderFactory#createServiceBindingProvider(org.apache.tuscany.sca.runtime.RuntimeComponent,
+ * org.apache.tuscany.sca.runtime.RuntimeComponentService,
+ * org.apache.tuscany.sca.assembly.Binding)
+ */
+ public ServiceBindingProvider createServiceBindingProvider(
+ RuntimeComponent component, RuntimeComponentService
service,
+ ErlangBinding binding) {
+ ServiceBindingProvider provider = null;
+ try {
+ provider = new
ErlangServiceBindingProvider(getErlangNode(binding
+ .getNode()), binding, service);
+ } catch (Exception e) {
+ // TODO: log, throw, do something with this error
+ e.printStackTrace();
+ }
+ return provider;
+ }
+
+ /**
+ * @see org.apache.tuscany.sca.provider.ProviderFactory#getModelType()
+ */
+ public Class<ErlangBinding> getModelType() {
+ return ErlangBinding.class;
+ }
+
+ private ErlangNode getErlangNode(String name) throws Exception {
+ ErlangNode result = null;
+ if (nodes.containsKey(name)) {
+ result = nodes.get(name);
+ } else {
+ result = new ErlangNode(name);
+ nodes.put(name, result);
+ }
+ return result;
+ }
}
Added:
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ErlangNode.java
URL:
http://svn.apache.org/viewvc/tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ErlangNode.java?rev=751092&view=auto
==============================================================================
---
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ErlangNode.java
(added)
+++
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ErlangNode.java
Fri Mar 6 21:57:58 2009
@@ -0,0 +1,83 @@
+package org.apache.tuscany.sca.binding.erlang.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import org.apache.tuscany.sca.binding.erlang.ErlangBinding;
+import org.apache.tuscany.sca.binding.erlang.impl.exceptions.ErlangException;
+import org.apache.tuscany.sca.runtime.RuntimeComponentService;
+
+import com.ericsson.otp.erlang.OtpConnection;
+import com.ericsson.otp.erlang.OtpSelf;
+
+public class ErlangNode implements Runnable {
+
+ private Map<String, RuntimeComponentService> services = new
HashMap<String, RuntimeComponentService>();
+ private Map<String, ErlangBinding> bindings = new HashMap<String,
ErlangBinding>();
+ private String name;
+ private OtpSelf self;
+ private ExecutorService executors;
+ private boolean stopRequested;
+
+ public ErlangNode(String name) throws Exception {
+ this.name = name;
+ self = new OtpSelf(name);
+ boolean registered = self.publishPort();
+ if (!registered) {
+ // TODO: externalize messages?
+ throw new ErlangException(
+ "Problem with publishing service under
epmd server.");
+ }
+ }
+
+ private void stop() {
+ stopRequested = true;
+ executors.shutdownNow();
+ }
+
+ public void run() {
+ executors = Executors.newFixedThreadPool(10);
+ while (!stopRequested) {
+ try {
+ OtpConnection connection = self.accept();
+ executors.execute(new RpcExecutor(services,
bindings,
+ connection));
+ } catch (Exception e) {
+ // TODO: handle exception
+ e.printStackTrace();
+ }
+ }
+ }
+
+ public void registerModule(ErlangBinding binding,
+ RuntimeComponentService service) throws ErlangException
{
+ if (services.containsKey(binding.getModule())) {
+ // TODO: externalize message
+ // TODO: really want to throw exception? Log only?
+ throw new ErlangException("Module " +
binding.getModule()
+ + " already defined under " + name
+ + " node. Duplicate module won't be
started");
+ } else {
+ if (services.size() == 0) {
+ // TODO: should ErlangNode manage its thread?
+ Thread selfThread = new Thread(this);
+ selfThread.start();
+ }
+ services.put(binding.getModule(), service);
+ bindings.put(binding.getModule(), binding);
+ }
+ }
+
+ public void unregisterModule(ErlangBinding binding) throws
ErlangException {
+ if (services.containsKey(binding.getModule())) {
+ services.remove(binding.getModule());
+ bindings.remove(binding.getModule());
+ if (services.size() == 0) {
+ stop();
+ }
+ }
+ }
+
+}
Modified:
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ErlangServiceBindingProvider.java
URL:
http://svn.apache.org/viewvc/tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ErlangServiceBindingProvider.java?rev=751092&r1=751091&r2=751092&view=diff
==============================================================================
---
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ErlangServiceBindingProvider.java
(original)
+++
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/ErlangServiceBindingProvider.java
Fri Mar 6 21:57:58 2009
@@ -31,12 +31,13 @@
public class ErlangServiceBindingProvider implements ServiceBindingProvider {
private RuntimeComponentService service;
+ private ErlangNode node;
private ErlangBinding binding;
- private RpcServer rpcServer;
- public ErlangServiceBindingProvider(ErlangBinding binding,
RuntimeComponentService service) {
+ public ErlangServiceBindingProvider(ErlangNode node, ErlangBinding
binding, RuntimeComponentService service) {
this.service = service;
this.binding = binding;
+ this.node = node;
}
/**
@@ -51,9 +52,7 @@
*/
public void start() {
try {
- rpcServer = new RpcServer(service, binding);
- Thread thread = new Thread(rpcServer);
- thread.start();
+ node.registerModule(binding, service);
} catch (Exception e) {
throw new ServiceRuntimeException(e);
}
@@ -65,7 +64,7 @@
*/
public void stop() {
try {
- rpcServer.stop();
+ node.unregisterModule(binding);
} catch (Exception e) {
throw new ServiceRuntimeException(e);
}
Modified:
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/RpcExecutor.java
URL:
http://svn.apache.org/viewvc/tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/RpcExecutor.java?rev=751092&r1=751091&r2=751092&view=diff
==============================================================================
---
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/RpcExecutor.java
(original)
+++
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/RpcExecutor.java
Fri Mar 6 21:57:58 2009
@@ -22,6 +22,7 @@
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
+import java.util.Map;
import org.apache.tuscany.sca.binding.erlang.ErlangBinding;
import org.apache.tuscany.sca.binding.erlang.impl.types.TypeHelpersProxy;
@@ -40,18 +41,18 @@
public class RpcExecutor implements Runnable {
- private RuntimeComponentService service;
- private ErlangBinding binding;
+ private Map<String, RuntimeComponentService> services;
+ private Map<String, ErlangBinding> bindings;
private OtpConnection connection;
private static final OtpErlangAtom OK = new OtpErlangAtom("ok");
private static final OtpErlangAtom ERROR = new OtpErlangAtom("error");
private static final OtpErlangAtom BADRPC = new OtpErlangAtom("badrpc");
- public RpcExecutor(RuntimeComponentService service, ErlangBinding
binding,
+ public RpcExecutor(Map<String, RuntimeComponentService> services,
Map<String, ErlangBinding> bindings,
OtpConnection connection) {
- this.service = service;
- this.binding = binding;
+ this.bindings = bindings;
+ this.services = services;
this.connection = connection;
}
@@ -85,13 +86,15 @@
} else {
argsList = new OtpErlangList(args);
}
- if (!binding.getModule().equals(module)) {
+ if (!services.containsKey(module)) {
// TODO: externalize message?
OtpErlangObject errorMsg =
MessageHelper.functionUndefMessage(
module, function, argsList,
"Module not found in SCA
component.");
sendMessage(connection, senderPid, senderRef,
BADRPC, errorMsg);
} else {
+ RuntimeComponentService service =
services.get(module);
+ ErlangBinding binding = bindings.get(module);
List<Operation> operations =
service.getInterfaceContract()
.getInterface().getOperations();
Operation operation = null;
Modified:
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/exceptions/ErlangException.java
URL:
http://svn.apache.org/viewvc/tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/exceptions/ErlangException.java?rev=751092&r1=751091&r2=751092&view=diff
==============================================================================
---
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/exceptions/ErlangException.java
(original)
+++
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/exceptions/ErlangException.java
Fri Mar 6 21:57:58 2009
@@ -2,8 +2,14 @@
public class ErlangException extends Exception {
+ private static final long serialVersionUID = 1L;
+
public ErlangException(String message) {
super(message);
}
+ public ErlangException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
}
Modified:
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ReferenceServiceTestCase.java
URL:
http://svn.apache.org/viewvc/tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ReferenceServiceTestCase.java?rev=751092&r1=751091&r2=751092&view=diff
==============================================================================
---
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ReferenceServiceTestCase.java
(original)
+++
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ReferenceServiceTestCase.java
Fri Mar 6 21:57:58 2009
@@ -33,6 +33,7 @@
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.osoa.sca.ServiceRuntimeException;
import com.ericsson.otp.erlang.OtpErlangAtom;
import com.ericsson.otp.erlang.OtpErlangDouble;
@@ -43,6 +44,7 @@
import com.ericsson.otp.erlang.OtpMbox;
import com.ericsson.otp.erlang.OtpNode;
+//this test runner will ignore tests if epmd is not available
@RunWith(IgnorableRunner.class)
public class ReferenceServiceTestCase {
@@ -50,6 +52,7 @@
private static MboxInterface mboxReference;
private static ServiceInterface moduleReference;
+ private static ServiceInterface clonedModuleReference;
private static OtpNode node;
private static OtpMbox mbox;
private static Process epmdProcess;
@@ -65,6 +68,7 @@
ReferenceTestComponentImpl.class,
"ReferenceTest");
mboxReference = component.getMboxReference();
moduleReference = component.getModuleReference();
+ clonedModuleReference =
component.getClonedModuleReference();
node = new OtpNode("MboxServer");
mbox = node.createMbox("sendArgs");
} catch (IOException e) {
@@ -87,6 +91,11 @@
}
}
+ /**
+ * Tests passing strings
+ *
+ * @throws Exception
+ */
@Test(timeout = 1000)
public void testStrings() throws Exception {
String strArg = "Test message";
@@ -100,6 +109,11 @@
assertEquals(strResult, testResult);
}
+ /**
+ * Tests passing booleans
+ *
+ * @throws Exception
+ */
@Test(timeout = 1000)
public void testBooleans() throws Exception {
boolean booleanArg = true;
@@ -113,6 +127,11 @@
assertEquals(booleanResult, testResult);
}
+ /**
+ * Tests passing floats
+ *
+ * @throws Exception
+ */
@Test(timeout = 1000)
public void testFloats() throws Exception {
float floatArg = 1.0f;
@@ -126,6 +145,11 @@
assertEquals(floatResult, testResult, 0);
}
+ /**
+ * Tests passing doubles
+ *
+ * @throws Exception
+ */
@Test(timeout = 1000)
public void testDoubles() throws Exception {
double doubleArg = 1.0f;
@@ -139,6 +163,11 @@
assertEquals(doubleResult, testResult, 0);
}
+ /**
+ * Tests passing long values
+ *
+ * @throws Exception
+ */
@Test(timeout = 1000)
public void testLongs() throws Exception {
long longArg = 1;
@@ -152,6 +181,11 @@
assertEquals(longResult, testResult, 0);
}
+ /**
+ * Tests passing integers
+ *
+ * @throws Exception
+ */
@Test(timeout = 1000)
public void testInts() throws Exception {
int intArg = 1;
@@ -165,6 +199,11 @@
assertEquals(intResult, testResult, 0);
}
+ /**
+ * Tests passing chars
+ *
+ * @throws Exception
+ */
@Test(timeout = 1000)
public void testChars() throws Exception {
char charArg = 1;
@@ -178,6 +217,11 @@
assertEquals(charResult, testResult, 0);
}
+ /**
+ * Tests passing shorts
+ *
+ * @throws Exception
+ */
@Test(timeout = 1000)
public void testShorts() throws Exception {
short shortArg = 1;
@@ -191,6 +235,11 @@
assertEquals(shortResult, testResult, 0);
}
+ /**
+ * Tests passing bytes
+ *
+ * @throws Exception
+ */
@Test(timeout = 1000)
public void testBytes() throws Exception {
byte byteArg = 1;
@@ -204,6 +253,11 @@
assertEquals(byteResult, testResult, 0);
}
+ /**
+ * Tests passing multiple arguments
+ *
+ * @throws Exception
+ */
@Test(timeout = 1000)
public void testMultipleArguments() throws Exception {
MboxListener mboxListener = new MboxListener(mbox, true);
@@ -219,6 +273,11 @@
.getMsg()).elementAt(1)).stringValue());
}
+ /**
+ * Tests passing tuples
+ *
+ * @throws Exception
+ */
@Test(timeout = 1000)
public void testTuples() throws Exception {
StructuredTuple tupleResult = new StructuredTuple();
@@ -250,6 +309,11 @@
.booleanValue());
}
+ /**
+ * Tests passing lists
+ *
+ * @throws Exception
+ */
@Test(timeout = 1000)
public void testLists() throws Exception {
String[] testArg = new String[] { "One", "Two", "Three" };
@@ -269,6 +333,11 @@
}
}
+ /**
+ * Tests passing multidimensional lists
+ *
+ * @throws Exception
+ */
@Test(timeout = 1000)
public void testMultiDimLists() throws Exception {
String[][] testArg = new String[][] { { "One", "Two" },
@@ -294,6 +363,11 @@
}
}
+ /**
+ * Tests mismatched interface
+ *
+ * @throws Exception
+ */
@Test(timeout = 1000)
public void typeMismatch() throws Exception {
try {
@@ -418,6 +492,11 @@
}
}
+ /**
+ * Basic RPC test, without arguments
+ *
+ * @throws Exception
+ */
@Test(timeout = 1000)
public void testRPC() throws Exception {
String[] result = moduleReference.sayHellos();
@@ -426,6 +505,11 @@
assertEquals("2", result[1]);
}
+ /**
+ * Tests RPC with arguments
+ *
+ * @throws Exception
+ */
@Test(timeout = 1000)
public void testRPCWithArgs() throws Exception {
String arg1 = "One";
@@ -434,6 +518,11 @@
assertEquals("Hello " + arg1 + " " + arg2, testResult);
}
+ /**
+ * Tests RPC with structured arguments
+ *
+ * @throws Exception
+ */
@Test(timeout = 1000)
public void testRPCWithComplexArgs() throws Exception {
StructuredTuple arg = new StructuredTuple();
@@ -443,34 +532,39 @@
new String[] { "some", "array" });
assertEquals(arg, testResult);
}
-
+
+ /**
+ * Tests handling requests pointing to unknown functions
+ *
+ * @throws Exception
+ */
@Test(timeout = 1000)
public void testUnknownFunction() throws Exception {
-
- //following functions differs by parameters
-
+
+ // following functions differs by parameters
+
try {
moduleReference.sayHello();
} catch (Exception e) {
assertEquals(ErlangException.class, e.getClass());
}
-
+
try {
moduleReference.sayHello("1");
} catch (Exception e) {
assertEquals(ErlangException.class, e.getClass());
}
-
+
try {
moduleReference.sayHello(1, 2);
} catch (Exception e) {
assertEquals(ErlangException.class, e.getClass());
}
-
- //for following ones name not exists
-
+
+ // for following ones name not exists
+
moduleReference.notExist();
-
+
try {
moduleReference.notExistWithException();
} catch (Exception e) {
@@ -478,4 +572,35 @@
}
}
+ /**
+ * Tests using multiple Erlang modules on one SCA Erlang node
+ *
+ * @throws Exception
+ */
+ @Test(timeout = 1000)
+ public void testMultipleModulesOnNode() throws Exception {
+ String[] mr = moduleReference.sayHellos();
+ String[] cmr = clonedModuleReference.sayHellos();
+ assertEquals("1", mr[0]);
+ assertEquals("2", mr[1]);
+
+ assertEquals("-1", cmr[0]);
+ assertEquals("-2", cmr[1]);
+ }
+
+ /**
+ * Tests nodes with duplcated components (the same node and module
+ * parameters)
+ *
+ * @throws Exception
+ */
+ @Test(timeout = 1000)
+ public void testModuleDuplicatedOnNode() throws Exception {
+ try {
+
SCADomain.newInstance("ErlangServiceModuleDuplicate.composite");
+ } catch (ServiceRuntimeException e) {
+ assertEquals(ErlangException.class,
e.getCause().getClass());
+ }
+ }
+
}
Modified:
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ReferenceTestComponentImpl.java
URL:
http://svn.apache.org/viewvc/tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ReferenceTestComponentImpl.java?rev=751092&r1=751091&r2=751092&view=diff
==============================================================================
---
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ReferenceTestComponentImpl.java
(original)
+++
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ReferenceTestComponentImpl.java
Fri Mar 6 21:57:58 2009
@@ -6,6 +6,7 @@
private MboxInterface mboxReference;
private ServiceInterface moduleReference;
+ private ServiceInterface clonedModuleReference;
@Reference
public void setMboxReference(MboxInterface mboxReference) {
@@ -16,6 +17,11 @@
public void setModuleReference(ServiceInterface moduleReference) {
this.moduleReference = moduleReference;
}
+
+ @Reference
+ public void setClonedModuleReference(ServiceInterface
clonedModuleReference) {
+ this.clonedModuleReference = clonedModuleReference;
+ }
public MboxInterface getMboxReference() {
return mboxReference;
@@ -24,5 +30,9 @@
public ServiceInterface getModuleReference() {
return moduleReference;
}
+
+ public ServiceInterface getClonedModuleReference() {
+ return clonedModuleReference;
+ }
}
Added:
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ServiceTestComponentImplClone.java
URL:
http://svn.apache.org/viewvc/tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ServiceTestComponentImplClone.java?rev=751092&view=auto
==============================================================================
---
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ServiceTestComponentImplClone.java
(added)
+++
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/java/org/apache/tuscany/sca/binding/erlang/testing/ServiceTestComponentImplClone.java
Fri Mar 6 21:57:58 2009
@@ -0,0 +1,19 @@
+package org.apache.tuscany.sca.binding.erlang.testing;
+
+
+public class ServiceTestComponentImplClone implements ServiceTestComponent {
+
+ public String sayHello(String arg1, String arg2) {
+ return "Bye " + arg1 + " " + arg2;
+ }
+
+ public String[] sayHellos() {
+ String[] result = new String[] {"-1", "-2"};
+ return result;
+ }
+
+ public StructuredTuple passComplexArgs(StructuredTuple arg1, String[]
arg2) {
+ return arg1;
+ }
+
+}
Modified:
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/resources/ErlangReference.composite
URL:
http://svn.apache.org/viewvc/tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/resources/ErlangReference.composite?rev=751092&r1=751091&r2=751092&view=diff
==============================================================================
---
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/resources/ErlangReference.composite
(original)
+++
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/resources/ErlangReference.composite
Fri Mar 6 21:57:58 2009
@@ -13,6 +13,10 @@
<reference name="moduleReference">
<tuscany:binding.erlang node="RPCServer" module="hello"/>
</reference>
+
+ <reference name="clonedModuleReference">
+ <tuscany:binding.erlang node="RPCServer" module="hello_clone"/>
+ </reference>
</component>
</composite>
\ No newline at end of file
Modified:
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/resources/ErlangService.composite
URL:
http://svn.apache.org/viewvc/tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/resources/ErlangService.composite?rev=751092&r1=751091&r2=751092&view=diff
==============================================================================
---
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/resources/ErlangService.composite
(original)
+++
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/resources/ErlangService.composite
Fri Mar 6 21:57:58 2009
@@ -11,5 +11,13 @@
<interface.java
interface="org.apache.tuscany.sca.binding.erlang.testing.ServiceTestComponent"
/>
<tuscany:binding.erlang node="RPCServer" module="hello"/>
</service>
+
+ <component name="ServiceTestClone">
+ <implementation.java
class="org.apache.tuscany.sca.binding.erlang.testing.ServiceTestComponentImplClone"
/>
+ </component>
+ <service name="ServiceTestClone" promote="ServiceTestClone">
+ <interface.java
interface="org.apache.tuscany.sca.binding.erlang.testing.ServiceTestComponent"
/>
+ <tuscany:binding.erlang node="RPCServer" module="hello_clone"/>
+ </service>
</composite>
\ No newline at end of file
Added:
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/resources/ErlangServiceModuleDuplicate.composite
URL:
http://svn.apache.org/viewvc/tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/resources/ErlangServiceModuleDuplicate.composite?rev=751092&view=auto
==============================================================================
---
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/resources/ErlangServiceModuleDuplicate.composite
(added)
+++
tuscany/sandbox/wjaniszewski/binding-erlang-runtime/src/test/resources/ErlangServiceModuleDuplicate.composite
Fri Mar 6 21:57:58 2009
@@ -0,0 +1,23 @@
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0"
+ targetNamespace="http://sample"
+ xmlns:sample="http://sample"
+ name="ErlangServiceBinding">
+
+ <component name="ServiceTest">
+ <implementation.java
class="org.apache.tuscany.sca.binding.erlang.testing.ServiceTestComponentImpl"
/>
+ </component>
+ <service name="ServiceTest" promote="ServiceTest">
+ <interface.java
interface="org.apache.tuscany.sca.binding.erlang.testing.ServiceTestComponent"
/>
+ <tuscany:binding.erlang node="DuplicateTest" module="hello"/>
+ </service>
+
+ <component name="ServiceTestClone">
+ <implementation.java
class="org.apache.tuscany.sca.binding.erlang.testing.ServiceTestComponentImplClone"
/>
+ </component>
+ <service name="ServiceTestClone" promote="ServiceTestClone">
+ <interface.java
interface="org.apache.tuscany.sca.binding.erlang.testing.ServiceTestComponent"
/>
+ <tuscany:binding.erlang node="DuplicateTest" module="hello"/>
+ </service>
+
+</composite>
\ No newline at end of file