You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tuscany.apache.org by Raymond Feng <en...@gmail.com> on 2008/08/05 09:07:12 UTC

Re: 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/

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: <wj...@apache.org>
Sent: Sunday, August 03, 2008 1:03 PM
To: <co...@tuscany.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/...

> 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;
>
> 

Re: 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/

Posted by Raymond Feng <en...@gmail.com>.
We could have a separate module such as host-corba-jse-tns that contains a 
ModuleActivator to start/stop the name server. If a test case or sample 
needs to start/stop the name server automaitcally, we can just just add the 
host-corba-jse-tns as a test/runtime dependency.

Thanks,
Raymond

--------------------------------------------------
From: "Wojtek Janiszewski" <wo...@gmail.com>
Sent: Wednesday, August 06, 2008 4:11 PM
To: <de...@tuscany.apache.org>
Subject: Re: 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/

> Hi,
>
> I've tried to make it similarly to binding.ws, where (as I understand) 
> servlet container can be spawned inside node or it can be provided by 
> environment (ie. deploying web app. in Tomcat). Idea also was to share 
> created name servers between service bindings, but now I agree that having 
> this flag in binding scope is not right.
>
> Is there any place in Tuscany where we could move creating name server, or 
> we are leaving it to user?
>
> I also thought about creating additional CORBA host ie. 
> host-corba-jse-tns, which would be similar to existing host-corba-jse, but 
> would always provide name servers for every service bindings. Does it make 
> sense? Would it be useful?
>
> Thanks,
> Wojtek
>
> Mike Edwards wrote:
>> Raymond Feng wrote:
>>> 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
>>>
>> Folks,
>>
>> I tend to agree with Raymond on this.
>>
>> Having to provide a name server is really part of the configuration of 
>> the Tuscany runtime, not configuration of an individual binding.
>>
>> It would be valid for a particular binding to indicate that it needs a 
>> name server and will not run without one - this is quite close in concept 
>> to an implementation intent - @requires="NameServer"
>>
>> This would then fail to run on a Tuscany runtime that does not have a 
>> name server available.
>>
>> The configuring of a nameserver should be left to configuration of the 
>> node(s) that are started to run the composite(s).
>>
>>
>> Yours,  Mike.
>>
> 

Re: To boot or not to boot... a Corba name server, was: 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/

Posted by Wojtek Janiszewski <wo...@gmail.com>.
Hi,
here are details about proposition patch under [1]. Please take a look 
at comments inline.

Raymond Feng wrote:
 > We could have a separate module such as host-corba-jse-tns that contains
 > a ModuleActivator to start/stop the name server. If a test case or
 > sample needs to start/stop the name server automaitcally, we can just
 > just add the host-corba-jse-tns as a test/runtime dependency.

This solution only could create one TNS on fixed port. Don't we want 
this module to provide TNSs for every CORBA service bindings?

Jean-Sebastien Delfino wrote:
> Wojtek Janiszewski wrote:
> ...
>> I also thought about creating additional CORBA host ie. 
>> host-corba-jse-tns, which would be similar to existing host-corba-jse, 
>> but would always provide name servers for every service bindings. Does 
>> it make sense? Would it be useful?
>>
> 
> Makes sense to me.
> 
> A variation of this, maybe simpler could be to have host-corba-jse-tns 
> just boot the name server, so as a user, with host-corba-jse I get an 
> ORB, with host-corba-jse + host-corba-jse-tns I get an ORB + a name server.
> 
> Makes sense? if not, then again your proposal sounds good to me too.
> 

Your proposal seems to be more flexible than mine.

I don't want to mess in svn too much so I've published my proposition as 
patch, which can be found under [1]. Here's how the host-corba-jse-tns 
works:
1. It should be used together with host-corba-jse module
2. Both host-corba-jse and host-corba-jse-tns are formed in something 
like invocation chain. host-corba-jse-tns registers in chain with 
highest priority so its methods always executes before host-corba-jse 
methods. This chain can be extended easily by adding other CorbaHost 
modules.
3. host-corba-jse-tns for method registerServant creates TNS, method 
unregisterServant stops TNS (if no other service binding is using it).
4. No changes were made to host-corba-jse so after removing 
host-corba-jse-tns dependency host-corba-jse acts like before.

What do you think?

Thanks,
Wojtek

[1] - https://issues.apache.org/jira/browse/TUSCANY-2357

To boot or not to boot... a Corba name server, was: 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/

Posted by Jean-Sebastien Delfino <js...@apache.org>.
Wojtek Janiszewski wrote:
...
> I also thought about creating additional CORBA host ie. 
> host-corba-jse-tns, which would be similar to existing host-corba-jse, 
> but would always provide name servers for every service bindings. Does 
> it make sense? Would it be useful?
> 

Makes sense to me.

A variation of this, maybe simpler could be to have host-corba-jse-tns 
just boot the name server, so as a user, with host-corba-jse I get an 
ORB, with host-corba-jse + host-corba-jse-tns I get an ORB + a name server.

Makes sense? if not, then again your proposal sounds good to me too.

-- 
Jean-Sebastien

Re: 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/

Posted by Wojtek Janiszewski <wo...@gmail.com>.
Hi,

I've tried to make it similarly to binding.ws, where (as I understand) 
servlet container can be spawned inside node or it can be provided by 
environment (ie. deploying web app. in Tomcat). Idea also was to share 
created name servers between service bindings, but now I agree that 
having this flag in binding scope is not right.

Is there any place in Tuscany where we could move creating name server, 
or we are leaving it to user?

I also thought about creating additional CORBA host ie. 
host-corba-jse-tns, which would be similar to existing host-corba-jse, 
but would always provide name servers for every service bindings. Does 
it make sense? Would it be useful?

Thanks,
Wojtek

Mike Edwards wrote:
> Raymond Feng wrote:
>> 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
>>
> Folks,
> 
> I tend to agree with Raymond on this.
> 
> Having to provide a name server is really part of the configuration of 
> the Tuscany runtime, not configuration of an individual binding.
> 
> It would be valid for a particular binding to indicate that it needs a 
> name server and will not run without one - this is quite close in 
> concept to an implementation intent - @requires="NameServer"
> 
> This would then fail to run on a Tuscany runtime that does not have a 
> name server available.
> 
> The configuring of a nameserver should be left to configuration of the 
> node(s) that are started to run the composite(s).
> 
> 
> Yours,  Mike.
> 


Re: 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/

Posted by Mike Edwards <mi...@gmail.com>.
Raymond Feng wrote:
> 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
> 
Folks,

I tend to agree with Raymond on this.

Having to provide a name server is really part of the configuration of the Tuscany runtime, not 
configuration of an individual binding.

It would be valid for a particular binding to indicate that it needs a name server and will not run 
without one - this is quite close in concept to an implementation intent - @requires="NameServer"

This would then fail to run on a Tuscany runtime that does not have a name server available.

The configuring of a nameserver should be left to configuration of the node(s) that are started to 
run the composite(s).


Yours,  Mike.