Hi,

I'm very sure if it's a good idea to add "provideNameServer" flag into the <binding.corba> which will be affecting users at the programming model level. What would happen if two SCA services with binding.corba set the flag to true? Depending on the environment, the name server can be started/stopped differently. For example, the JEE app server usually starts/stops the CORBA name server with the server. We can also run tnameserv or orbd commands to start the name server.

Thanks,
Raymond

--------------------------------------------------
From: <[EMAIL PROTECTED]>
Sent: Sunday, August 03, 2008 1:03 PM
To: <[EMAIL PROTECTED]>
Subject: svn commit: r682203 - in /tuscany/java/sca: itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/ itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/types/ itest/corba/src/test/resources/ modules/binding-corba-runtime/src/main/java/org/...

Author: wjaniszewski
Date: Sun Aug  3 13:03:45 2008
New Revision: 682203

URL: http://svn.apache.org/viewvc?rev=682203&view=rev
Log:
In <binding.corba> added configuration option to allow creating name server by Tuscany, new test scenario in itest/corba.

Added:

tuscany/java/sca/itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/ScenarioFiveTestCase.java

tuscany/java/sca/itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/types/ScenarioFive.java

tuscany/java/sca/itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/types/ScenarioFiveComponent.java

tuscany/java/sca/itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/types/ScenarioFiveImpl.java
   tuscany/java/sca/itest/corba/src/test/resources/ScenarioFive.composite

tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/util/SocketUtil.java (with props)
Removed:

tuscany/java/sca/modules/binding-sca-corba/src/main/java/org/apache/tuscany/sca/binding/sca/corba/impl/SocketUtil.java
Modified:

tuscany/java/sca/itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/ScenarioFourTestCase.java

tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/CorbaServiceBindingProvider.java

tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/CorbaBinding.java

tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/impl/CorbaBindingImpl.java

tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/impl/CorbaBindingProcessor.java

tuscany/java/sca/modules/binding-sca-corba/src/main/java/org/apache/tuscany/sca/binding/sca/corba/impl/CorbaSCAServiceBindingProvider.java

Added: tuscany/java/sca/itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/ScenarioFiveTestCase.java URL: http://svn.apache.org/viewvc/tuscany/java/sca/itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/ScenarioFiveTestCase.java?rev=682203&view=auto
==============================================================================
--- tuscany/java/sca/itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/ScenarioFiveTestCase.java (added) +++ tuscany/java/sca/itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/ScenarioFiveTestCase.java Sun Aug 3 13:03:45 2008
@@ -0,0 +1,51 @@
+/*
+ * 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.test.corba;
+
+import static org.junit.Assert.fail;
+
+import org.apache.tuscany.sca.host.embedded.SCADomain;
+import org.apache.tuscany.sca.test.corba.types.ScenarioFive;
+import org.apache.tuscany.sca.test.corba.types.ScenarioFiveComponent;
+import org.junit.Test;
+
+/**
+ * Tests usage of "provideNameServer" attribute in <binding.corba>
+ */
+public class ScenarioFiveTestCase {
+
+    /**
+     * Tests binding with provided name server
+     */
+    @Test
+    public void test_providedNameServer() {
+        try {
+ // just make sure we can obtain and use the reference with success + SCADomain domain = SCADomain.newInstance("ScenarioFive.composite");
+            ScenarioFive scenarioFive =
+ domain.getService(ScenarioFiveComponent.class, "ScenarioFive").getScenarioFive();
+            scenarioFive.doNothing();
+        } catch (Exception e) {
+            e.printStackTrace();
+            fail();
+        }
+    }
+
+}

Modified: tuscany/java/sca/itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/ScenarioFourTestCase.java URL: http://svn.apache.org/viewvc/tuscany/java/sca/itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/ScenarioFourTestCase.java?rev=682203&r1=682202&r2=682203&view=diff
==============================================================================
--- tuscany/java/sca/itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/ScenarioFourTestCase.java (original) +++ tuscany/java/sca/itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/ScenarioFourTestCase.java Sun Aug 3 13:03:45 2008
@@ -34,7 +34,6 @@
import org.junit.BeforeClass;
import org.junit.Test;

