gnu.java.security.util

Class ExpirableObject

Implemented Interfaces:
Destroyable
Known Direct Subclasses:
Password

public abstract class ExpirableObject
extends Object
implements Destroyable

The base class for objects with sensitive data that are automatically destroyed after a timeout elapses. On creation, an object that extends this class will automatically be added to a Timer object that, once a timeout elapses, will automatically call the Destroyable.destroy() method.

Concrete subclasses must implement the doDestroy() method instead of Destroyable.destroy(); the behavior of that method should match exactly the behavior desired of destroy().

Note that if a DestroyFailedException occurs when the timeout expires, it will not be reported.

See Also:
Destroyable

Field Summary

static long
DEFAULT_TIMEOUT
The default timeout, used in the default constructor.

Constructor Summary

ExpirableObject()
Create a new expirable object that will expire after one hour.
ExpirableObject(long delay)
Create a new expirable object that will expire after the specified timeout.

Method Summary

void
destroy()
Destroys this object.
protected abstract void
doDestroy()
Subclasses must implement this method instead of the Destroyable.destroy() method.

Methods inherited from class java.lang.Object

clone, equals, extends Object> getClass, finalize, hashCode, notify, notifyAll, toString, wait, wait, wait

Field Details

DEFAULT_TIMEOUT

public static final long DEFAULT_TIMEOUT
The default timeout, used in the default constructor.
Field Value:
3600000L

Constructor Details

ExpirableObject

protected ExpirableObject()
Create a new expirable object that will expire after one hour.

ExpirableObject

protected ExpirableObject(long delay)
Create a new expirable object that will expire after the specified timeout.
Parameters:
delay - The delay before expiration.
Throws:
IllegalArgumentException - If delay is negative, or if delay + System.currentTimeMillis() is negative.

Method Details

destroy

public final void destroy()
            throws DestroyFailedException
Destroys this object. This method calls doDestroy(), then, if no exception is thrown, cancels the task that would destroy this object when the timeout is reached.
Specified by:
destroy in interface Destroyable
Throws:
DestroyFailedException - If this operation fails.

doDestroy

protected abstract void doDestroy()
            throws DestroyFailedException
Subclasses must implement this method instead of the Destroyable.destroy() method.
Throws:
DestroyFailedException - If this operation fails.

ExpirableObject.java -- an object that is automatically destroyed. Copyright (C) 2004, 2006 Free Software Foundation, Inc. This file is a part of GNU Classpath. GNU Classpath is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GNU Classpath 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 General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Classpath; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination. As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.