/*- * See the file LICENSE for redistribution information. * * Copyright (c) 2002, 2010 Oracle and/or its affiliates. All rights reserved. * */ package com.sleepycat.persist.raw; import com.sleepycat.compat.DbCompat; import com.sleepycat.db.DatabaseException; import com.sleepycat.db.Environment; import com.sleepycat.persist.PrimaryIndex; import com.sleepycat.persist.SecondaryIndex; import com.sleepycat.persist.StoreConfig; import com.sleepycat.persist.StoreExistsException; import com.sleepycat.persist.StoreNotFoundException; import com.sleepycat.persist.evolve.IncompatibleClassException; import com.sleepycat.persist.evolve.Mutations; import com.sleepycat.persist.impl.Store; import com.sleepycat.persist.model.EntityModel; /** * Provides access to the raw data in a store for use by general purpose tools. * A RawStore provides access to stored entities without using * entity classes or key classes. Keys are represented as simple type objects * or, for composite keys, as {@link RawObject} instances, and entities are * represented as {@link RawObject} instances. * *

{@code RawStore} objects are thread-safe. Multiple threads may safely * call the methods of a shared {@code RawStore} object.

* *

When using a {@code RawStore}, the current persistent class definitions * are not used. Instead, the previously stored metadata and class definitions * are used. This has several implications:

*
    *
  1. An {@code EntityModel} may not be specified using {@link * StoreConfig#setModel}. In other words, the configured model must be * null (the default).
  2. *
  3. When storing entities, their format will not automatically be evolved * to the current class definition, even if the current class definition has * changed.
  4. *
* * @author Mark Hayes */ public class RawStore { private Store store; /** * Opens an entity store for raw data access. * * @param env an open Berkeley DB environment. * * @param storeName the name of the entity store within the given * environment. * * @param config the store configuration, or null to use default * configuration properties. * * @throws IllegalArgumentException if the Environment is * read-only and the config ReadOnly property is false. */ public RawStore(Environment env, String storeName, StoreConfig config) throws StoreNotFoundException, DatabaseException { try { store = new Store(env, storeName, config, true /*rawAccess*/); } catch (StoreExistsException e) { /* Should never happen, ExclusiveCreate not used. */ throw DbCompat.unexpectedException(e); } catch (IncompatibleClassException e) { /* Should never happen, evolution is not performed. */ throw DbCompat.unexpectedException(e); } } /** * Opens the primary index for a given entity class. * * @throws DatabaseException the base class for all BDB exceptions. */ public PrimaryIndex getPrimaryIndex(String entityClass) throws DatabaseException { return store.getPrimaryIndex (Object.class, null, RawObject.class, entityClass); } /** * Opens the secondary index for a given entity class and secondary key * name. * * @throws DatabaseException the base class for all BDB exceptions. */ public SecondaryIndex getSecondaryIndex(String entityClass, String keyName) throws DatabaseException { return store.getSecondaryIndex (getPrimaryIndex(entityClass), RawObject.class, entityClass, Object.class, null, keyName); } /** * Returns the environment associated with this store. */ public Environment getEnvironment() { return store.getEnvironment(); } /** * Returns a copy of the entity store configuration. */ public StoreConfig getConfig() { return store.getConfig(); } /** * Returns the name of this store. */ public String getStoreName() { return store.getStoreName(); } /** * Returns the last configured and stored entity model for this store. */ public EntityModel getModel() { return store.getModel(); } /** * Returns the set of mutations that were configured and stored previously. */ public Mutations getMutations() { return store.getMutations(); } /** * Closes all databases and sequences that were opened by this model. No * databases opened via this store may be in use. * * @throws DatabaseException the base class for all BDB exceptions. */ public void close() throws DatabaseException { store.close(); } }