-
/**
 * Tests SCA default binding over CORBA binding
 */
@@ -85,7 +84,7 @@
            Assert.fail(e.getMessage());
        }
    }
-
+
    /**
     * Test for JAXB exceptions
     */
@@ -101,7 +100,7 @@
            fail();
        }
    }
-
+
    /**
     * General test for passing SDO objects
     */
@@ -112,20 +111,22 @@
            scenarioFourSdo.setMessage("Test1");
            scenarioFourSdo.setSymbol("Test2");
ScenarioFourSdo result = scenarioFour.passScenarioFourStruct(scenarioFourSdo); - assertTrue(scenarioFourSdo.getMessage().equals(result.getMessage()) && scenarioFourSdo.getSymbol().equals(result.getSymbol())); + assertTrue(scenarioFourSdo.getMessage().equals(result.getMessage()) && scenarioFourSdo.getSymbol()
+                .equals(result.getSymbol()));
        } catch (Exception e) {
            e.printStackTrace();
            fail();
        }
    }
-
+
    /**
-     * Tests reusing local name server with multiple bindings
+     * Tests reusing local name server with multiple bindings
     */
    @Test
    public void test_nameServerReuse() {
        try {
- ScenarioFour scenarioFour = domain.getService(ScenarioFourComponent.class, "ScenarioFourReuse").getScenarioFour();
+            ScenarioFour scenarioFour =
+ domain.getService(ScenarioFourComponent.class, "ScenarioFourReuse").getScenarioFour();
            ScenarioFourStruct struct = new ScenarioFourStruct();
            scenarioFour.setStruct(struct);
        } catch (Exception e) {

Added: tuscany/java/sca/itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/types/ScenarioFive.java URL: http://svn.apache.org/viewvc/tuscany/java/sca/itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/types/ScenarioFive.java?rev=682203&view=auto
==============================================================================
--- tuscany/java/sca/itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/types/ScenarioFive.java (added) +++ tuscany/java/sca/itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/types/ScenarioFive.java Sun Aug 3 13:03:45 2008
@@ -0,0 +1,32 @@
+/*
+ * 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.test.corba.types;
+
+import org.osoa.sca.annotations.Remotable;
+
+/**
+ * Operations for scenario five
+ */
[EMAIL PROTECTED]
+public interface ScenarioFive {
+
+    void doNothing();
+
+}

Added: tuscany/java/sca/itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/types/ScenarioFiveComponent.java URL: http://svn.apache.org/viewvc/tuscany/java/sca/itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/types/ScenarioFiveComponent.java?rev=682203&view=auto
==============================================================================
--- tuscany/java/sca/itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/types/ScenarioFiveComponent.java (added) +++ tuscany/java/sca/itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/types/ScenarioFiveComponent.java Sun Aug 3 13:03:45 2008
@@ -0,0 +1,40 @@
+/*
+ * 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.test.corba.types;
+
+import org.osoa.sca.annotations.Reference;
+
+/**
+ * Component for obtaining ScenarioFive reference
+ */
+public class ScenarioFiveComponent {
+
+    private ScenarioFive scenarioFive;
+
+    @Reference
+    public void setScenarioFive(ScenarioFive scenarioFive) {
+        this.scenarioFive = scenarioFive;
+    }
+
+    public ScenarioFive getScenarioFive() {
+        return scenarioFive;
+    }
+
+}

Added: tuscany/java/sca/itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/types/ScenarioFiveImpl.java URL: http://svn.apache.org/viewvc/tuscany/java/sca/itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/types/ScenarioFiveImpl.java?rev=682203&view=auto
==============================================================================
--- tuscany/java/sca/itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/types/ScenarioFiveImpl.java (added) +++ tuscany/java/sca/itest/corba/src/test/java/org/apache/tuscany/sca/test/corba/types/ScenarioFiveImpl.java Sun Aug 3 13:03:45 2008
@@ -0,0 +1,31 @@
+/*
+ * 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.test.corba.types;
+
+/**
+ * Implementation of ScenarioFive service
+ */
+public class ScenarioFiveImpl implements ScenarioFive {
+
+    public void doNothing() {
+        // does nothing
+    }
+
+}

Added: tuscany/java/sca/itest/corba/src/test/resources/ScenarioFive.composite URL: http://svn.apache.org/viewvc/tuscany/java/sca/itest/corba/src/test/resources/ScenarioFive.composite?rev=682203&view=auto
==============================================================================
--- tuscany/java/sca/itest/corba/src/test/resources/ScenarioFive.composite (added) +++ tuscany/java/sca/itest/corba/src/test/resources/ScenarioFive.composite Sun Aug 3 13:03:45 2008
@@ -0,0 +1,41 @@
+<!--
+ * 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.
+-->
+
+<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="Corba">
+
+    <component name="ScenarioFiveService">
+ <implementation.java class="org.apache.tuscany.sca.test.corba.types.ScenarioFiveImpl" />
+    </component>
+ <service name="ScenarioFive" promote="ScenarioFiveService">
+ <interface.java interface="org.apache.tuscany.sca.test.corba.types.ScenarioFive"/>
+        <binding.sca uri="corbaname::localhost:5090#ScenarioFive"/>
+    </service>
+
+    <component name="ScenarioFive">
+ <implementation.java class="org.apache.tuscany.sca.test.corba.types.ScenarioFiveComponent" />
+        <reference name="scenarioFive">
+ <binding.sca uri="corbaname::localhost:5090#ScenarioFive"/>
+        </reference>
+    </component>
+
+</composite>

Modified: tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/CorbaServiceBindingProvider.java URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/CorbaServiceBindingProvider.java?rev=682203&r1=682202&r2=682203&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/CorbaServiceBindingProvider.java (original) +++ tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/CorbaServiceBindingProvider.java Sun Aug 3 13:03:45 2008
@@ -24,7 +24,9 @@
import org.apache.tuscany.sca.binding.corba.impl.service.DynaCorbaServant;
import org.apache.tuscany.sca.binding.corba.impl.service.InvocationProxy;
import org.apache.tuscany.sca.binding.corba.impl.types.util.Utils;
+import org.apache.tuscany.sca.binding.corba.impl.util.SocketUtil;
import org.apache.tuscany.sca.host.corba.CorbaHost;
+import org.apache.tuscany.sca.host.corba.CorbanameURL;
import org.apache.tuscany.sca.interfacedef.InterfaceContract;
import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
import org.apache.tuscany.sca.provider.ServiceBindingProvider;
@@ -40,11 +42,20 @@
    private CorbaHost host;
    private RuntimeComponentService service;
    private DynaCorbaServant servant;
+    private boolean isLocalhost;
+    private int port;

public CorbaServiceBindingProvider(CorbaBinding binding, CorbaHost host, RuntimeComponentService service) {
        this.binding = binding;
        this.host = host;
        this.service = service;
+        if (binding.isProvideNameServer()) {
+ CorbanameURL details = new CorbanameURL(binding.getCorbaname());
+            isLocalhost = SocketUtil.isLocalhost(details.getHost());
+            if (isLocalhost) {
+                port = details.getPort();
+            }
+        }
    }

    /**
@@ -63,6 +74,9 @@
InvocationProxy proxy = new ComponentInvocationProxy(service, service.getRuntimeWire(binding), javaClass); servant = new DynaCorbaServant(proxy, Utils.getTypeId(javaClass));
            servant.setIds(new String[] {binding.getId()});
+            if (binding.isProvideNameServer() && isLocalhost) {
+                host.createLocalNameServer(port);
+            }
            host.registerServant(binding.getCorbaname(), servant);
        } catch (Exception e) {
            throw new ServiceRuntimeException(e);
@@ -75,6 +89,9 @@
     */
    public void stop() {
        try {
+            if (binding.isProvideNameServer() && isLocalhost) {
+                host.releaseLocalNameServer(port);
+            }
             host.unregisterServant(binding.getCorbaname());
        } catch (Exception e) {
            throw new ServiceRuntimeException(e);

Added: tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/util/SocketUtil.java URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/util/SocketUtil.java?rev=682203&view=auto
==============================================================================
--- tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/util/SocketUtil.java (added) +++ tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/util/SocketUtil.java Sun Aug 3 13:03:45 2008
@@ -0,0 +1,225 @@
+/*
+ * 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.corba.impl.util;
+
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.net.UnknownHostException;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Class partially copied from eclipse wst project
+ * (http://repo1.maven.org/maven2/org/eclipse/wst/server/core/1.0.205-v20070829b/).
+ * Finally we should use jar from maven dependency. Problem described in
+ * http://www.fornax-platform.org/cp/display/fornax/2.+Hello+World+Tutorial+(CSC)?replyToComment=2098#comment-2098
+ * needs to be fixed.
+ */
+public class SocketUtil {
+
+    protected static final Object lock = new Object();
+
+    private static Set<String> localHostCache;
+    private static Set<String> notLocalHostCache = new HashSet<String>();
+ private static Map<String, CacheThread> threadMap = new HashMap<String, CacheThread>();
+
+    private static Set<InetAddress> addressCache;
+
+    static class CacheThread extends Thread {
+        private Set<InetAddress> currentAddresses;
+        private Set<String> addressList;
+        private String host;
+        private Set<String> nonAddressList;
+        private Map threadMap2;
+
+        public CacheThread(String host,
+                           Set<InetAddress> currentAddresses,
+                           Set<String> addressList,
+                           Set<String> nonAddressList,
+                           Map threadMap2) {
+            super("Caching localhost information");
+            this.host = host;
+            this.currentAddresses = currentAddresses;
+            this.addressList = addressList;
+            this.nonAddressList = nonAddressList;
+            this.threadMap2 = threadMap2;
+        }
+
+        public void run() {
+            if (currentAddresses != null) {
+                Iterator iter2 = currentAddresses.iterator();
+                while (iter2.hasNext()) {
+                    InetAddress addr = (InetAddress)iter2.next();
+                    String hostname = addr.getHostName();
+                    String hostname2 = addr.getCanonicalHostName();
+                    synchronized (lock) {
+ if (hostname != null && !addressList.contains(hostname))
+                            addressList.add(hostname);
+ if (hostname2 != null && !addressList.contains(hostname2))
+                            addressList.add(hostname2);
+                    }
+                }
+            }
+
+            try {
+                InetAddress[] addrs = InetAddress.getAllByName(host);
+                int length = addrs.length;
+                for (int j = 0; j < length; j++) {
+                    InetAddress addr = addrs[0];
+                    String hostname = addr.getHostName();
+                    String hostname2 = addr.getCanonicalHostName();
+                    synchronized (lock) {
+                        if (addr.isLoopbackAddress()) {
+ if (hostname != null && !addressList.contains(hostname))
+                                addressList.add(hostname);
+ if (hostname2 != null && !addressList.contains(hostname2))
+                                addressList.add(hostname2);
+                        } else {
+ if (hostname != null && !nonAddressList.contains(hostname))
+                                nonAddressList.add(hostname);
+ if (hostname2 != null && !nonAddressList.contains(hostname2))
+                                nonAddressList.add(hostname2);
+                        }
+                    }
+                }
+            } catch (UnknownHostException e) {
+                synchronized (lock) {
+                    if (host != null && !nonAddressList.contains(host))
+                        nonAddressList.add(host);
+                }
+            }
+            synchronized (lock) {
+                threadMap2.remove(host);
+            }
+        }
+    }
+
+    public static boolean isLocalhost(final String host) {
+        if (host == null || host.equals(""))
+            return false;
+
+        if ("localhost".equals(host) || "127.0.0.1".equals(host))
+            return true;
+
+        // check simple cases
+        try {
+            InetAddress localHostaddr = InetAddress.getLocalHost();
+ if (localHostaddr.getHostName().equals(host) || host.equals(localHostaddr.getCanonicalHostName())
+                || localHostaddr.getHostAddress().equals(host))
+                return true;
+        } catch (Exception e) {
+
+        }
+
+        // check for current thread and wait if necessary
+        boolean currentThread = false;
+        try {
+            Thread t = null;
+            synchronized (lock) {
+                t = threadMap.get(host);
+            }
+            if (t != null && t.isAlive()) {
+                currentThread = true;
+                t.join(30);
+            }
+        } catch (Exception e) {
+
+        }
+
+        // check if cache is still ok
+        boolean refreshedCache = false;
+        try {
+            // get network interfaces
+ final Set<InetAddress> currentAddresses = new HashSet<InetAddress>();
+            currentAddresses.add(InetAddress.getLocalHost());
+            Enumeration nis = NetworkInterface.getNetworkInterfaces();
+            while (nis.hasMoreElements()) {
+ NetworkInterface inter = (NetworkInterface)nis.nextElement();
+                Enumeration<InetAddress> ias = inter.getInetAddresses();
+                while (ias.hasMoreElements())
+                    currentAddresses.add(ias.nextElement());
+            }
+
+            // check if cache is empty or old and refill it if necessary
+ if (addressCache == null || !addressCache.containsAll(currentAddresses)
+                || !currentAddresses.containsAll(addressCache)) {
+                CacheThread cacheThread = null;
+                refreshedCache = true;
+
+                synchronized (lock) {
+                    addressCache = currentAddresses;
+                    notLocalHostCache = new HashSet<String>();
+ localHostCache = new HashSet<String>(currentAddresses.size() * 3);
+
+                    Iterator iter = currentAddresses.iterator();
+                    while (iter.hasNext()) {
+                        InetAddress addr = (InetAddress)iter.next();
+                        String a = addr.getHostAddress();
+                        if (a != null && !localHostCache.contains(a))
+                            localHostCache.add(a);
+                    }
+
+ cacheThread = new CacheThread(host, currentAddresses, localHostCache, notLocalHostCache, threadMap);
+                    threadMap.put(host, cacheThread);
+                    cacheThread.setDaemon(true);
+                    cacheThread.setPriority(Thread.NORM_PRIORITY - 1);
+                    cacheThread.start();
+                }
+                cacheThread.join(200);
+            }
+        } catch (Exception e) {
+        }
+
+        synchronized (lock) {
+            if (localHostCache.contains(host))
+                return true;
+            if (notLocalHostCache.contains(host))
+                return false;
+        }
+
+ // if the cache hasn't been cleared, maybe we still need to lookup the
+        // host
+        if (!refreshedCache && !currentThread) {
+            try {
+                CacheThread cacheThread = null;
+                synchronized (lock) {
+ cacheThread = new CacheThread(host, null, localHostCache, notLocalHostCache, threadMap);
+                    threadMap.put(host, cacheThread);
+                    cacheThread.setDaemon(true);
+                    cacheThread.setPriority(Thread.NORM_PRIORITY - 1);
+                    cacheThread.start();
+                }
+                cacheThread.join(75);
+
+                synchronized (lock) {
+                    if (localHostCache.contains(host))
+                        return true;
+                }
+            } catch (Exception e) {
+            }
+        }
+        return false;
+    }
+
+}

Propchange: tuscany/java/sca/modules/binding-corba-runtime/src/main/java/org/apache/tuscany/sca/binding/corba/impl/util/SocketUtil.java
------------------------------------------------------------------------------
   svn:executable = *

Modified: tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/CorbaBinding.java URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/CorbaBinding.java?rev=682203&r1=682202&r2=682203&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/CorbaBinding.java (original) +++ tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/CorbaBinding.java Sun Aug 3 13:03:45 2008
@@ -43,4 +43,8 @@
    void setId(String id);

    String getCorbaname();
+
+    boolean isProvideNameServer();
+
+    void setProvideNameServer(boolean provideNameServer);
}

Modified: tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/impl/CorbaBindingImpl.java URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/impl/CorbaBindingImpl.java?rev=682203&r1=682202&r2=682203&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/impl/CorbaBindingImpl.java (original) +++ tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/impl/CorbaBindingImpl.java Sun Aug 3 13:03:45 2008
@@ -38,7 +38,8 @@
    private String host;
    private int port;
    private String id;
-
+    private boolean provideNameServer;
+
    private List<Intent> requiredIntents = new ArrayList<Intent>();
    private List<PolicySet> policySets = new ArrayList<PolicySet>();
    private IntentAttachPointType intentAttachPointType;
@@ -129,4 +130,12 @@
return CorbaHostUtils.isValidCorbanameURI(getURI()) ? getURI(): CorbaHostUtils.createCorbanameURI(getHost(), getPort(), getName());
    }

+    public boolean isProvideNameServer() {
+        return provideNameServer;
+    }
+
+    public void setProvideNameServer(boolean provideNameServer) {
+        this.provideNameServer = provideNameServer;
+    }
+
}

Modified: tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/impl/CorbaBindingProcessor.java URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/impl/CorbaBindingProcessor.java?rev=682203&r1=682202&r2=682203&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/impl/CorbaBindingProcessor.java (original) +++ tuscany/java/sca/modules/binding-corba/src/main/java/org/apache/tuscany/sca/binding/corba/impl/CorbaBindingProcessor.java Sun Aug 3 13:03:45 2008
@@ -80,11 +80,16 @@
        if (uri != null) {
            binding.setURI(uri);
        }
+
        // Read CORBA id
        String id = reader.getAttributeValue(null, "id");
        if (id != null) {
            binding.setId(id);
        }
+
+        // Read name server request
+ String provideNameServer = reader.getAttributeValue(null, "provideNameServer"); + binding.setProvideNameServer("true".equals(provideNameServer) ? true : false);
        return binding;
    }

