tuscany-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From wjaniszew...@apache.org
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/...
Date Sun, 03 Aug 2008 20:03:46 GMT
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
+ */
+@Remotable
+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;



Mime
View raw message