You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by an...@apache.org on 2010/01/06 00:25:43 UTC

svn commit: r896269 - in /tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src: main/java/org/apache/tuscany/sca/endpoint/hazelcast/ main/resources/META-INF/services/ test/java/org/apache/tuscany/sca/endpoint/hazelcast/

Author: antelder
Date: Tue Jan  5 23:25:33 2010
New Revision: 896269

URL: http://svn.apache.org/viewvc?rev=896269&view=rev
Log:
More changes to get the Hazelcast endpoint registry working

Added:
    tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/main/java/org/apache/tuscany/sca/endpoint/hazelcast/ConfigURI.java
    tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/main/java/org/apache/tuscany/sca/endpoint/hazelcast/HazelcastEndpointRegistry.java
    tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/test/java/org/apache/tuscany/sca/endpoint/hazelcast/ConfigURITestCase.java
Removed:
    tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/main/java/org/apache/tuscany/sca/endpoint/hazelcast/HazelcastRegistry.java
    tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/main/java/org/apache/tuscany/sca/endpoint/hazelcast/ReplicatedEndpointRegistry.java
Modified:
    tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/main/resources/META-INF/services/org.apache.tuscany.sca.runtime.EndpointRegistry
    tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/test/java/org/apache/tuscany/sca/endpoint/hazelcast/RegistryTestCase.java

