Author: antelder
Date: Thu Mar 18 14:11:43 2010
New Revision: 924789

URL: http://svn.apache.org/viewvc?rev=924789&view=rev
Log:
Start of a binding that uses Hazelcast. The idea is that it would be used for 
the sca binding and use the Hazelcast based endpoint registry with Hazelcast 
handling all the remote communications. This avoids all the issues other 
bindings have with working out what the remote endpoint address is.

Added:
    tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/   (with props)
    tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/META-INF/
    
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/META-INF/MANIFEST.MF
    tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/pom.xml
    tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/
    tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/
    tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/
    
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/
    
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/
    
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/
    
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/
    
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/
    
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/
    
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/HazelcastBinding.java
    
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/HazelcastBindingProviderFactory.java
    
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/HazelcastReferenceBindingProvider.java
    
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/HazelcastServiceBindingProvider.java
    
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/main/java/org/apache/tuscany/sca/binding/hazelcast/ServiceInvoker.java
    
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/resources/
    
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/resources/META-INF/
    
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/resources/META-INF/services/
    
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor
    
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.BindingProviderFactory
    tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/test/
    tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/test/java/
    
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/test/resources/

Propchange: tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Thu Mar 18 14:11:43 2010
@@ -0,0 +1,20 @@
+target
+work
+dojo
+*.iws
+*.ipr
+*.iml
+derby.log
+maven.log
+maven-eclipse.xml
+build.xml
+build-dependency.xml
+velocity.log*
+junit*.properties
+surefire*.properties
+.project
+.classpath
+.settings
+.deployables
+.wtpmodules
+.externalToolBuilders

Added: 
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/META-INF/MANIFEST.MF
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/META-INF/MANIFEST.MF?rev=924789&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/META-INF/MANIFEST.MF
 (added)
+++ 
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/META-INF/MANIFEST.MF
 Thu Mar 18 14:11:43 2010
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+SCA-Version: 1.1
+Bundle-Name: Apache Tuscany SCA Binding Hazelcast Runtime
+Bundle-Vendor: The Apache Software Foundation
+Bundle-Version: 2.0.0
+Bundle-ManifestVersion: 2
+Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
+Bundle-Description: Apache Tuscany Hazelcast Binding
+Bundle-SymbolicName: org.apache.tuscany.sca.binding.hazelcast.runtime
+Bundle-DocURL: http://www.apache.org/
+Bundle-RequiredExecutionEnvironment: J2SE-1.5,JavaSE-1.6
+Import-Package: com.hazelcast.config,
+ com.hazelcast.core,
+ com.hazelcast.nio,
+ org.apache.tuscany.sca.assembly;version="2.0.0",
+ org.apache.tuscany.sca.core;version="2.0.0",
+ org.apache.tuscany.sca.runtime;version="2.0.0"
+Export-Package: org.apache.tuscany.sca.endpoint.hazelcast;version="2.0.0";
+ 
uses:="org.apache.tuscany.sca.runtime,org.apache.tuscany.sca.assembly,org.apache.tuscany.sca.core"

Added: tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/pom.xml
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/pom.xml?rev=924789&view=auto
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/pom.xml (added)
+++ tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/pom.xml Thu 
Mar 18 14:11:43 2010
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project>
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.tuscany.sca</groupId>
+        <artifactId>tuscany-modules</artifactId>
+        <version>2.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>tuscany-binding-hazelcast-runtime</artifactId>
+    <name>Apache Tuscany SCA Binding Hazelcast Runtime</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-endpoint-hazelcast</artifactId>
+            <version>2.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-binding-ws-wsdlgen</artifactId>
+            <version>2.0-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
+
+</project>

Added: 
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/HazelcastBinding.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/HazelcastBinding.java?rev=924789&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/HazelcastBinding.java
 (added)
+++ 
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/HazelcastBinding.java
 Thu Mar 18 14:11:43 2010
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.sca.binding.hazelcast;
+
+import javax.xml.namespace.QName;
+
+import org.apache.tuscany.sca.assembly.impl.BindingImpl;
+
+public class HazelcastBinding extends BindingImpl {
+
+    public static final QName TYPE = new QName(SCA11_TUSCANY_NS, 
"binding.hazelcast");
+
+    public HazelcastBinding() {
+        super(TYPE);
+    }
+}

