All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sleepycat.je.rep.DatabasePreemptedException Maven / Gradle / Ivy

The newest version!
/*-
 * Copyright (C) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
 *
 * This file was distributed by Oracle as part of a version of Oracle Berkeley
 * DB Java Edition made available at:
 *
 * http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
 *
 * Please see the LICENSE file included in the top-level directory of the
 * appropriate version of Oracle Berkeley DB Java Edition for a copy of the
 * license and additional information.
 */

package com.sleepycat.je.rep;

import com.sleepycat.je.Database;
import com.sleepycat.je.OperationFailureException;

/**
 * Thrown when attempting to use a Database handle that was forcibly closed by
 * replication.  This exception only occurs in a replicated environment and
 * normally only occurs on a Replica node.  In the case of a DPL schema upgrade
 * where an entity class or secondary key is renamed, it may also occur on a
 * Master node, as described below.
 *
 * 

This exception occurs when accessing a database or store and one of the * following methods was recently executed on the master node and then replayed * on a replica node: * {@link com.sleepycat.je.Environment#truncateDatabase truncateDatabase}, * {@link com.sleepycat.je.Environment#removeDatabase removeDatabase} and * {@link com.sleepycat.je.Environment#renameDatabase renameDatabase}.

* *

When using the {@link com.sleepycat.persist DPL}, this occurs only in two * circumstances:

*
    *
  1. This exception is thrown on a Replica node when the {@link * com.sleepycat.persist.EntityStore#truncateClass truncateClass} method has * been called on the Master node.
  2. *
  3. This exception is thrown on a Replica or Master node when an entity * class or secondary key has been renamed and the application has been * upgraded. See * Upgrading * a Replication Group.
  4. *
* *

When this exception occurs, the application must close any open cursors * and abort any open transactions that are using the database or store, and * then close the database or store handle. If the application wishes, it may * then reopen the database (if it still exists) or store.

* *

Some applications may wish to coordinate the Master and Replica sites to * prevent a Replica from accessing a database that is being truncated, removed * or renamed, and thereby prevent this exception. Such coordination is not * directly supported by JE. The DatabasePreemptedException is provided to * allow an application to handle database truncation, removal and renaming * without such coordination between nodes.

* *

The {@link com.sleepycat.je.Transaction} handle is not * invalidated as a result of this exception.

* * @since 4.0 */ public class DatabasePreemptedException extends OperationFailureException { private static final long serialVersionUID = 1; private final String dbName; private final Database dbHandle; /** * For internal use only. * @hidden */ public DatabasePreemptedException(final String message, final String dbName, final Database dbHandle) { super(null /*locker*/, false /*abortOnly*/, message, null /*cause*/); this.dbName = dbName; this.dbHandle = dbHandle; } /** * For internal use only. * @hidden */ private DatabasePreemptedException(String message, DatabasePreemptedException cause) { super(message, cause); dbName = cause.dbName; dbHandle = cause.dbHandle; } /** * Returns the database handle that was forcibly closed. */ public Database getDatabase() { return dbHandle; } /** * Returns the name of the database that was forcibly closed. */ public String getDatabaseName() { return dbName; } /** * For internal use only. * @hidden */ @Override public OperationFailureException wrapSelf(String msg) { return new DatabasePreemptedException(msg, this); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy