blob: 4a24813957c60b3619177d14c1141a728b8d8dfd [file] [log] [blame]
/*
* 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.openjpa.slice;
import java.util.List;
import org.apache.openjpa.conf.OpenJPAConfiguration;
/**
* A configuration for multiple data stores, each referred as <em>slice</em>.
* This configuration allows each underlying slice be configured with its
* own specific configuration properties such as JDBC Driver or connection
* user/password etc.
* <br>
* This configuration also extends by several policy plugins. A policy plugin
* is an user implementation of a specific policy interface. A policy implementation
* is invoked by Slice runtime.
* <br>
* Slice recognizes following policies
* <LI> {@link DistributionPolicy Distribution Policy} governs how new instances be distributed
* among the slices.
* <LI> {@link ReplicationPolicy Replication Policy} maintains the same instance in multiple slices.
* <LI> {@link QueryTargetPolicy Query Target Policy} narrows the slices for a query execution.
* <LI> {@link FinderTargetPolicy Finder Target Policy} narrows the slices for primary key based lookup
*
* @author Pinaki Poddar
*
*/
public interface DistributedConfiguration extends OpenJPAConfiguration {
/**
* Gets the active slice identifiers. This list is determined by the
* configuration properties either by explicit listing in
* <code>openjpa.slice.Names</code> property or by scanning
* <code>openjpa.slice.*.*</code> properties.
* <br>
* The ordering of the slice identifiers is determined when they are
* specified explicitly in <code>openjpa.slice.Names</code> property or
* ordered alphabetically when found by scanning the properties.
* <br>
* This list always returns the identifiers that are <em>active</em>, slices
* that can not be connected to are not included in this list.
*/
List<String> getActiveSliceNames();
/**
* Gets the available slice identifiers irrespective of their status.
* @return
*/
List<String> getAvailableSliceNames();
/**
* Gets the slices of given status.
* @param statuses list of status flags. If null, returns all slices
* irrespective of status.
*/
List<Slice> getSlices(Slice.Status...statuses);
/**
* Gets the Slice for a given name.
* Exception is raised if the given slice is not configured.
*/
Slice getSlice(String sliceName);
/**
* Gets the policy that governs how new instances will be distributed across
* the available slices.
*/
DistributionPolicy getDistributionPolicyInstance();
/**
* Sets the policy that governs how new instances will be distributed across
* the available slices.
*/
void setDistributionPolicyInstance(DistributionPolicy policy);
/**
* Gets the policy, as a plugin string, that governs how new instances will
* be distributed across the available slices.
*/
String getDistributionPolicy();
/**
* Sets the policy, from the given plugin string, that governs how new
* instances will be distributed across the available slices.
*/
void setDistributionPolicy(String policy);
/**
* Gets the policy that governs how new replicated instances will be
* replicated across the available slices.
*/
ReplicationPolicy getReplicationPolicyInstance();
/**
* Gets the policy, as a plugin string, that governs how new replicated
* instances will be replicated across the available slices.
*/
String getReplicationPolicy();
/**
* Sets the policy that governs how new replicated instances will be
* replicated across the available slices.
*/
void setReplicationPolicyInstance(ReplicationPolicy policy);
/**
* Sets the policy, from the given plugin string, that governs how new
* replicated instances will be replicated across the available slices.
*/
void setReplicationPolicy(String policy);
/**
* Affirms if the given type is replicated.
*/
boolean isReplicated(Class<?> type);
/**
* Gets the policy that governs which slices will be targeted for a given query.
*/
QueryTargetPolicy getQueryTargetPolicyInstance();
/**
* Gets the policy, as a plugin string, that governs which slices will be targeted
* for a given query.
*/
String getQueryTargetPolicy();
/**
* Sets the policy that governs which slices will be targeted for a given query.
*/
void setQueryTargetPolicyInstance(QueryTargetPolicy policy);
/**
* Sets the policy, from the given plugin string, that governs which slices will
* be targeted for a given query.
*/
void setQueryTargetPolicy(String policy);
/**
* Gets the policy that governs which slices will be targeted for a given finder.
*/
FinderTargetPolicy getFinderTargetPolicyInstance();
/**
* Gets the policy, as a plugin string, that governs which slices will be targeted
* for a given finder.
*/
String getFinderTargetPolicy();
/**
* Sets the policy that governs which slices will be targeted for a given finder.
*/
void setFinderTargetPolicyInstance(FinderTargetPolicy policy);
/**
* Sets the policy, from the given plugin string, that governs which slices will
* be targeted for a given finder.
*/
void setFinderTargetPolicy(String policy);
}