Added: 
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/HazelcastBindingProviderFactory.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/HazelcastBindingProviderFactory.java?rev=924789&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/HazelcastBindingProviderFactory.java
 (added)
+++ 
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/HazelcastBindingProviderFactory.java
 Thu Mar 18 14:11:43 2010
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.sca.binding.hazelcast;
+
+import org.apache.tuscany.sca.assembly.Component;
+import org.apache.tuscany.sca.assembly.Contract;
+import org.apache.tuscany.sca.binding.ws.WebServiceBinding;
+import org.apache.tuscany.sca.binding.ws.WebServiceBindingFactory;
+import org.apache.tuscany.sca.binding.ws.wsdlgen.BindingWSDLGenerator;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.databinding.xml.DOMDataBinding;
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.provider.BindingProviderFactory;
+import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
+import org.apache.tuscany.sca.provider.ServiceBindingProvider;
+import org.apache.tuscany.sca.runtime.RuntimeEndpoint;
+import org.apache.tuscany.sca.runtime.RuntimeEndpointReference;
+
+public class HazelcastBindingProviderFactory implements 
BindingProviderFactory<HazelcastBinding> {
+
+    private ExtensionPointRegistry extensionsRegistry;
+
+    public HazelcastBindingProviderFactory(ExtensionPointRegistry 
extensionsRegistry) {
+        this.extensionsRegistry = extensionsRegistry;
+    }
+
+    public ReferenceBindingProvider 
createReferenceBindingProvider(RuntimeEndpointReference endpointReference) {
+        InterfaceContract interfaceContract = 
createDOMInterfaceContract(endpointReference.getComponent(), 
endpointReference.getReference());       
+        return new HazelcastReferenceBindingProvider(extensionsRegistry, 
endpointReference.getBinding().getURI(), interfaceContract);
+    }
+
+    public ServiceBindingProvider createServiceBindingProvider(RuntimeEndpoint 
endpoint) {
+        InterfaceContract interfaceContract = 
createDOMInterfaceContract(endpoint.getComponent(), endpoint.getService());     
  
+        return new HazelcastServiceBindingProvider(endpoint, 
interfaceContract);
+    }
+
+    private InterfaceContract createDOMInterfaceContract(Component component, 
Contract contract) {
+        WebServiceBindingFactory wsFactory = 
extensionsRegistry.getExtensionPoint(WebServiceBindingFactory.class);
+        WebServiceBinding wsBinding = wsFactory.createWebServiceBinding();
+        BindingWSDLGenerator.generateWSDL(component, contract, wsBinding, 
extensionsRegistry, null);
+        InterfaceContract interfaceContract = 
wsBinding.getBindingInterfaceContract();
+        interfaceContract.getInterface().resetDataBinding(DOMDataBinding.NAME);
+        return interfaceContract;
+    }
+
+    public Class<HazelcastBinding> getModelType() {
+        return HazelcastBinding.class;
+    }
+}

Added: 
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/HazelcastReferenceBindingProvider.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/HazelcastReferenceBindingProvider.java?rev=924789&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/HazelcastReferenceBindingProvider.java
 (added)
+++ 
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/HazelcastReferenceBindingProvider.java
 Thu Mar 18 14:11:43 2010
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.sca.binding.hazelcast;
+
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.Invoker;
+import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
+
+public class HazelcastReferenceBindingProvider implements 
ReferenceBindingProvider {
+
+    private ExtensionPointRegistry extensionsRegistry;
+    private String serviceURI;
+    private InterfaceContract interfaceContract;
+
+    public HazelcastReferenceBindingProvider(ExtensionPointRegistry 
extensionsRegistry, String serviceURI, InterfaceContract interfaceContract) {
+        this.extensionsRegistry = extensionsRegistry;
+        this.serviceURI = serviceURI;
+        this.interfaceContract = interfaceContract;
+    }
+
+    public Invoker createInvoker(Operation operation) {
+        return new ReferenceInvoker(extensionsRegistry, serviceURI, operation);
+    }
+
+    public InterfaceContract getBindingInterfaceContract() {
+        return interfaceContract;
+    }
+
+    public boolean supportsOneWayInvocation() {
+        return false;
+    }
+
+    public void start() {
+    }
+
+    public void stop() {
+    }
+
+}

