Author: antelder
Date: Mon Mar 22 20:10:19 2010
New Revision: 926303
URL: http://svn.apache.org/viewvc?rev=926303&view=rev
Log:
Update hazelcast binding to use a seperate ExecutorService for each nested
invocation (ie a reference calling a service over binding.sca which invokes
another reference over binding.sca)
Modified:
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/ReferenceInvoker.java
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/test/java/org/apache/tuscany/sca/binding/hazelcast/HazelcastBindingTestCase.java
Modified:
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/ReferenceInvoker.java
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/ReferenceInvoker.java?rev=926303&r1=926302&r2=926303&view=diff
==============================================================================
---
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/ReferenceInvoker.java
(original)
+++
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/ReferenceInvoker.java
Mon Mar 22 20:10:19 2010
@@ -74,7 +74,7 @@ public class ReferenceInvoker implements
String requestXML = getRequestXML(msg);
Callable<String> callable = new ServiceInvoker(serviceURI,
operation.getName(), requestXML);
FutureTask<String> task = new DistributedTask<String>(callable,
owningMember);
- ExecutorService executorService =
hzRegistry.getHazelcastInstance().getExecutorService();
+ ExecutorService executorService = getExecutorService();
executorService.execute(task);
try {
return getResponseNode(task.get());
@@ -83,6 +83,21 @@ public class ReferenceInvoker implements
}
}
+ /**
+ * Hazelcast ExecutorService can't nest invocations so use a separate
ExecutorService
+ * for nested calls. See
http://groups.google.com/group/hazelcast/browse_thread/thread/1cc0b943716476e9
+ */
+ private ExecutorService getExecutorService() {
+ String threadName = Thread.currentThread().getName();
+ if (!threadName.startsWith("hz.executor.")) {
+ return
hzRegistry.getHazelcastInstance().getExecutorService("binding.sca.1");
+ } else {
+ String oldName =
threadName.substring(threadName.lastIndexOf("binding.sca."),
threadName.lastIndexOf(".thread-"));
+ int x =
Integer.parseInt(oldName.substring(oldName.lastIndexOf('.') + 1));
+ return
hzRegistry.getHazelcastInstance().getExecutorService(oldName.substring(0, 12) +
(x + 1));
+ }
+ }
+
private String getRequestXML(Message msg) {
Object[] args = msg.getBody();
String msgXML = domHelper.saveAsString((Node)args[0]);
Modified:
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/test/java/org/apache/tuscany/sca/binding/hazelcast/HazelcastBindingTestCase.java
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/test/java/org/apache/tuscany/sca/binding/hazelcast/HazelcastBindingTestCase.java?rev=926303&r1=926302&r2=926303&view=diff
==============================================================================
---
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/test/java/org/apache/tuscany/sca/binding/hazelcast/HazelcastBindingTestCase.java
(original)
+++
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/test/java/org/apache/tuscany/sca/binding/hazelcast/HazelcastBindingTestCase.java
Mon Mar 22 20:10:19 2010
@@ -47,6 +47,16 @@ public class HazelcastBindingTestCase {
}
@Test
+ public void testNestedClient() throws Exception {
+ Node client2Node =
NodeFactory.newInstance().createNode(URI.create("tuscany:HazelcastBindingTestCase"),
"client2.composite", new String[]{"target/test-classes"});
+ client2Node.start();
+ TestService service = client2Node.getService(TestService.class,
"TestServiceClient2");
+ assertNotNull(service);
+ assertEquals("Petra", service.echoString("Petra"));
+ client2Node.stop();
+ }
+
+ @Test
public void testEchoString() throws Exception {
TestService service = clientNode.getService(TestService.class,
"TestServiceClient");
assertNotNull(service);