blob: 6808f460df44ff40644251931e4f5f6efd90798c [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.jdbc.conf;
import javax.sql.DataSource;
import org.apache.openjpa.conf.OpenJPAConfiguration;
import org.apache.openjpa.jdbc.identifier.DBIdentifierUtil;
import org.apache.openjpa.jdbc.kernel.EagerFetchModes;
import org.apache.openjpa.jdbc.kernel.LRSSizes;
import org.apache.openjpa.jdbc.kernel.UpdateManager;
import org.apache.openjpa.jdbc.meta.MappingDefaults;
import org.apache.openjpa.jdbc.meta.MappingRepository;
import org.apache.openjpa.jdbc.schema.DriverDataSource;
import org.apache.openjpa.jdbc.schema.SchemaFactory;
import org.apache.openjpa.jdbc.sql.DBDictionary;
import org.apache.openjpa.jdbc.sql.SQLFactory;
import org.apache.openjpa.kernel.StoreContext;
import org.apache.openjpa.lib.identifier.IdentifierUtil;
import org.apache.openjpa.lib.jdbc.ConnectionDecorator;
import org.apache.openjpa.lib.jdbc.JDBCEvent;
import org.apache.openjpa.lib.jdbc.JDBCListener;
import org.apache.openjpa.meta.MetaDataFactory;
/**
* Configuration that defines the properties necessary to configure
* runtime and connect to a JDBC DataSource.
*
* @author Marc Prud'hommeaux
*/
public interface JDBCConfiguration
extends OpenJPAConfiguration {
/**
* Name of the logger for SQL execution messages:
* <code>openjpa.jdbc.SQL</code>.
*/
String LOG_SQL = "openjpa.jdbc.SQL";
/**
* Name of the logger for additional jdbc messages:
* <code>openjpa.jdbc.DIAG</code>.
*/
String LOG_DIAG = "openjpa.jdbc.SQLDiag";
/**
* Name of the logger for JDBC-related messages:
* <code>openjpa.jdbc.JDBC</code>.
*/
String LOG_JDBC = "openjpa.jdbc.JDBC";
/**
* Name of the logger for schema-related messages:
* <code>openjpa.jdbc.Schema</code>.
*/
String LOG_SCHEMA = "openjpa.jdbc.Schema";
/**
* Default schema for unqualified tables.
*/
String getSchema();
/**
* Default schema for unqualified tables.
*/
void setSchema(String schema);
/**
* Comma-separated list of modifiable schemas for persistent instances.
*/
String getSchemas();
/**
* Comma-separated list of modifiable schemas for persistent instances.
*/
void setSchemas(String schemas);
/**
* Modificable schema components.
*/
String[] getSchemasList();
/**
* Modifiable schema components.
*/
void setSchemas(String[] schemas);
/**
* The transaction isolation level to use at the database level.
* Possible values are:
* <ul>
* <li><code>default</code>: The JDBC driver's default isolation level.</li>
* <li><code>none</code>: The standard JDBC
* {@link java.sql.Connection#TRANSACTION_NONE} level.</li>
* <li><code>read-committed</code>: The standard JDBC
* {@link java.sql.Connection#TRANSACTION_READ_COMMITTED} level.</li>
* <li><code>read-uncommitted</code>: The standard JDBC
* {@link java.sql.Connection#TRANSACTION_READ_UNCOMMITTED} level.</li>
* <li><code>repeatable-read</code>: The standard JDBC
* {@link java.sql.Connection#TRANSACTION_REPEATABLE_READ} level.</li>
* <li><code>serializable</code>: The standard JDBC
* {@link java.sql.Connection#TRANSACTION_SERIALIZABLE} level.</li>
* </ul>
*/
String getTransactionIsolation();
/**
* The transaction isolation level to use at the database level.
* Possible values are:
* <ul>
* <li><code>default</code>: The JDBC driver's default isolation level.</li>
* <li><code>none</code>: The standard JDBC
* {@link java.sql.Connection#TRANSACTION_NONE} level.</li>
* <li><code>read-committed</code>: The standard JDBC
* {@link java.sql.Connection#TRANSACTION_READ_COMMITTED} level.</li>
* <li><code>read-uncommitted</code>: The standard JDBC
* {@link java.sql.Connection#TRANSACTION_READ_UNCOMMITTED} level.</li>
* <li><code>repeatable-read</code>: The standard JDBC
* {@link java.sql.Connection#TRANSACTION_REPEATABLE_READ} level.</li>
* <li><code>serializable</code>: The standard JDBC
* {@link java.sql.Connection#TRANSACTION_SERIALIZABLE} level.</li>
* </ul>
*/
void setTransactionIsolation(String level);
/**
* Return the proper transaction isolation level constant from
* {@link java.sql.Connection}, or -1 for the default level.
*/
int getTransactionIsolationConstant();
/**
* Set the proper transaction isolation level constant from
* {@link java.sql.Connection}, or -1 for the default level.
*/
void setTransactionIsolation(int level);
/**
* The JDBC result set type. Defaults to <code>forward-only</code>.
* <ul>
* <li><code>forward-only</code>: The standard JDBC
* {@link java.sql.ResultSet#TYPE_FORWARD_ONLY} type.</li>
* <li><code>scroll-sensitive</code>: The standard JDBC
* {@link java.sql.ResultSet#TYPE_SCROLL_SENSITIVE} type.</li>
* <li><code>scroll-insensitive</code>: The standard JDBC
* {@link java.sql.ResultSet#TYPE_SCROLL_INSENSITIVE} type.</li>
* </ul>
*/
String getResultSetType();
/**
* Return the result set constant for the result set type.
*/
int getResultSetTypeConstant();
/**
* The JDBC result set type. Defaults to <code>forward-only</code>.
* <ul>
* <li><code>forward-only</code>: The standard JDBC
* {@link java.sql.ResultSet#TYPE_FORWARD_ONLY} type.</li>
* <li><code>scroll-sensitive</code>: The standard JDBC
* {@link java.sql.ResultSet#TYPE_SCROLL_SENSITIVE} type.</li>
* <li><code>scroll-insensitive</code>: The standard JDBC
* {@link java.sql.ResultSet#TYPE_SCROLL_INSENSITIVE} type.</li>
* </ul>
*/
void setResultSetType(String type);
/**
* Set the result set constant type.
*/
void setResultSetType(int type);
/**
* The JDBC fetch direction. Defaults to <code>forward</code>.
* <ul>
* <li><code>forward</code>: The standard JDBC
* {@link java.sql.ResultSet#FETCH_FORWARD} direction.</li>
* <li><code>reverse</code>: The standard JDBC
* {@link java.sql.ResultSet#FETCH_REVERSE} direction.</li>
* <li><code>unknown</code>: The standard JDBC
* {@link java.sql.ResultSet#FETCH_UNKNOWN} direction.</li>
* </ul>
*/
String getFetchDirection();
/**
* Return the result set constant for the fetch direction.
*/
int getFetchDirectionConstant();
/**
* The JDBC fetch direction. Defaults to <code>forward</code>.
* <ul>
* <li><code>forward</code>: The standard JDBC
* {@link java.sql.ResultSet#FETCH_FORWARD} direction.</li>
* <li><code>reverse</code>: The standard JDBC
* {@link java.sql.ResultSet#FETCH_REVERSE} direction.</li>
* <li><code>unknown</code>: The standard JDBC
* {@link java.sql.ResultSet#FETCH_UNKNOWN} direction.</li>
* </ul>
*/
void setFetchDirection(String direction);
/**
* Set the result set fetch direction constant.
*/
void setFetchDirection(int direction);
/**
* Specifies the default eager fetch mode to use. Defaults to
* <code>parallel</code> unless the query is by-oid. Possible values are:
* <ul>
* <li><code>none</code>: When querying for an object, do not try to
* select for related objects at the same time.</li>
* <li><code>join</code>: When querying for objects, also select for
* 1-1 relations in the configured fetch groups using joins.</li>
* <li><code>parallel</code>: When querying for objects, also select for
* both 1-1 relations using joins and to-many relations using batched
* selects.</li>
* </li>
* </ul>
*
* @since 0.3.0
*/
String getEagerFetchMode();
/**
* Specifies the default eager fetch mode to use. Defaults to
* <code>parallel</code> unless the query is by-oid. Possible values are:
* <ul>
* <li><code>none</code>: When querying for an object, do not try to
* select for related objects at the same time.</li>
* <li><code>join</code>: When querying for objects, also select for
* 1-1 relations in the configured fetch groups using joins.</li>
* <li><code>parallel</code>: When querying for objects, also select for
* both 1-1 relations using joins and to-many relations using batched
* selects.</li>
* </ul>
*/
void setEagerFetchMode(String mode);
/**
* Return the eager fetch mode as one of the following symbolic constants:
* <ul>
* <li>{@link EagerFetchModes#EAGER_NONE}</li>
* <li>{@link EagerFetchModes#EAGER_JOIN}</li>
* <li>{@link EagerFetchModes#EAGER_PARALLEL}</li>
* </ul>
*
* @since 0.3.0
*/
int getEagerFetchModeConstant();
/**
* Set the eager fetch mode as one of the following symbolic constants:
* <ul>
* <li>{@link EagerFetchModes#EAGER_NONE}</li>
* <li>{@link EagerFetchModes#EAGER_JOIN}</li>
* <li>{@link EagerFetchModes#EAGER_PARALLEL}</li>
* </ul>
*
* @since 0.3.0
*/
void setEagerFetchMode(int eagerFetchMode);
/**
* Specifies the default subclass fetch mode to use. Defaults to
* <code>join</code> unless the query is by-oid. Possible values are:
* <ul>
* <li><code>none</code>: Only select base class data.</li>
* <li><code>join</code>: Select both base class and all possible subclass
* data using joins.</li>
* <li><code>parallel</code>: Select for each possible subclass
* separately.</li>
* </ul>
*
* @since 0.3.2
*/
String getSubclassFetchMode();
/**
* Specifies the default subclass fetch mode to use. Defaults to
* <code>join</code> unless the query is by-oid. Possible values are:
* <ul>
* <li><code>none</code>: Only select base class data.</li>
* <li><code>join</code>: Select both base class and all possible subclass
* data using joins.</li>
* <li><code>parallel</code>: Select for each possible subclass
* separately.</li>
* </ul>
*
* @since 0.3.2
*/
void setSubclassFetchMode(String mode);
/**
* Return the subclass fetch mode as one of the following symbolic
* constants:
* <ul>
* <li>{@link EagerFetchModes#EAGER_NONE}</li>
* <li>{@link EagerFetchModes#EAGER_JOIN}</li>
* <li>{@link EagerFetchModes#EAGER_PARALLEL}</li>
* </ul>
*
* @since 0.3.2
*/
int getSubclassFetchModeConstant();
/**
* Set the subclass fetch mode as one of the following symbolic constants:
* <ul>
* <li>{@link EagerFetchModes#EAGER_NONE}</li>
* <li>{@link EagerFetchModes#EAGER_JOIN}</li>
* <li>{@link EagerFetchModes#EAGER_PARALLEL}</li>
* </ul>
*
* @since 0.3.2
*/
void setSubclassFetchMode(int subclassFetchMode);
/**
* How to obtain the size of large result sets. Defaults to
* <code>unknown</code>.
* <ul>
* <li><code>unknown</code>: Do not attempt to calculate the size of
* large result sets; return {@link Integer#MAX_VALUE}.</li>
* <li><code>last</code>: For result sets that support random access,
* calculate the size using {@link java.sql.ResultSet#last}.</li>
* <li><code>query</code>: Use a separate COUNT query to calculate the
* size of the results.</li>
* </ul>
*/
String getLRSSize();
/**
* Return the {@link LRSSizes} constant for the large result set size
* setting.
*/
int getLRSSizeConstant();
/**
* How to obtain the size of large result sets. Defaults to
* <code>unknown</code>.
* <ul>
* <li><code>unknown</code>: Do not attempt to calculate the size of
* large result sets; return {@link Integer#MAX_VALUE}.</li>
* <li><code>last</code>: For result sets that support random access,
* calculate the size using {@link java.sql.ResultSet#last}.</li>
* <li><code>query</code>: Use a separate COUNT query to calculate the
* size of the results.</li>
* </ul>
*/
void setLRSSize(String lrsSize);
/**
* Set the fetch configuration large result set size constant.
*/
void setLRSSize(int size);
/**
* Whether OpenJPA should try to automatically refresh O/R mapping
* information and the database schema.
*/
String getSynchronizeMappings();
/**
* Whether OpenJPA should try to automatically refresh O/R mapping
* information and the database schema.
*/
void setSynchronizeMappings(String synchronizeMappings);
/**
* A comma-separated list of the {@link JDBCListener} plugins for
* listening to {@link JDBCEvent}s.
*/
String getJDBCListeners();
/**
* A comma-separated list of the {@link JDBCListener} plugins for
* listening to {@link JDBCEvent}s.
*/
void setJDBCListeners(String jdbcListeners);
/**
* The {@link JDBCListener}s to use.
*/
JDBCListener[] getJDBCListenerInstances();
/**
* The {@link JDBCListener}s to use.
*/
void setJDBCListeners(JDBCListener[] jdbcListeners);
/**
* A comma-separated list of the {@link ConnectionDecorator} for adding
* functionality to JDBC connections.
*/
String getConnectionDecorators();
/**
* A comma-separated list of the {@link ConnectionDecorator} for
* adding functionality to JDBC connections.
*/
void setConnectionDecorators(String decorators);
/**
* The {@link ConnectionDecorator}s to use.
*/
ConnectionDecorator[] getConnectionDecoratorInstances();
/**
* The {@link ConnectionDecorator}s to use.
*/
void setConnectionDecorators(ConnectionDecorator[] decorators);
/**
* The {@link DBDictionary} to use to define the RDBMS SQL information.
*/
String getDBDictionary();
/**
* The {@link DBDictionary} to use to define the RDBMS SQL information.
*/
void setDBDictionary(String dbdictionary);
/**
* The {@link DBDictionary} to use.
*/
DBDictionary getDBDictionaryInstance();
/**
* The {@link DBDictionary} to use.
*/
void setDBDictionary(DBDictionary dbdictionary);
/**
* The {@link UpdateManager} to use for managing SQL updates.
*/
String getUpdateManager();
/**
* The {@link UpdateManager} to use for managing SQL updates.
*/
void setUpdateManager(String updateManager);
/**
* The {@link UpdateManager} for runtime data store interaction.
*/
UpdateManager getUpdateManagerInstance();
/**
* The {@link UpdateManager} for runtime data store interaction.
*/
void setUpdateManager(UpdateManager updateManager);
/**
* The {@link DriverDataSource} to use for creating a {@link DataSource}
* from a JDBC {@link Driver}.
*/
String getDriverDataSource();
/**
* The {@link DriverDataSource} to use for creating a {@link DataSource}
* from a JDBC {@link Driver}.
*/
void setDriverDataSource(String driverDataSource);
/**
* Create an instance of the {@link DriverDataSource} to use
* for creating a {@link DataSource} from a JDBC {@link Driver}.
*/
DataSource newDriverDataSourceInstance();
/**
* The plugin string for the {@link SchemaFactory} to use to provide
* schema information during system initialization.
*/
String getSchemaFactory();
/**
* The plugin string for the {@link SchemaFactory} to use to provide
* schema information during system initialization.
*/
void setSchemaFactory(String schemaFactory);
/**
* The {@link SchemaFactory} to use for schema information.
*/
SchemaFactory getSchemaFactoryInstance();
/**
* The {@link SchemaFactory} to use for schema information.
*/
void setSchemaFactory(SchemaFactory schemaFactory);
/**
* The SQL factory to use for SQL constructs.
*/
String getSQLFactory();
/**
* The SQL factory to use for SQL constructs.
*/
SQLFactory getSQLFactoryInstance();
/**
* The SQL factory to use for SQL constructs.
*/
void setSQLFactory(String sqlFactory);
/**
* The SQL factory to use for SQL constructs.
*/
void setSQLFactory(SQLFactory sqlFactory);
/**
* A plugin string describing the {@link MetaDataFactory} to use for
* loading and storing object-relational mapping data.
*/
String getMappingFactory();
/**
* A plugin string describing the {@link MetaDataFactory} to use for
* loading and storing object-relational mapping data.
*/
void setMappingFactory(String mappingFactory);
/**
* A plugin string describing the {@link MappingDefaults} to use.
*
* @since 0.4.0
*/
String getMappingDefaults();
/**
* A plugin string describing the {@link MappingDefaults} to use.
*
* @since 0.4.0
*/
void setMappingDefaults(String map);
/**
* The {@link MappingDefaults} to use with a repository.
*
* @since 0.4.0
*/
MappingDefaults getMappingDefaultsInstance();
/**
* The {@link MappingDefaults} to use with a repository.
*
* @since 0.4.0
*/
void setMappingDefaults(MappingDefaults map);
/**
* Return the mapping repository. Convenience method to cast from
* the internal metadata repository.
*/
MappingRepository getMappingRepositoryInstance();
/**
* Return a new empty mapping repository of the configured type.
* Convenience method to cast from metadata repository.
*/
MappingRepository newMappingRepositoryInstance();
/**
* Return the primary data source to use. The data source will
* automatically use the given context's user name and password on calls
* to {@link DataSource#getConnection}. If the given context is null, the
* data source will use the configuration's default connection user name
* and password. If those too are null and the first context has been
* obtained already, then the user name and password for that context
* will be used, as we know they represent a valid combination. This
* method avoids casting the result of
* {@link OpenJPAConfiguration#getConnectionFactory}, and avoids having to
* pass in the user name and password to obtain connections.
*/
DataSource getDataSource(StoreContext ctx);
/**
* Return the non-enlisted data source to use. If there is a valid
* non-xa connection factory configured, then it will be returned. Its
* default user name and password on calls to
* {@link DataSource#getConnection} will be the specified connection 2
* user name and password. If those are null and the given context is
* non-null, its user name password will be used instead. If the context
* is null too, then the user name and password used to retrieve the first
* context will be used. If there is no second connection factory the
* primary connection factory is used.
*
* @see #getDataSource
*/
DataSource getDataSource2(StoreContext ctx);
/**
* Gets the String constant that matches the {@link IdentifierUtil}
* @return String-based name of the {@link IdentifierUtil}
*/
String getIdentifierUtil();
/**
* Gets the {@link DBIdentifierUtil}
* @return DBIdentifierUtil
*/
DBIdentifierUtil getIdentifierUtilInstance();
/**
* Sets the {@link DBIdentifierUtil}
* @param util instance of the identifier utility
*/
void setIdentifierUtil(DBIdentifierUtil util);
}