summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sca-java-2.x/trunk/modules/domain-hazelcast/src/main/java/org/apache/tuscany/sca/endpoint/hazelcast/HazelcastEndpointRegistry.java64
-rw-r--r--sca-java-2.x/trunk/modules/domain-hazelcast/src/test/java/org/apache/tuscany/sca/endpoint/hazelcast/MultiRegTestCase.java54
2 files changed, 115 insertions, 3 deletions
diff --git a/sca-java-2.x/trunk/modules/domain-hazelcast/src/main/java/org/apache/tuscany/sca/endpoint/hazelcast/HazelcastEndpointRegistry.java b/sca-java-2.x/trunk/modules/domain-hazelcast/src/main/java/org/apache/tuscany/sca/endpoint/hazelcast/HazelcastEndpointRegistry.java
index cefbcd73d1..aa9abdf45f 100644
--- a/sca-java-2.x/trunk/modules/domain-hazelcast/src/main/java/org/apache/tuscany/sca/endpoint/hazelcast/HazelcastEndpointRegistry.java
+++ b/sca-java-2.x/trunk/modules/domain-hazelcast/src/main/java/org/apache/tuscany/sca/endpoint/hazelcast/HazelcastEndpointRegistry.java
@@ -19,7 +19,9 @@
package org.apache.tuscany.sca.endpoint.hazelcast;
+import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
+import java.io.StringReader;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Collection;
@@ -31,6 +33,10 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
+import javax.wsdl.Definition;
+import javax.wsdl.WSDLException;
+import javax.wsdl.xml.WSDLReader;
+import javax.wsdl.xml.WSDLWriter;
import javax.xml.namespace.QName;
import org.apache.tuscany.sca.assembly.AssemblyFactory;
@@ -40,11 +46,17 @@ import org.apache.tuscany.sca.core.ExtensionPointRegistry;
import org.apache.tuscany.sca.core.FactoryExtensionPoint;
import org.apache.tuscany.sca.core.LifeCycleListener;
import org.apache.tuscany.sca.core.UtilityExtensionPoint;
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.interfacedef.wsdl.WSDLDefinition;
+import org.apache.tuscany.sca.interfacedef.wsdl.WSDLFactory;
+import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterface;
+import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterfaceContract;
import org.apache.tuscany.sca.runtime.BaseEndpointRegistry;
import org.apache.tuscany.sca.runtime.EndpointRegistry;
import org.apache.tuscany.sca.runtime.RuntimeEndpoint;
import org.apache.tuscany.sca.runtime.RuntimeProperties;
import org.oasisopen.sca.ServiceRuntimeException;
+import org.xml.sax.InputSource;
import com.hazelcast.config.Config;
import com.hazelcast.config.NearCacheConfig;
@@ -71,15 +83,15 @@ public class HazelcastEndpointRegistry extends BaseEndpointRegistry implements E
private HazelcastInstance hazelcastInstance;
protected Map<Object, Object> endpointMap;
+ protected Map<Object, Object> endpointWsdls;
+ protected Map<QName, Composite> runningComposites;
protected Map<String, Endpoint> localEndpoints = new ConcurrentHashMap<String, Endpoint>();
protected MultiMap<String, String> endpointOwners;
- protected Map<QName, Composite> runningComposites;
protected AssemblyFactory assemblyFactory;
protected Object shutdownMutex = new Object();
protected Properties properties;
-
public HazelcastEndpointRegistry(ExtensionPointRegistry registry, Properties properties, String endpointRegistryURI, String domainURI) {
super(registry, null, endpointRegistryURI, domainURI);
this.assemblyFactory = registry.getExtensionPoint(FactoryExtensionPoint.class).getFactory(AssemblyFactory.class);
@@ -112,6 +124,7 @@ public class HazelcastEndpointRegistry extends BaseEndpointRegistry implements E
endpointMap = imap;
endpointOwners = hazelcastInstance.getMultiMap(domainURI + "/EndpointOwners");
+ endpointWsdls = hazelcastInstance.getMap(domainURI + "/EndpointWsdls");
// TODO: get going in-JVM first then fix this which needs to serialize/deserialize the composite
// runningComposites = hazelcastInstance.getMap(domainURI + "/composites");
@@ -128,6 +141,7 @@ public class HazelcastEndpointRegistry extends BaseEndpointRegistry implements E
hazelcastInstance = null;
endpointMap = null;
endpointOwners = null;
+ endpointWsdls = null;
}
}
}
@@ -233,10 +247,12 @@ public class HazelcastEndpointRegistry extends BaseEndpointRegistry implements E
String localMemberAddr = hazelcastInstance.getCluster().getLocalMember().getInetSocketAddress().toString();
String endpointURI = endpoint.getURI();
+ String wsdl = getWsdl(endpoint);
Transaction txn = hazelcastInstance.getTransaction();
txn.begin();
try {
endpointMap.put(endpointURI, endpoint);
+ endpointWsdls.put(endpointURI, wsdl);
endpointOwners.put(localMemberAddr, endpointURI);
txn.commit();
} catch (Throwable e) {
@@ -247,6 +263,23 @@ public class HazelcastEndpointRegistry extends BaseEndpointRegistry implements E
logger.info("Add endpoint - " + endpoint);
}
+ private String getWsdl(Endpoint endpoint) {
+ WSDLInterfaceContract wsdlIC = (WSDLInterfaceContract)((RuntimeEndpoint)endpoint).getGeneratedWSDLContract(endpoint.getComponentServiceInterfaceContract());
+ if (wsdlIC == null) {
+ return "";
+ }
+ WSDLInterface wsdl = (WSDLInterface)wsdlIC.getInterface();
+ WSDLDefinition d = wsdl.getWsdlDefinition();
+ ByteArrayOutputStream outStream = new ByteArrayOutputStream();
+ try {
+ WSDLWriter writer = javax.wsdl.factory.WSDLFactory.newInstance().newWSDLWriter();
+ writer.writeWSDL(d.getDefinition(), outStream);
+ } catch (Exception e){
+ throw new RuntimeException(e);
+ }
+ return outStream.toString();
+ }
+
public List<Endpoint> findEndpoint(String uri) {
List<Endpoint> foundEndpoints = new ArrayList<Endpoint>();
for (Object v : endpointMap.values()) {
@@ -266,6 +299,11 @@ public class HazelcastEndpointRegistry extends BaseEndpointRegistry implements E
if (!isLocal(endpoint)) {
endpoint.setRemote(true);
((RuntimeEndpoint)endpoint).bind(registry, this);
+ try {
+ setNormailizedWSDLContract(endpoint);
+ } catch (WSDLException e) {
+ throw new RuntimeException(e);
+ }
} else {
// get the local version of the endpoint
// this local version won't have been serialized
@@ -277,6 +315,25 @@ public class HazelcastEndpointRegistry extends BaseEndpointRegistry implements E
}
+ private void setNormailizedWSDLContract(Endpoint endpoint) throws WSDLException {
+ String wsdl = endpointWsdls == null ? null : (String)endpointWsdls.get(endpoint.getURI());
+ if (wsdl == null || wsdl.length() < 1) {
+ return;
+ }
+ InterfaceContract ic = endpoint.getComponentServiceInterfaceContract();
+ WSDLFactory wsdlFactory = registry.getExtensionPoint(FactoryExtensionPoint.class).getFactory(WSDLFactory.class);
+ WSDLInterfaceContract wsdlIC = wsdlFactory.createWSDLInterfaceContract();
+ WSDLInterface wsdlIface = wsdlFactory.createWSDLInterface();
+ WSDLDefinition wsdlDef = wsdlFactory.createWSDLDefinition();
+ WSDLReader reader = javax.wsdl.factory.WSDLFactory.newInstance().newWSDLReader();
+ InputSource inputSource = new InputSource(new StringReader(wsdl));
+ Definition def = reader.readWSDL("", inputSource);
+ wsdlDef.setDefinition(def);
+ wsdlIface.setWsdlDefinition(wsdlDef);
+ wsdlIC.setInterface(wsdlIface);
+ ic.setNormailizedWSDLContract(wsdlIC);
+ }
+
private boolean isLocal(Endpoint endpoint) {
return localEndpoints.containsKey(endpoint.getURI());
}
@@ -306,6 +363,7 @@ public class HazelcastEndpointRegistry extends BaseEndpointRegistry implements E
try {
endpointOwners.remove(localMemberAddr, endpointURI);
endpointMap.remove(endpointURI);
+ endpointWsdls.remove(endpointURI);
txn.commit();
} catch (Throwable e) {
txn.rollback();
@@ -373,6 +431,7 @@ public class HazelcastEndpointRegistry extends BaseEndpointRegistry implements E
Collection<String> keys = endpointOwners.remove(memberAddr);
for (Object k : keys) {
endpointMap.remove(k);
+ endpointWsdls.remove(k);
}
}
} finally {
@@ -406,7 +465,6 @@ public class HazelcastEndpointRegistry extends BaseEndpointRegistry implements E
}
return null;
}
-
@Override
public void addRunningComposite(Composite composite) {
runningComposites.put(composite.getName(), composite);
diff --git a/sca-java-2.x/trunk/modules/domain-hazelcast/src/test/java/org/apache/tuscany/sca/endpoint/hazelcast/MultiRegTestCase.java b/sca-java-2.x/trunk/modules/domain-hazelcast/src/test/java/org/apache/tuscany/sca/endpoint/hazelcast/MultiRegTestCase.java
index c4f51d1675..dcdf1a94e0 100644
--- a/sca-java-2.x/trunk/modules/domain-hazelcast/src/test/java/org/apache/tuscany/sca/endpoint/hazelcast/MultiRegTestCase.java
+++ b/sca-java-2.x/trunk/modules/domain-hazelcast/src/test/java/org/apache/tuscany/sca/endpoint/hazelcast/MultiRegTestCase.java
@@ -30,6 +30,9 @@ import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry;
import org.apache.tuscany.sca.core.ExtensionPointRegistry;
import org.apache.tuscany.sca.core.FactoryExtensionPoint;
import org.apache.tuscany.sca.core.UtilityExtensionPoint;
+import org.apache.tuscany.sca.interfacedef.Interface;
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceContract;
import org.apache.tuscany.sca.runtime.RuntimeEndpoint;
import org.apache.tuscany.sca.runtime.RuntimeProperties;
import org.junit.Assert;
@@ -154,10 +157,61 @@ public class MultiRegTestCase {
Component comp = assemblyFactory.createComponent();
ep.setComponent(comp);
ep.setService(assemblyFactory.createComponentService());
+ ep.getService().setInterfaceContract(getIC());
Binding b = scaBindingFactory.createSCABinding();
ep.setBinding(b);
ep.setURI(uri);
return ep;
}
+
+ private InterfaceContract getIC() {
+ InterfaceContract ic = new JavaInterfaceContract(){
+
+ public Object clone() throws CloneNotSupportedException {
+ return null;
+ }
+ @Override
+ public Interface getInterface() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void setInterface(Interface callInterface) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public Interface getCallbackInterface() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void setCallbackInterface(Interface callbackInterface) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public InterfaceContract makeUnidirectional(boolean isCallback) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public InterfaceContract getNormalizedWSDLContract() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void setNormailizedWSDLContract(InterfaceContract wsdlInterfaceContract) {
+ // TODO Auto-generated method stub
+
+ }};
+ return ic;
+ }
}