@@ -114,7 +119,10 @@
        if (model.getId() != null) {
            writer.writeAttribute("id", model.getId());
        }
-
+
+        if (model.isProvideNameServer()) {
+            writer.writeAttribute("provideNameServer", "true");
+        }
        writer.writeEndElement();
    }


Modified: tuscany/java/sca/modules/binding-sca-corba/src/main/java/org/apache/tuscany/sca/binding/sca/corba/impl/CorbaSCAServiceBindingProvider.java URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-sca-corba/src/main/java/org/apache/tuscany/sca/binding/sca/corba/impl/CorbaSCAServiceBindingProvider.java?rev=682203&r1=682202&r2=682203&view=diff
==============================================================================
--- tuscany/java/sca/modules/binding-sca-corba/src/main/java/org/apache/tuscany/sca/binding/sca/corba/impl/CorbaSCAServiceBindingProvider.java (original) +++ tuscany/java/sca/modules/binding-sca-corba/src/main/java/org/apache/tuscany/sca/binding/sca/corba/impl/CorbaSCAServiceBindingProvider.java Sun Aug 3 13:03:45 2008
@@ -23,6 +23,7 @@
import org.apache.tuscany.sca.assembly.SCABinding;
import org.apache.tuscany.sca.binding.corba.impl.service.DynaCorbaServant;
import org.apache.tuscany.sca.binding.corba.impl.service.InvocationProxy;
+import org.apache.tuscany.sca.binding.corba.impl.util.SocketUtil;
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;


Reply via email to