Added: 
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/HazelcastServiceBindingProvider.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/HazelcastServiceBindingProvider.java?rev=924789&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/HazelcastServiceBindingProvider.java
 (added)
+++ 
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/HazelcastServiceBindingProvider.java
 Thu Mar 18 14:11:43 2010
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.sca.binding.hazelcast;
+
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.provider.ServiceBindingProvider;
+import org.apache.tuscany.sca.runtime.RuntimeEndpoint;
+
+public class HazelcastServiceBindingProvider implements ServiceBindingProvider 
{
+
+    private RuntimeEndpoint endpoint;
+    private InterfaceContract interfaceContract;
+
+
+    public HazelcastServiceBindingProvider(RuntimeEndpoint endpoint, 
InterfaceContract interfaceContract) {
+        this.endpoint = endpoint;
+        this.interfaceContract = interfaceContract;
+    }
+
+    public void start() {
+        EndpointStash.addEndpoint(endpoint);
+    }
+
+    public void stop() {
+        EndpointStash.removeEndpoint(endpoint.getURI());
+    }
+
+    public InterfaceContract getBindingInterfaceContract() {
+        return interfaceContract;
+    }
+
+    public boolean supportsOneWayInvocation() {
+        return false;
+    }
+}

Added: 
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=924789&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/ReferenceInvoker.java
 (added)
+++ 
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/ReferenceInvoker.java
 Thu Mar 18 14:11:43 2010
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.sca.binding.hazelcast;
+
+import java.io.IOException;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.FutureTask;
+
+import org.apache.tuscany.sca.common.xml.dom.DOMHelper;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.core.FactoryExtensionPoint;
+import org.apache.tuscany.sca.endpoint.hazelcast.HazelcastEndpointRegistry;
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.Invoker;
+import org.apache.tuscany.sca.invocation.Message;
+import org.apache.tuscany.sca.invocation.MessageFactory;
+import org.apache.tuscany.sca.runtime.DomainRegistryFactory;
+import org.apache.tuscany.sca.runtime.EndpointRegistry;
+import org.apache.tuscany.sca.runtime.ExtensibleDomainRegistryFactory;
+import org.oasisopen.sca.ServiceRuntimeException;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.xml.sax.SAXException;
+
+import com.hazelcast.core.DistributedTask;
+import com.hazelcast.core.Member;
+
+public class ReferenceInvoker implements Invoker {
+
+    HazelcastEndpointRegistry hzRegistry;
+    DOMHelper domHelper;
+    String serviceURI;
+    private Operation operation;
+    MessageFactory messageFactory;
+
+    public ReferenceInvoker(ExtensionPointRegistry extensionsRegistry, String 
serviceURI, Operation operation) {
+        this.serviceURI = serviceURI;
+        this.operation = operation;
+        DomainRegistryFactory domainRegistryFactory = 
ExtensibleDomainRegistryFactory.getInstance(extensionsRegistry);
+        for (EndpointRegistry r : 
domainRegistryFactory.getEndpointRegistries()) {
+            if (r instanceof HazelcastEndpointRegistry) {
+                hzRegistry = (HazelcastEndpointRegistry)r;
+                break;
+            }
+        }
+        this.domHelper = DOMHelper.getInstance(extensionsRegistry);
+        FactoryExtensionPoint modelFactories = 
extensionsRegistry.getExtensionPoint(FactoryExtensionPoint.class);
+        this.messageFactory = modelFactories.getFactory(MessageFactory.class);
+    }
+
+    public Message invoke(Message msg) {
+        Member owningMember = hzRegistry.getOwningMember(serviceURI);
+        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.execute(task);
+        try {
+            return getResponseNode(task.get());
+        } catch (Exception e) {
+            throw new ServiceRuntimeException(e);
+        }
+    }
+
+    private String getRequestXML(Message msg) {
+        Object[] args = msg.getBody();
+        String msgXML = domHelper.saveAsString((Node)args[0]);
+        return msgXML;
+    }
+
+    private Message getResponseNode(String responseXML) throws IOException, 
SAXException {
+        Document responseDOM = domHelper.load(responseXML);
+        Message msg = messageFactory.createMessage();
+        msg.setBody(responseDOM);
+        return msg;
+    }
+
+}

