Package org.jacorb.imr

Source Code of org.jacorb.imr.ImRPOAInfo

/*
*        JacORB - a free Java ORB
*
*   Copyright (C) 1999-2004 Gerald Brose
*
*   This library is free software; you can redistribute it and/or
*   modify it under the terms of the GNU Library General Public
*   License as published by the Free Software Foundation; either
*   version 2 of the License, or (at your option) any later version.
*
*   This library is distributed in the hope that it will be useful,
*   but WITHOUT ANY WARRANTY; without even the implied warranty of
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*   Library General Public License for more details.
*
*   You should have received a copy of the GNU Library General Public
*   License along with this library; if not, write to the Free
*   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/

package org.jacorb.imr;

import org.jacorb.imr.RegistrationPackage.IllegalPOAName;

/**
* This class stores information about a POA. It also provides methods
* for reactivation, conversion, and for waiting for reactivation.
*
* @author Nicolas Noffke
*
* @version $Id: ImRPOAInfo.java,v 1.12 2008-11-14 08:55:26 nick.cross Exp $
*/

public class ImRPOAInfo
    implements java.io.Serializable
{
    public static final long serialVersionUID = 1l;

    protected int port;
    protected ImRServerInfo server;
    protected String host;
    protected String name;
    protected boolean active;
    protected long timeout; // 2 min.

    /**
     * The constructor of this class.
     *
     * @param name the POAs name.
     * @param host the POAs host.
     * @param port the port the POA listens on.
     * @param server the server the POA is associated with.
     * @exception IllegalPOAName thrown when <code>name</code> is
     * <code>null</code> or of length zero.
     */

    public ImRPOAInfo(String name,
                      String host,
                      int port,
                      ImRServerInfo server,
                      long timeout)
        throws IllegalPOAName
    {
        if (name == null || name.length() == 0)
        {
            throw new IllegalPOAName(name);
        }

        this.name = name;
        this.host = host;
        this.port = port;
        this.server = server;
        this.active = true;
        this.timeout = timeout;
    }

    /**
     * "Converts" this Object to an instance of the POAInfo class.
     *
     * @return a POAInfo object.
     */

    public POAInfo toPOAInfo()
    {
        return new POAInfo(name, host, port,server.name, active);
    }

    /**
     * Reactivates this POA, i.e. sets it to active and unblocks any
     * waiting threads.
     *
     * @param host the POAs new host.
     * @param port the POAs new port.
     */

    public synchronized void reactivate(String host, int port)
    {
        this.host = host;
        this.port = port;
        active = true;
        server.active = true;
        server.restarting = false;
        notifyAll();
    }

    /**
     * This method blocks until the POA is reactivated, or the
     * timeout is exceeded.
     *
     * @return false, if the timeout has been exceeded, true otherwise.
     */

    public synchronized boolean awaitActivation()
    {
        while(!active)
        {
            try
            {
                long _sleep_begin = System.currentTimeMillis();
                wait(timeout);
                if (!active &&
                    (System.currentTimeMillis() - _sleep_begin) > timeout)
                {
                    return false;
                }
            }
            catch (java.lang.Exception e)
            {
                //o.k., not nice but since this class is Serializable, we
                //can't keep a Logger member
                e.printStackTrace();
            }
        }

        return true;
    }
} // ImRPOAInfo
TOP

Related Classes of org.jacorb.imr.ImRPOAInfo

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.