Package org.apache.tuscany.sca.host.corba.naming

Source Code of org.apache.tuscany.sca.host.corba.naming.TransientNameServer

/*
* 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.   
*/

/**
* @version $Rev: 924158 $ $Date: 2010-03-17 05:21:11 +0000 (Wed, 17 Mar 2010) $
*/
package org.apache.tuscany.sca.host.corba.naming;

import org.omg.CORBA.ORB;

/**
* A stand-alone naming service launchable from a command line.
*/
public class TransientNameServer {
    private final TransientNameService service;
    private final Object flag = new Object();
    private Boolean started;

    public TransientNameServer(String host, int port, String serviceName) {
        this.service = new TransientNameService(host, port, serviceName);
    }

    public ORB getORB() {
        return service.getORB();
    }

    public Thread start() {
        Thread t = new Thread() {
            public void run() {
                ORB orb = null;
                synchronized (flag) {
                    try {
                        service.run();
                        orb = service.getORB();
                        started = Boolean.TRUE;
                    } catch (Throwable e) {
                        started = Boolean.FALSE;
                        throw new IllegalStateException(e);
                    } finally {
                        flag.notifyAll();
                    }
                }
                // Wait for requests
                orb.run();
            }
        };
        t.setDaemon(true);
        t.start();
        checkState();
        return t.isAlive() ? t : null;
    }

    private Boolean checkState() {
        synchronized (flag) {
            while (started == null) {
                try {
                    flag.wait();
                } catch (InterruptedException e) {
                    return null;
                }
            }
            return started;
        }
    }

    public void stop() {
        if (Boolean.TRUE.equals(started)) {
            service.destroy();
            started = Boolean.FALSE;
        }
    }

    /**
     * Launch a name service as a stand alone process.  The
     * Host, port, and service name are controlled using
     * program arguments.
     *
     * @param args   The array of arguments for tailoring the service.
     *
     * @exception Exception
     */
    public static void main(String args[]) throws Exception {
        int port = TransientNameService.DEFAULT_SERVICE_PORT;
        String host = TransientNameService.DEFAULT_SERVICE_HOST;
        String serviceName = TransientNameService.DEFAULT_SERVICE_NAME;

        // see if we have
        for (int i = 0; i < args.length; i++) {
            if (args[i].equals("-ORBInitialPort")) {
                i++;
                if (i < args.length) {
                    port = java.lang.Integer.parseInt(args[i]);
                } else {
                    throw new IllegalArgumentException("Invalid -ORBInitialPort option");
                }
            } else if (args[i].equals("-ORBInitialHost")) {
                i++;
                if (i < args.length) {
                    host = args[i];
                } else {
                    throw new IllegalArgumentException("Invalid -ORBInitialHost option");
                }
            } else if (args[i].equals("-ORBServiceName")) {
                i++;
                if (i < args.length) {
                    serviceName = args[i];
                } else {
                    throw new IllegalArgumentException("Invalid -ORBServiceName option");
                }
            }

        }
        // create a services, and just spin it off.  We wait forever after that.
        TransientNameServer server = new TransientNameServer(host, port, serviceName);
        server.start().join();
    }

}
TOP

Related Classes of org.apache.tuscany.sca.host.corba.naming.TransientNameServer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.