Added: tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/main/java/org/apache/tuscany/sca/endpoint/hazelcast/ConfigURI.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/main/java/org/apache/tuscany/sca/endpoint/hazelcast/ConfigURI.java?rev=896269&view=auto
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/main/java/org/apache/tuscany/sca/endpoint/hazelcast/ConfigURI.java (added)
+++ tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/main/java/org/apache/tuscany/sca/endpoint/hazelcast/ConfigURI.java Tue Jan  5 23:25:33 2010
@@ -0,0 +1,158 @@
+/*
+ * 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.endpoint.hazelcast;
+
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * Utility to parse the config uri string.
+ * 
+ * tuscany:[domainName]?listen=[port|ip:port]]&password=abc&multicast=[off|port|ip:port]&remotes=ip:port,ip:port,...
+
+ * listen - defines the local bind address and port, it defaults to all network interfaces on port 14820 and if that port in use it will try incrementing by one till a free port is found.
+ * password -  is the password other nodes must use to connect to this domain. The default is 'tuscany'.
+ * multicast - defines if multicast discovery is used and if so what multicast ip group and port is used. 
+ *             The default is multicast is off if remotes= is specified (only for now due to a Hazelcast limitation that is planned to be fixed), 
+ *             otherwise if remotes= is not specified then multicast defaults to 224.5.12.10:51482
+ * remotes - a list of ipAddress:port for remote nodes
+ *             
+ * TODO: move this to a base module as it will also be used by the SCAClient
+ *       add JCA encryption config
+ */
+public class ConfigURI {
+    
+    private String domainName = "default";
+    private String bindAddress = null; // null means all network adapters
+    private int listenPort = 14820;
+    private String password = "tuscany";
+    private boolean multicastDisabled = false;
+    private String multicastAddress = "224.5.12.10";
+    private int multicastPort = 51482;
+    private List<String> remotes = new ArrayList<String>();
+
+    public ConfigURI(String uri) {
+        parseURI(uri);
+    }
+
+    private void parseURI(String uri) {
+        if (!uri.startsWith("tuscany:")) {
+            throw new IllegalArgumentException("Config URI must start with 'tuscany:'");
+        }
+        
+        // make it a URI so java.net.URI can be used to parse it
+        int i = uri.indexOf(":");
+        if (uri.charAt("tuscany:".length()+1) != '/') {
+            uri = uri.replaceFirst(":", ":/");
+        }
+        if (uri.charAt("tuscany:".length()+2) != '/') {
+            uri = uri.replaceFirst(":/", "://");
+        }
+        URI configURI = URI.create(uri);
+        
+        this.domainName = configURI.getHost();
+        
+        String query = configURI.getQuery();
+        if (query != null && query.length() > 0) {
+            String[] params = query.split("&");
+            Map<String, String> paramMap = new HashMap<String, String>();
+            for (String param : params) {
+                paramMap.put(param.split("=")[0], param.split("=")[1]);
+            }
+            for (String name : paramMap.keySet()) {
+                String value = paramMap.get(name);
+                if ("listen".equals(name)) {
+                    if (value.indexOf(":") == -1) {
+                        this.listenPort = Integer.parseInt(value);   
+                    } else {
+                        String[] addr = value.split(":");
+                        this.bindAddress = addr[0];   
+                        this.listenPort = Integer.parseInt(addr[1]);   
+                    }
+                } else if ("multicast".equals(name)) {
+                    if ("off".equalsIgnoreCase(value)) {
+                        this.multicastDisabled = true;
+                    } else {
+                        if (value.indexOf(":") == -1) {
+                            this.multicastAddress = value;
+                        } else {
+                            String[] addr = value.split(":");
+                            this.multicastAddress = addr[0];
+                            this.multicastPort = Integer.parseInt(addr[1]);
+                        }
+                    }
+                } else if ("password".equals(name)) {
+                    this.password = value;
+                } else if ("remotes".equals(name)) {
+                    String[] ips = value.split(",");
+                    for (String ip : ips) {
+                        if (ip.indexOf(":") == -1) {
+                            remotes.add(ip + ":14820");
+                        } else {
+                            remotes.add(ip);
+                        }
+                    }
+                    if (paramMap.containsKey("multicast")) {
+                        throw new IllegalArgumentException("Cannot have multicast and remotes (for now)");
+                    } else {
+                        this.multicastDisabled = true;
+                    }
+                }
+            }
+        }
+    }
+
+    public String getDomainName() {
+        return domainName;
+    }
+
+    public String getBindAddress() {
+        return bindAddress;
+    }
+
+    public int getListenPort() {
+        return listenPort;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public boolean isMulticastDisabled() {
+        return multicastDisabled;
+    }
+
+    public String getMulticastAddress() {
+        return multicastAddress;
+    }
+
+    public int getMulticastPort() {
+        return multicastPort;
+    }
+
+    public List<String> getRemotes() {
+        return remotes;
+    }
+
+}

Added: tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/main/java/org/apache/tuscany/sca/endpoint/hazelcast/HazelcastEndpointRegistry.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/main/java/org/apache/tuscany/sca/endpoint/hazelcast/HazelcastEndpointRegistry.java?rev=896269&view=auto
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/main/java/org/apache/tuscany/sca/endpoint/hazelcast/HazelcastEndpointRegistry.java (added)
+++ tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/main/java/org/apache/tuscany/sca/endpoint/hazelcast/HazelcastEndpointRegistry.java Tue Jan  5 23:25:33 2010
@@ -0,0 +1,293 @@
+/*
+ * 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.endpoint.hazelcast;
+
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.logging.Logger;
+
+import org.apache.tuscany.sca.assembly.Endpoint;
+import org.apache.tuscany.sca.assembly.EndpointReference;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.core.LifeCycleListener;
+import org.apache.tuscany.sca.runtime.EndpointListener;
+import org.apache.tuscany.sca.runtime.EndpointRegistry;
+import org.apache.tuscany.sca.runtime.RuntimeEndpoint;
+
+import com.hazelcast.config.Config;
+import com.hazelcast.config.TcpIpConfig;
+import com.hazelcast.config.XmlConfigBuilder;
+import com.hazelcast.core.Hazelcast;
+import com.hazelcast.core.HazelcastInstance;
+import com.hazelcast.core.IMap;
+import com.hazelcast.nio.Address;
+
+/**
+ * An EndpointRegistry using a Hazelcast
+ */
+public class HazelcastEndpointRegistry implements EndpointRegistry, LifeCycleListener {
+    private final static Logger logger = Logger.getLogger(HazelcastEndpointRegistry.class.getName());
+
+    private List<EndpointReference> endpointreferences = new CopyOnWriteArrayList<EndpointReference>();
+    private List<EndpointListener> listeners = new CopyOnWriteArrayList<EndpointListener>();
+
+    private ExtensionPointRegistry registry;
+    private ConfigURI configURI;
+
+    private HazelcastInstance hazelcastInstance;
+    private IMap<Object, Object> map;
+    private List<String> localEndpoints = new ArrayList<String>();;
+
+    public HazelcastEndpointRegistry(ExtensionPointRegistry registry,
+                                      Map<String, String> attributes,
+                                      String domainRegistryURI,
+                                      String domainURI) {
+        this.registry = registry;
+        this.configURI = new ConfigURI(domainRegistryURI);
+    }
+
+    public void start() {
+        if (map != null) {
+            throw new IllegalStateException("The registry has already been started");
+        }
+        initHazelcastInstance();
+        map = hazelcastInstance.getMap(configURI.getDomainName() + "Endpoints");
+    }
+
+    public void stop() {
+        if (map != null) {
+            hazelcastInstance.shutdown();
+        }
+    }
+
+    private void initHazelcastInstance()  {
+        Config config = new XmlConfigBuilder().build();
+
+        config.setPort(configURI.getListenPort());
+        //config.setPortAutoIncrement(false);
+        
+        if (configURI.getBindAddress() != null) {
+            config.getNetworkConfig().getInterfaces().setEnabled(true);
+            config.getNetworkConfig().getInterfaces().clear();
+            config.getNetworkConfig().getInterfaces().addInterface(configURI.getBindAddress());
+        }
+
+        config.getGroupConfig().setName(configURI.getDomainName());
+        config.getGroupConfig().setPassword(configURI.getPassword());
+
+        if (configURI.isMulticastDisabled()) {
+            config.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(false);
+        } else {
+            config.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(true);
+            config.getNetworkConfig().getJoin().getMulticastConfig().setMulticastPort(configURI.getMulticastPort());
+            config.getNetworkConfig().getJoin().getMulticastConfig().setMulticastGroup(configURI.getMulticastAddress());
+        }
+        
+        if (configURI.getRemotes().size() > 0) {
+            TcpIpConfig tcpconfig = config.getNetworkConfig().getJoin().getJoinMembers();
+            tcpconfig.setEnabled(true);
+            List<Address> lsMembers = tcpconfig.getAddresses();
+            lsMembers.clear();
+            for (String addr : configURI.getRemotes()) {
+                String[] ipNPort = addr.split(":");
+                try {
+                    lsMembers.add(new Address(ipNPort[0], Integer.parseInt(ipNPort[1])));
+                } catch (UnknownHostException e) {
+                    throw new RuntimeException(e);
+                }
+            }
+        }
+
+        this.hazelcastInstance = Hazelcast.newHazelcastInstance(config);
+    }
+
+    public void addEndpoint(Endpoint endpoint) {
+        map.put(endpoint.getURI(), endpoint);
+        localEndpoints.add(endpoint.getURI());
+        logger.info("Add endpoint - " + endpoint);
+    }
+
+    public void addEndpointReference(EndpointReference endpointReference) {
+        endpointreferences.add(endpointReference);
+        logger.fine("Add endpoint reference - " + endpointReference);
+    }
+
+    public void addListener(EndpointListener listener) {
+        listeners.add(listener);
+    }
+
+    /**
+     * Parse the component/service/binding URI into an array of parts (componentURI, serviceName, bindingName)
+     * @param uri
+     * @return
+     */
+    private String[] parse(String uri) {
+        String[] names = new String[3];
+        int index = uri.lastIndexOf('#');
+        if (index == -1) {
+            names[0] = uri;
+        } else {
+            names[0] = uri.substring(0, index);
+            String str = uri.substring(index + 1);
+            if (str.startsWith("service-binding(") && str.endsWith(")")) {
+                str = str.substring("service-binding(".length(), str.length() - 1);
+                String[] parts = str.split("/");
+                if (parts.length != 2) {
+                    throw new IllegalArgumentException("Invalid service-binding URI: " + uri);
+                }
+                names[1] = parts[0];
+                names[2] = parts[1];
+            } else if (str.startsWith("service(") && str.endsWith(")")) {
+                str = str.substring("service(".length(), str.length() - 1);
+                names[1] = str;
+            } else {
+                throw new IllegalArgumentException("Invalid component/service/binding URI: " + uri);
+            }
+        }
+        return names;
+    }
+
+    private boolean matches(String target, String uri) {
+        String[] parts1 = parse(target);
+        String[] parts2 = parse(uri);
+        for (int i = 0; i < parts1.length; i++) {
+            if (parts1[i] == null || parts1[i].equals(parts2[i])) {
+                continue;
+            } else {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    public List<Endpoint> findEndpoint(EndpointReference endpointReference) {
+        List<Endpoint> foundEndpoints = new ArrayList<Endpoint>();
+
+        logger.fine("Find endpoint for reference - " + endpointReference);
+
+        if (endpointReference.getReference() != null) {
+            Endpoint targetEndpoint = endpointReference.getTargetEndpoint();
+            
+            for (Object v : map.values()) {
+                Endpoint endpoint = (Endpoint)v;
+                logger.fine("Matching against - " + endpoint);
+                if (matches(targetEndpoint.getURI(), endpoint.getURI())) {
+                    if (!isLocal(endpoint)) {
+                        endpoint.setRemote(true);
+                    }
+                    // if (!entry.isPrimary()) {
+                    ((RuntimeEndpoint) endpoint).bind(registry, this);
+                    // }
+                    foundEndpoints.add(endpoint);
+                    logger.fine("Found endpoint with matching service  - " + endpoint);
+                } 
+                // else the service name doesn't match
+            }
+        }
+        
+        return foundEndpoints;
+    }
+
+    private boolean isLocal(Endpoint endpoint) {
+        return localEndpoints.contains(endpoint.getURI());
+    }
+
+    public List<EndpointReference> findEndpointReference(Endpoint endpoint) {
+        return endpointreferences;
+    }
+
+    public Endpoint getEndpoint(String uri) {
+        return (Endpoint)map.get(uri);
+    }
+
+    public List<EndpointReference> getEndpointReferences() {
+        return endpointreferences;
+    }
+
+    public List<Endpoint> getEndpoints() {
+        return new ArrayList(map.values());
+    }
+
+    public List<EndpointListener> getListeners() {
+        return listeners;
+    }
+
+    public void removeEndpoint(Endpoint endpoint) {
+        map.remove(endpoint.getURI());
+        localEndpoints.remove(endpoint.getURI());
+        logger.info("Removed endpoint - " + endpoint);
+    }
+
+    public void removeEndpointReference(EndpointReference endpointReference) {
+        endpointreferences.remove(endpointReference);
+        logger.fine("Remove endpoint reference - " + endpointReference);
+    }
+
+    public void removeListener(EndpointListener listener) {
+        listeners.remove(listener);
+    }
+
+    public void updateEndpoint(String uri, Endpoint endpoint) {
+//      // TODO: is updateEndpoint needed?
+//      throw new UnsupportedOperationException();
+    }
+
+//    public void entryAdded(Object key, Object value) {
+//        MapEntry entry = (MapEntry)value;
+//        Endpoint newEp = (Endpoint)entry.getValue();
+//        if (!isLocal(entry)) {
+//            logger.info(id + " Remote endpoint added: " + entry.getValue());
+//            newEp.setRemote(true);
+//        }
+//        ((RuntimeEndpoint) newEp).bind(registry, this);
+//        for (EndpointListener listener : listeners) {
+//            listener.endpointAdded(newEp);
+//        }
+//    }
+//
+//    public void entryRemoved(Object key, Object value) {
+//        MapEntry entry = (MapEntry)value;
+//        if (!isLocal(entry)) {
+//            logger.info(id + " Remote endpoint removed: " + entry.getValue());
+//        }
+//        Endpoint oldEp = (Endpoint)entry.getValue();
+//        for (EndpointListener listener : listeners) {
+//            listener.endpointRemoved(oldEp);
+//        }
+//    }
+//
+//    public void entryUpdated(Object key, Object oldValue, Object newValue) {
+//        MapEntry oldEntry = (MapEntry)oldValue;
+//        MapEntry newEntry = (MapEntry)newValue;
+//        if (!isLocal(newEntry)) {
+//            logger.info(id + " Remote endpoint updated: " + newEntry.getValue());
+//        }
+//        Endpoint oldEp = (Endpoint)oldEntry.getValue();
+//        Endpoint newEp = (Endpoint)newEntry.getValue();
+//        ((RuntimeEndpoint) newEp).bind(registry, this);
+//        for (EndpointListener listener : listeners) {
+//            listener.endpointUpdated(oldEp, newEp);
+//        }
+//    }
+
+}

Modified: tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/main/resources/META-INF/services/org.apache.tuscany.sca.runtime.EndpointRegistry
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/main/resources/META-INF/services/org.apache.tuscany.sca.runtime.EndpointRegistry?rev=896269&r1=896268&r2=896269&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/main/resources/META-INF/services/org.apache.tuscany.sca.runtime.EndpointRegistry (original)
+++ tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/main/resources/META-INF/services/org.apache.tuscany.sca.runtime.EndpointRegistry Tue Jan  5 23:25:33 2010
@@ -14,5 +14,5 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-org.apache.tuscany.sca.endpoint.hazelcast.HazelcastRegistry;ranking=150,address=228.0.0.100,port=50000,timeout=50,scheme=tuscany
+org.apache.tuscany.sca.endpoint.hazelcast.HazelcastEndpointRegistry;ranking=150,scheme=tuscany
 

Added: tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/test/java/org/apache/tuscany/sca/endpoint/hazelcast/ConfigURITestCase.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/test/java/org/apache/tuscany/sca/endpoint/hazelcast/ConfigURITestCase.java?rev=896269&view=auto
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/test/java/org/apache/tuscany/sca/endpoint/hazelcast/ConfigURITestCase.java (added)
+++ tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/test/java/org/apache/tuscany/sca/endpoint/hazelcast/ConfigURITestCase.java Tue Jan  5 23:25:33 2010
@@ -0,0 +1,106 @@
+/*
+ * 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.endpoint.hazelcast;
+
+import java.net.UnknownHostException;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+
+public class ConfigURITestCase {
+
+    @Test
+    public void testInvalidPrefix() throws UnknownHostException {
+        try {
+            new ConfigURI("foo");
+            Assert.fail();
+        } catch (IllegalArgumentException e) {
+            // expected
+        }
+    }
+
+    @Test
+    public void testDomainName() throws UnknownHostException {
+        ConfigURI configURI = new ConfigURI("tuscany:myDomain");
+        Assert.assertEquals("myDomain", configURI.getDomainName());
+        Assert.assertFalse(configURI.isMulticastDisabled());
+    }
+
+    @Test
+    public void testListenAddr() throws UnknownHostException {
+        ConfigURI configURI = new ConfigURI("tuscany:myDomain?listen=4321");
+        Assert.assertEquals("myDomain", configURI.getDomainName());
+        Assert.assertFalse(configURI.isMulticastDisabled());
+        Assert.assertEquals(4321, configURI.getListenPort());
+        Assert.assertNull(configURI.getBindAddress());
+    }
+    @Test
+    public void testListenAddr2() throws UnknownHostException {
+        ConfigURI configURI = new ConfigURI("tuscany:myDomain?listen=1.1.1.1:4321");
+        Assert.assertEquals("myDomain", configURI.getDomainName());
+        Assert.assertFalse(configURI.isMulticastDisabled());
+        Assert.assertEquals(4321, configURI.getListenPort());
+        Assert.assertEquals("1.1.1.1", configURI.getBindAddress());
+    }
+
+    @Test
+    public void testMulticase1() throws UnknownHostException {
+        ConfigURI configURI = new ConfigURI("tuscany:myDomain?multicast=off");
+        Assert.assertEquals("myDomain", configURI.getDomainName());
+        Assert.assertTrue(configURI.isMulticastDisabled());
+    }
+
+    @Test
+    public void testMulticase2() throws UnknownHostException {
+        ConfigURI configURI = new ConfigURI("tuscany:myDomain?multicast=1.2.3.4:67");
+        Assert.assertEquals("myDomain", configURI.getDomainName());
+        Assert.assertFalse(configURI.isMulticastDisabled());
+        Assert.assertEquals("1.2.3.4", configURI.getMulticastAddress());
+        Assert.assertEquals(67, configURI.getMulticastPort());
+    }
+
+    @Test
+    public void testMulticase3() throws UnknownHostException {
+        ConfigURI configURI = new ConfigURI("tuscany:myDomain?multicast=1.2.3.4");
+        Assert.assertEquals("myDomain", configURI.getDomainName());
+        Assert.assertFalse(configURI.isMulticastDisabled());
+        Assert.assertEquals("1.2.3.4", configURI.getMulticastAddress());
+        Assert.assertEquals(51482, configURI.getMulticastPort());
+    }
+
+    @Test
+    public void testPassword() {
+        ConfigURI configURI = new ConfigURI("tuscany:myDomain?password=bla");
+        Assert.assertEquals("myDomain", configURI.getDomainName());
+        Assert.assertEquals("bla", configURI.getPassword());
+    }
+
+    @Test
+    public void testRemotes() throws UnknownHostException {
+        ConfigURI configURI = new ConfigURI("tuscany:myDomain?remotes=1.1.1.1:23,2.2.2.2");
+        Assert.assertEquals("myDomain", configURI.getDomainName());
+        Assert.assertTrue(configURI.isMulticastDisabled());
+        Assert.assertEquals(2, configURI.getRemotes().size());
+        Assert.assertEquals("1.1.1.1:23", configURI.getRemotes().get(0));
+        Assert.assertEquals("2.2.2.2:14820", configURI.getRemotes().get(1));
+    }
+
+}

Modified: tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/test/java/org/apache/tuscany/sca/endpoint/hazelcast/RegistryTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/test/java/org/apache/tuscany/sca/endpoint/hazelcast/RegistryTestCase.java?rev=896269&r1=896268&r2=896269&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/test/java/org/apache/tuscany/sca/endpoint/hazelcast/RegistryTestCase.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/endpoint-hazelcast/src/test/java/org/apache/tuscany/sca/endpoint/hazelcast/RegistryTestCase.java Tue Jan  5 23:25:33 2010
@@ -25,6 +25,7 @@
 
 import junit.framework.Assert;
 
+import org.junit.Ignore;
 import org.junit.Test;
 
 import com.hazelcast.config.Config;
@@ -35,6 +36,7 @@
 import com.hazelcast.core.IMap;
 import com.hazelcast.nio.Address;
 
+@Ignore
 public class RegistryTestCase {
 
     @Test