/*
 * 
 * Copyright 2004 Sun Microsystems, Inc. All Rights Reserved.
 * 
 * The contents of this file are subject to the Sun Community Source
 * License v3.0/Jini Technology Specific Attachment v 1.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://wwws.sun.com/software/jini/licensing/SCSL3_JiniTSA1.html.
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
 * the License for the specific language governing rights and limitations
 * under the License.
 * 
 * The Reference Code is Jini Technology Core Platform code, v2.0. The
 * Developer of the Reference Code is Sun Microsystems, Inc.
 * 
 * Contributor(s): Sun Microsystems, Inc.
 * 
 * The contents of this file comply with the Jini Technology Core
 * Platform Compatibility Kit, v2.0A.
 * 
 * Tester(s): Sun Microsystems, Inc.
 * 
 * Test Platform(s):
 * Java 2 SDK, Standard Edition, Version 1.4.2_03 for Solaris(TM)SPARC/x86
 * Java 2 SDK, Standard Edition, Version 1.4.2_03 for Linux (Intel x86)
 * Java 2 SDK, Standard Edition, Version 1.4.2_03 for Windows (Intel Platform)
 * 
 */
package com.sun.jini.outrigger;

import java.io.IOException;
import java.rmi.Remote;
import java.rmi.MarshalledObject;
import java.rmi.activation.ActivationID;
import java.rmi.activation.ActivationException;
import javax.security.auth.login.LoginException;
import net.jini.config.ConfigurationException;
import com.sun.jini.start.LifeCycle;

/**
 * <code>OutriggerServerWrapper</code> subclass for
 * persistent servers.
 *
 * @author Sun Microsystems, Inc.
 * @since 2.0
 */
class PersistentOutriggerImpl extends OutriggerServerWrapper {
    /**
     * Create a new incarnation of an activatable
     * <code>OutriggerServerImpl</code> server.
     * @param activationID of the server, may be <code>null</code>.
     * @param data an array of <code>String</code>s (packaged in
     *        a marshalled object) that will be used 
     *        to obtain a <code>Configuration</code>.
     * @throws IOException if there is problem recovering data
     *         from disk, exporting the server, or unpacking
     *         <code>data</code>.
     * @throws ClassCastException if the value of <code>data.get()</code>
     *         is not an array of <code>String</code>s.
     * @throws ConfigurationException if the <code>Configuration</code> is 
     *         malformed.  
     * @throws ActivationException if activatable and there
     *         is a problem getting a reference to the activation system.
     * @throws LoginException if the <code>loginContext</code> specified
     *         in the configuration is non-null and throws 
     *         an exception when login is attempted.
     * @throws ClassNotFoundException if the classes of the objects
     *         encapsulated inside <code>data</code> can not be found.
     */
    PersistentOutriggerImpl(ActivationID activationID, 
			    MarshalledObject data) 
	throws IOException, ConfigurationException, LoginException,
	       ActivationException, ClassNotFoundException
    {
	super(activationID, (String[])data.get());
	allowCalls();
    }

    /**
     * Create a new non-activatable, persistent space.
     * The space will be implemented by a new
     * <code>OutriggerServerImpl()</code> server instance.
     * @param configArgs set of strings to be used to obtain a
     *                   <code>Configuration</code>.
     * @param lifeCycle the object to notify when this
     *                  service is destroyed.
     * @throws IOException if there is problem recovering data
     *         from disk or exporting the server for the space.
     * @throws ConfigurationException if the configuration is 
     *         malformed.  
     * @throws LoginException if the <code>loginContext</code> specified
     *         in the configuration is non-null and throws 
     *         an exception when login is attempted.
     */
    PersistentOutriggerImpl(String[] configArgs, LifeCycle lifeCycle) 
        throws IOException, ConfigurationException, LoginException
    {
	super(configArgs, lifeCycle, true);
	allowCalls();
    }
}