Added: 
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/ServiceInvoker.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/ServiceInvoker.java?rev=924789&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/ServiceInvoker.java
 (added)
+++ 
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/java/org/apache/tuscany/sca/binding/hazelcast/ServiceInvoker.java
 Thu Mar 18 14:11:43 2010
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.sca.binding.hazelcast;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.concurrent.Callable;
+
+import org.apache.tuscany.sca.common.xml.dom.DOMHelper;
+import org.apache.tuscany.sca.interfacedef.Interface;
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.runtime.RuntimeEndpoint;
+import org.oasisopen.sca.ServiceRuntimeException;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.xml.sax.SAXException;
+
+public class ServiceInvoker implements Callable<String>, Serializable {
+    private static final long serialVersionUID = 1L;
+
+    // all fields MUST be Serializable
+    private String serviceURI;
+    private String operationName;
+    private String requestXML;
+
+    public ServiceInvoker(String serviceURI, String operationName, String 
msgXML) {
+        this.serviceURI = serviceURI;
+        this.operationName = operationName;
+        this.requestXML = msgXML;
+    }
+
+    public String call() throws Exception {
+        RuntimeEndpoint endpoint = EndpointStash.getEndpoint(serviceURI);
+        Operation operation = getRequestOperation(endpoint);
+        DOMHelper domHelper = 
DOMHelper.getInstance(endpoint.getCompositeContext().getExtensionPointRegistry());
+        Object[] args = getRequestArgs(domHelper);
+        Object response = endpoint.invoke(operation, args);
+        String responseXML = getResponseXML(domHelper, response);
+        return responseXML;
+    }
+
+    private Operation getRequestOperation(RuntimeEndpoint endpoint) {
+        InterfaceContract ic = endpoint.getBindingInterfaceContract();
+        Interface iface = ic.getInterface();
+        for (Operation op : iface.getOperations()) {
+            if (op.getName().equals(operationName)) {
+                return op;
+            }
+
+        }
+        // TODO: return err msg
+        throw new ServiceRuntimeException("operation not found " + 
operationName);
+    }
+
+    private Object[] getRequestArgs(DOMHelper domHelper) throws IOException, 
SAXException {
+        Document requestDOM = domHelper.load(requestXML);
+        return new Object[] {requestDOM};
+    }
+
+    private String getResponseXML(DOMHelper domHelper, Object response) {
+        String responseXML = domHelper.saveAsString((Node)response);
+        return responseXML;
+    }
+
+}

Added: 
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor?rev=924789&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor
 (added)
+++ 
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor
 Thu Mar 18 14:11:43 2010
@@ -0,0 +1,21 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License. 
+
+# Implementation class for the artifact processor extension
+org.apache.tuscany.sca.assembly.xml.DefaultBeanModelProcessor;qname=http://tuscany.apache.org/xmlns/sca/1.1#binding.hazelcast,model=org.apache.tuscany.sca.binding.hazelcast.HazelcastBinding
+
+

Added: 
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.BindingProviderFactory
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.BindingProviderFactory?rev=924789&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.BindingProviderFactory
 (added)
+++ 
tuscany/sca-java-2.x/trunk/modules/binding-hazelcast-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.BindingProviderFactory
 Thu Mar 18 14:11:43 2010
@@ -0,0 +1,19 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License. 
+
+# Implementation class for the binding extension
+org.apache.tuscany.sca.binding.hazelcast.HazelcastBindingProviderFactory;model=org.apache.tuscany.sca.binding.hazelcast.HazelcastBinding


Reply via email to