/*
* 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 net.jini.core.lease;
import java.rmi.RemoteException;
/**
* The Lease interface defines a type of object that is returned to the
* lease holder and issued by the lease grantor. Particular instances of
* the Lease type will be created by the grantors of a lease, and returned
* to the holder of the lease as part of the return value from a call that
* allocates a leased resource. The call that requests a leased resource
* will typically include a requested duration for the lease. If the request
* is for a particular duration, the lease grantor is required to grant a
* lease of no more than the requested period of time. A lease may be granted
* for a period of time shorter than that requested.
*
* @author Sun Microsystems, Inc.
*
* @since 1.0
*/
public interface Lease {
/**
* Used to request a lease that never expires.
*/
long FOREVER = Long.MAX_VALUE;
/**
* Used by the requestor to indicate that there is no particular lease
* time desired, and that the grantor of the lease should supply a time
* that is most convenient for the grantor.
*/
long ANY = -1;
/**
* The serialized form of the lease will convert the time of lease
* expiration into a duration (in milliseconds) from the time of
* serialization. This form is best used when transmitting a Lease
* object from one address space to another (via an RMI call) where
* it cannot be assumed that the address spaces have synchronized clocks.
*/
int DURATION = 1;
/**
* The serialized form of the lease will contain the time of expiration
* stored as an absolute time, represented in terms of milliseconds since
* the beginning of the epoch.
*/
int ABSOLUTE = 2;
/**
* Returns a <code>long</code> that indicates the time that the
* lease will expire. This time is represented as
* milliseconds from the beginning of the epoch, relative to the local
* clock.
*
* @return a <code>long</code> that indicates the time that the
* lease will expire
*/
long getExpiration();
/**
* Used by the lease holder to indicate that it is no longer interested
* in the resource or information held by the lease. If the leased
* information or resource could cause a callback to the lease holder
* (or some other object on behalf of the lease holder), the lease
* grantor should not issue such a callback after the lease has been
* cancelled. The overall effect of a cancel call is the same as
* lease expiration, but instead of happening at the end of a pre-agreed
* duration it happens immediately.
*
* @throws UnknownLeaseException the lease being cancelled is unknown
* to the lease grantor
* @throws RemoteException
*/
void cancel() throws UnknownLeaseException, RemoteException;
/**
* Used to renew a lease for an additional period of time, specified in
* milliseconds. This duration is not added to the original lease, but
* is used to determine a new expiration time for the existing lease.
* If the renewal is granted this is reflected in value returned by
* getExpiration. If the renewal fails, the lease is left intact for
* the same duration that was in force prior to the call to renew.
*
* @param duration the requested duration in milliseconds
*
* @throws LeaseDeniedException the lease grantor is unable or
* unwilling to renew the lease
* @throws UnknownLeaseException the lease being renewed is unknown
* to the lease grantor
* @throws RemoteException
*/
void renew(long duration)
throws LeaseDeniedException, UnknownLeaseException, RemoteException;
/**
* Sets the format to use when serializing the lease.
*
* @param format DURATION or ABSOLUTE
* @see #getSerialFormat
*/
void setSerialFormat(int format);
/**
* Returns the format that will be used to serialize the lease.
*
* @return an <tt>int</tt> representing the serial format value
* @see #setSerialFormat
*/
int getSerialFormat();
/**
* Creates a Map object that can contain leases whose renewal or
* cancellation can be batched, and adds the current lease to that map.
* The current lease is put in the map with the duration value given
* by the parameter.
*
* @param duration the duration to put into a Long and use as the
* value for the current lease in the created LeaseMap
*
* @return the created <tt>LeaseMap</tt> object
*/
LeaseMap createLeaseMap(long duration);
/**
* Returns a boolean indicating whether or not the lease given as a
* parameter can be batched (placed in the same LeaseMap) with the
* current lease. Whether or not two Lease objects can be batched
* is an implementation detail determined by the objects.
*
* @param lease the <tt>Lease</tt> to be evaluated
* @return a boolean indicating whether or not the lease given as a
* parameter can be batched (placed in the same LeaseMap) with
* the current lease
*/
boolean canBatch(Lease lease);
}