/** * 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 org.apache.activemq.store.kahadb; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import org.apache.activemq.store.kahadb.disk.journal.Location; import org.apache.activemq.store.kahadb.disk.page.Page; import org.apache.activemq.store.kahadb.disk.page.Transaction; /** * Interface for the store meta data used to hold the index value and other needed * information to manage a KahaDB store instance. */ public interface KahaDBMetaData<T> { /** * Indicates that this meta data instance has been opened and is active. */ public static final int OPEN_STATE = 2; /** * Indicates that this meta data instance has been closed and is no longer active. */ public static final int CLOSED_STATE = 1; /** * Gets the Page in the store PageFile where the KahaDBMetaData instance is stored. * * @return the Page to use to start access the KahaDBMetaData instance. */ Page<T> getPage(); /** * Sets the Page instance used to load and store the KahaDBMetaData instance. * * @param page * the new Page value to use. */ void setPage(Page<T> page); /** * Gets the state flag of this meta data instance. * * @return the current state value for this instance. */ int getState(); /** * Sets the current value of the state flag. * * @param value * the new value to assign to the state flag. */ void setState(int value); /** * Returns the Journal Location value that indicates that last recorded update * that was successfully performed for this KahaDB store implementation. * * @return the location of the last successful update location. */ Location getLastUpdateLocation(); /** * Updates the value of the last successful update. * * @param location * the new value to assign the last update location field. */ void setLastUpdateLocation(Location location); /** * For a newly created KahaDBMetaData instance this method is called to allow * the instance to create all of it's internal indices and other state data. * * @param tx * the Transaction instance under which the operation is executed. * * @throws IOException if an error occurs while creating the meta data structures. */ void initialize(Transaction tx) throws IOException; /** * Instructs this object to load its internal data structures from the KahaDB PageFile * and prepare itself for use. * * @param tx * the Transaction instance under which the operation is executed. * * @throws IOException if an error occurs while creating the meta data structures. */ void load(Transaction tx) throws IOException; /** * Reads the serialized for of this object from the KadaDB PageFile and prepares it * for use. This method does not need to perform a full load of the meta data structures * only read in the information necessary to load them from the PageFile on a call to the * load method. * * @param in * the DataInput instance used to read this objects serialized form. * * @throws IOException if an error occurs while reading the serialized form. */ void read(DataInput in) throws IOException; /** * Writes the object into a serialized form which can be read back in again using the * read method. * * @param out * the DataOutput instance to use to write the current state to a serialized form. * * @throws IOException if an error occurs while serializing this instance. */ void write(DataOutput out) throws IOException; }