blob: d91330f79a32d7d841782687fcf2597c4da2645b [file] [log] [blame]
/*
* Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Oracle - initial API and implementation from Oracle TopLink
// 09/03/2015 - Will Dazey
// - 456067 : Added support for defining query timeout units
// 05/26/2016-2.7 Tomas Kraus
// - 494610: Session Properties map should be Map<String, Object>
package org.eclipse.persistence.sessions;
import java.io.Writer;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import java.util.concurrent.TimeUnit;
import org.eclipse.persistence.config.ReferenceMode;
import org.eclipse.persistence.core.sessions.CoreSession;
import org.eclipse.persistence.descriptors.ClassDescriptor;
import org.eclipse.persistence.descriptors.partitioning.PartitioningPolicy;
import org.eclipse.persistence.exceptions.DatabaseException;
import org.eclipse.persistence.exceptions.EclipseLinkException;
import org.eclipse.persistence.exceptions.ExceptionHandler;
import org.eclipse.persistence.exceptions.IntegrityChecker;
import org.eclipse.persistence.exceptions.ValidationException;
import org.eclipse.persistence.expressions.Expression;
import org.eclipse.persistence.internal.databaseaccess.Platform;
import org.eclipse.persistence.internal.sessions.UnitOfWorkImpl;
import org.eclipse.persistence.logging.SessionLog;
import org.eclipse.persistence.logging.SessionLogEntry;
import org.eclipse.persistence.platform.database.DatabasePlatform;
import org.eclipse.persistence.platform.server.ServerPlatform;
import org.eclipse.persistence.queries.AttributeGroup;
import org.eclipse.persistence.queries.Call;
import org.eclipse.persistence.queries.DatabaseQuery;
import org.eclipse.persistence.queries.JPQLCall;
import org.eclipse.persistence.queries.ReadAllQuery;
import org.eclipse.persistence.queries.ReadObjectQuery;
import org.eclipse.persistence.queries.SQLCall;
import org.eclipse.persistence.sessions.serializers.Serializer;
/**
* <p>
* <b>Purpose</b>: Define the EclipseLink session public interface.
* <p>
* <b>Description</b>: This interface is meant to clarify the public protocol into EclipseLink.
* It also allows for non-subclasses of Session to conform to the EclipseLink API.
* It should be used as the applications main interface into the EclipseLink API to
* ensure compatibility between all EclipseLink sessions.
* <p>
* <b>Responsibilities</b>:
* <ul>
* <li> Define the API for all reading, units of work.
* </ul>
* @see UnitOfWork
* @see DatabaseSession
* @see org.eclipse.persistence.internal.sessions.AbstractSession
* @see org.eclipse.persistence.internal.sessions.DatabaseSessionImpl
* @see org.eclipse.persistence.sessions.server.ServerSession
* @see org.eclipse.persistence.sessions.server.ClientSession
*/
public interface Session extends CoreSession<ClassDescriptor, Login, Platform, Project, SessionEventManager> {
/**
* ADVANCED:
* Returns a light weight read-only session where all
* objects are automatically read as of the specified past time.
* <p>Use this Session to take advantage of Oracle 9 Release 2 Flashback or
* EclipseLink general history support and still be able to cache query results.
* <p>A special historical session is required as all objects read may
* be of different versions than those stored in the global session cache.
* Hence also known as IsolationSession, as all reads bypass the global
* cache.
* <p>An AsOfClause at the Session level will override any clauses set at the
* query or expression levels.
* <p>
* Example: Using a historical session to read past versions of objects.
*
* <blockquote><pre>
* AsOfClause pastTime = new AsOfClause(System.currentTimeMillis() - 24*60*60*1000);
* Session historicalSession = session.acquireSessionAsOf(pastTime);
* Employee pastEmployee = (Employee)historicalSession.readObject(Employee.class);
* Address pastAddress = pastEmployee.getAddress();
* Vector pastProjects = pastEmployee.getProjects();
* historicalSession.release();
* </pre></blockquote>
* <p>
* Example: Using the above past employee to recover objects.
*
* <blockquote><pre>
* UnitOfWork uow = baseSession.acquireUnitOfWork();
* Employee presentClone = (Employee)uow.readObject(pastEmployee);
* uow.deepMergeClone(pastEmployee);
* uow.commit();
* </pre></blockquote>
* <p>
* By definition all data as of a past time is frozen. So this session is
* also ideal for read consistent queries and read only transactions, as all
* queries will be against a consistent and immutable snap shot of the data.
* @param pastTime Represents a valid snap shot time.
* @throws ValidationException if <code>this</code>
* not a ClientSession, plain Session, or SessionBroker.
* @see org.eclipse.persistence.history.AsOfClause
* @see org.eclipse.persistence.expressions.Expression#asOf(org.eclipse.persistence.history.AsOfClause)
* @see org.eclipse.persistence.queries.ObjectLevelReadQuery#setAsOfClause(org.eclipse.persistence.history.AsOfClause)
* @see org.eclipse.persistence.history.HistoryPolicy
*/
Session acquireHistoricalSession(org.eclipse.persistence.history.AsOfClause pastTime);
/**
* PUBLIC:
* Return a unit of work for this session.
* The unit of work is an object level transaction that allows
* a group of changes to be applied as a unit.
* The return value should be used as the org.eclipse.persistence.sessions.UnitOfWork interface
*
* @see UnitOfWork
*/
UnitOfWork acquireUnitOfWork();
/**
* PUBLIC:
* Return a unit of work for this session.
* The unit of work is an object level transaction that allows
* a group of changes to be applied as a unit.
*
* @see UnitOfWorkImpl
* @param referenceMode The reference type the UOW should use internally when
* referencing Working clones. Setting this to WEAK means the UOW will use
* weak references to reference clones that support active object change
* tracking and hard references for deferred change tracked objects.
* Setting to FORCE_WEAK means that all objects will be referenced by weak
* references and if the application no longer references the clone the
* clone may be garbage collected. If the clone
* has uncommitted changes then those changes will be lost.
*/
UnitOfWork acquireUnitOfWork(ReferenceMode referenceMode);
/**
* PUBLIC:
* Add the query to the session queries with the given name.
* This allows for common queries to be pre-defined, reused and executed by name.
*/
void addQuery(String name, DatabaseQuery query);
/**
* ADVANCED:
* Add a pre-defined not yet parsed JPQL String/query to the session to be parsed
* after descriptors are initialized.
*/
void addJPAQuery(DatabaseQuery query);
/**
* PUBLIC:
* clear the integrityChecker, the integrityChecker holds all the ClassDescriptor Exceptions.
*/
void clearIntegrityChecker();
/**
* PUBLIC:
* Clear the profiler, this will end the current profile operation.
*/
void clearProfile();
/**
* PUBLIC:
* Return true if the pre-defined query is defined on the session.
*/
boolean containsQuery(String queryName);
/**
* PUBLIC:
* Return a complete copy of the object or of collection of objects.
* In case of collection all members should be either entities of the same type
* or have a common inheritance hierarchy mapped root class.
* This can be used to obtain a scratch copy of an object,
* or for templatizing an existing object into another new object.
* The object and all of its privately owned parts will be copied.
*
* @see #copy(Object, AttributeGroup)
*/
Object copy(Object originalObjectOrObjects);
/**
* PUBLIC:
* Return a complete copy of the object or collection of objects.
* In case of collection all members should be either entities of the same type
* or have a common inheritance hierarchy mapped root class.
* This can be used to obtain a scratch copy of an object,
* or for templatizing an existing object into another new object.
* If there are no attributes in the group
* then the object and all of its privately owned parts will be copied.
* Otherwise only the attributes included into the group will be copied.
*/
Object copy(Object originalObjectOrObjects, AttributeGroup group);
/**
* PUBLIC:
* Return if the object exists on the database or not.
* This always checks existence on the database.
*/
boolean doesObjectExist(Object object) throws DatabaseException;
/**
* PUBLIC:
* Turn off logging
*/
void dontLogMessages();
/**
* PUBLIC:
* Execute the call on the database.
* The row count is returned.
* The call can be a stored procedure call, SQL call or other type of call.
* <p>Example:
* <p>session.executeNonSelectingCall(new SQLCall("Delete from Employee");
*
* @see #executeSelectingCall(Call)
*/
int executeNonSelectingCall(Call call);
/**
* PUBLIC:
* Execute the non-selecting (update/DML) SQL string.
* Warning: Allowing an unverified SQL string to be passed into this
* method makes your application vulnerable to SQL injection attacks.
*/
void executeNonSelectingSQL(String sqlString);
/**
* PUBLIC:
* Execute the pre-defined query by name and return the result.
* Queries can be pre-defined and named to allow for their reuse.
*
* @see #addQuery(String, DatabaseQuery)
*/
Object executeQuery(String queryName);
/**
* PUBLIC:
* Execute the pre-defined query by name and return the result.
* Queries can be pre-defined and named to allow for their reuse.
* The class is the descriptor in which the query was pre-defined.
*
* @see org.eclipse.persistence.descriptors.DescriptorQueryManager#addQuery(String, DatabaseQuery)
*/
Object executeQuery(String queryName, Class domainClass);
/**
* PUBLIC:
* Execute the pre-defined query by name and return the result.
* Queries can be pre-defined and named to allow for their reuse.
* The class is the descriptor in which the query was pre-defined.
*
* @see org.eclipse.persistence.descriptors.DescriptorQueryManager#addQuery(String, DatabaseQuery)
*/
Object executeQuery(String queryName, Class domainClass, Object arg1);
/**
* PUBLIC:
* Execute the pre-defined query by name and return the result.
* Queries can be pre-defined and named to allow for their reuse.
* The class is the descriptor in which the query was pre-defined.
*
* @see org.eclipse.persistence.descriptors.DescriptorQueryManager#addQuery(String, DatabaseQuery)
*/
Object executeQuery(String queryName, Class domainClass, Object arg1, Object arg2);
/**
* PUBLIC:
* Execute the pre-defined query by name and return the result.
* Queries can be pre-defined and named to allow for their reuse.
* The class is the descriptor in which the query was pre-defined.
*
* @see org.eclipse.persistence.descriptors.DescriptorQueryManager#addQuery(String, DatabaseQuery)
*/
Object executeQuery(String queryName, Class domainClass, Object arg1, Object arg2, Object arg3);
/**
* PUBLIC:
* Execute the pre-defined query by name and return the result.
* Queries can be pre-defined and named to allow for their reuse.
* The class is the descriptor in which the query was pre-defined.
*
* @see org.eclipse.persistence.descriptors.DescriptorQueryManager#addQuery(String, DatabaseQuery)
*/
Object executeQuery(String queryName, Class domainClass, List argumentValues);
/**
* PUBLIC:
* Execute the pre-defined query by name and return the result.
* Queries can be pre-defined and named to allow for their reuse.
*
* @see #addQuery(String, DatabaseQuery)
*/
Object executeQuery(String queryName, Object arg1);
/**
* PUBLIC:
* Execute the pre-defined query by name and return the result.
* Queries can be pre-defined and named to allow for their reuse.
*
* @see #addQuery(String, DatabaseQuery)
*/
Object executeQuery(String queryName, Object arg1, Object arg2);
/**
* PUBLIC:
* Execute the pre-defined query by name and return the result.
* Queries can be pre-defined and named to allow for their reuse.
*
* @see #addQuery(String, DatabaseQuery)
*/
Object executeQuery(String queryName, Object arg1, Object arg2, Object arg3);
/**
* PUBLIC:
* Execute the pre-defined query by name and return the result.
* Queries can be pre-defined and named to allow for their reuse.
*
* @see #addQuery(String, DatabaseQuery)
*/
Object executeQuery(String queryName, List argumentValues);
/**
* PUBLIC:
* Execute the database query.
* A query is a database operation such as reading or writing.
* The query allows for the operation to be customized for such things as,
* performance, depth, caching, etc.
*
* @see DatabaseQuery
*/
Object executeQuery(DatabaseQuery query) throws EclipseLinkException;
/**
* PUBLIC:
* Return the results from executing the database query.
* the arguments are passed in as a vector
*/
Object executeQuery(DatabaseQuery query, List argumentValues);
/**
* PUBLIC:
* Execute the call on the database and return the result.
* The call must return a value, if no value is return executeNonSelectCall must be used.
* The call can be a stored procedure call, SQL call or other type of call.
* A vector of database rows is returned, database row implements Java 2 Map which should be used to access the data.
* <p>Example:
* <p>session.executeSelectingCall(new SQLCall("Select * from Employee");
*
* @see #executeNonSelectingCall(Call)
*/
Vector executeSelectingCall(Call call);
/**
* PUBLIC:
* Execute the selecting SQL string.
* A Vector of DatabaseRecords are returned.
* Warning: Allowing an unverified SQL string to be passed into this
* method makes your application vulnerable to SQL injection attacks.
*/
Vector executeSQL(String sqlString);
/**
* PUBLIC:
* Return the active session for the current active external (JTS) transaction.
* This should only be used with JTS and will return the session if no external transaction exists.
*/
Session getActiveSession();
/**
* PUBLIC:
* Return the active unit of work for the current active external (JTS) transaction.
* This should only be used with JTS and will return null if no external transaction exists.
*/
UnitOfWork getActiveUnitOfWork();
/**
* ADVANCED:
* Return the descriptor specified for the class.
* If the class does not have a descriptor but implements an interface that is also implemented
* by one of the classes stored in the map, that descriptor will be stored under the
* new class.
*/
ClassDescriptor getClassDescriptor(Class theClass);
/**
* ADVANCED:
* Return the descriptor specified for the object's class.
*/
ClassDescriptor getClassDescriptor(Object domainObject);
/**
* PUBLIC:
* Return the descriptor for the alias.
*/
ClassDescriptor getClassDescriptorForAlias(String alias);
/**
* ADVANCED:
* Answers the past time this session is as of. Indicates whether or not this
* is a special historical session where all objects are read relative to a
* particular point in time.
* @return An immutable object representation of the past time.
* <code>null</code> if no clause set, or this a regular session.
* @see #acquireHistoricalSession(org.eclipse.persistence.history.AsOfClause)
*/
org.eclipse.persistence.history.AsOfClause getAsOfClause();
/**
* Stores the default Session wide reference mode that a UnitOfWork will use when referencing
* managed objects.
* @see org.eclipse.persistence.config.ReferenceMode
*/
ReferenceMode getDefaultReferenceMode();
/**
* ADVANCED:
* Return the descriptor specified for the class.
* If the class does not have a descriptor but implements an interface that is also implemented
* by one of the classes stored in the map, that descriptor will be stored under the
* new class.
*/
@Override ClassDescriptor getDescriptor(Class<?> theClass);
/**
* ADVANCED:
* Return the descriptor specified for the object's class.
*/
@Override ClassDescriptor getDescriptor(Object domainObject);
/**
* PUBLIC:
* Return the descriptor for the alias.
* UnitOfWork delegates this to the parent
*/
ClassDescriptor getDescriptorForAlias(String alias);
/**
* ADVANCED:
* Return all registered descriptors.
*/
@Override Map<Class<?>, ClassDescriptor> getDescriptors();
/**
* ADVANCED:
* Return all pre-defined not yet parsed EJBQL queries.
*/
List<DatabaseQuery> getJPAQueries();
/**
* PUBLIC:
* Return the event manager.
* The event manager can be used to register for various session events.
*/
@Override SessionEventManager getEventManager();
/**
* PUBLIC:
* Return the ExceptionHandler.Exception handler can catch errors that occur on queries or during database access.
*/
ExceptionHandler getExceptionHandler();
/**
* PUBLIC:
* Used for JTS integration. If your application requires to have JTS control transactions instead of EclipseLink an
* external transaction controller must be specified. EclipseLink provides JTS controllers for JTS 1.0 and Weblogic's JTS.
* @see org.eclipse.persistence.transaction.JTATransactionController
*/
ExternalTransactionController getExternalTransactionController();
/**
* PUBLIC:
* The IdentityMapAccessor is the preferred way of accessing IdentityMap functions
* This will return an object which implements an interface which exposes all public
* IdentityMap functions.
*/
IdentityMapAccessor getIdentityMapAccessor();
/**
* PUBLIC:
* Returns the integrityChecker,the integrityChecker holds all the ClassDescriptor Exceptions.
*/
IntegrityChecker getIntegrityChecker();
/**
* PUBLIC:
* Return the writer to which an accessor writes logged messages and SQL.
* If not set, this reference defaults to a writer on System.out.
* To enable logging logMessages must be turned on.
*
* @see #logMessage
*/
Writer getLog();
/**
* PUBLIC:
* Return the database platform currently connected to.
* The platform is used for database specific behavior.
* NOTE: this must only be used for relational specific usage,
* it will fail for non-relational datasources.
*/
DatabasePlatform getPlatform();
/**
* PUBLIC:
* Return the database platform currently connected to.
* The platform is used for database specific behavior.
*/
@Override Platform getDatasourcePlatform();
/**
* PUBLIC:
* Return the login, the login holds any database connection information given.
* NOTE: this must only be used for relational specific usage,
* it will fail for non-relational datasources.
*/
DatabaseLogin getLogin();
/**
* PUBLIC:
* Return the login, the login holds any database connection information given.
* This return the Login interface and may need to be cast to the datasource specific implementation.
*/
@Override Login getDatasourceLogin();
/**
* PUBLIC:
* Return the name of the session.
* This is used with the session broker, or to give the session a more meaningful name.
*/
String getName();
/**
* ADVANCED:
* Return the sequence number from the database.
*/
Number getNextSequenceNumberValue(Class domainClass);
/**
* PUBLIC:
* Return the profiler.
* The profiler is a tool that can be used to determine performance bottlenecks.
* The profiler can be queries to print summaries and configure for logging purposes.
*/
SessionProfiler getProfiler();
/**
* PUBLIC:
* Return the project.
* The project includes the login and descriptor and other configuration information.
*/
@Override org.eclipse.persistence.sessions.Project getProject();
/**
* ADVANCED:
* Allow for user defined properties.
*/
Map<String, Object> getProperties();
/**
* ADVANCED:
* Returns the user defined property.
*/
Object getProperty(String name);
/**
* ADVANCED:
* Return all pre-defined queries.
*/
Map<String, List<DatabaseQuery>> getQueries();
/**
* PUBLIC:
* Return the query from the session pre-defined queries with the given name.
* This allows for common queries to be pre-defined, reused and executed by name.
*/
DatabaseQuery getQuery(String name);
/**
* PUBLIC:
* Return the query from the session pre-defined queries with the given name.
* This allows for common queries to be pre-defined, reused and executed by name.
*/
DatabaseQuery getQuery(String name, List arguments);
/**
* PUBLIC:
* Return the server platform currently used.
* The server platform is used for application server specific behavior.
*/
ServerPlatform getServerPlatform();
/**
* PUBLIC:
* Return the session log to which an accessor logs messages and SQL.
* If not set, this will default to a session log on a writer on System.out.
* To enable logging, logMessages must be turned on.
*
* @see #logMessage
*/
SessionLog getSessionLog();
/**
* PUBLIC:
* Allow any WARNING level exceptions that occur within EclipseLink to be logged and handled by the exception handler.
*/
Object handleException(RuntimeException exception) throws RuntimeException;
/**
* ADVANCED:
* Return true if a descriptor exists for the given class.
*/
boolean hasDescriptor(Class theClass);
/**
* PUBLIC:
* Return if an exception handler is present.
*/
boolean hasExceptionHandler();
/**
* PUBLIC:
* Used for JTS integration. If your application requires to have JTS control transactions instead of EclipseLink an
* external transaction controller must be specified. EclipseLink provides JTS controllers for JTS 1.0 and Weblogic's JTS.
* @see org.eclipse.persistence.transaction.JTATransactionController
*/
boolean hasExternalTransactionController();
/**
* PUBLIC:
* Return if this session is a client session.
*/
boolean isClientSession();
/**
* PUBLIC:
* Return if this session is connected to the database.
*/
boolean isConnected();
/**
* PUBLIC:
* Return if this session is a database session.
*/
boolean isDatabaseSession();
/**
* PUBLIC:
* Return if this session is a distributed session.
*/
boolean isDistributedSession();
/**
* PUBLIC:
* Return if a profiler is being used.
*/
boolean isInProfile();
/**
* PUBLIC:
* Return if this session is a remote session.
*/
boolean isRemoteSession();
/**
* PUBLIC:
* Return if this session is a server session.
*/
boolean isServerSession();
/**
* PUBLIC:
* Return if this session is a session broker.
*/
boolean isSessionBroker();
/**
* PUBLIC:
* Return if this session is a unit of work.
*/
boolean isUnitOfWork();
/**
* PUBLIC:
* Return if this session is a remote unit of work.
*/
boolean isRemoteUnitOfWork();
/**
* ADVANCED:
* Extract and return the Id from the object.
*/
Object getId(Object domainObject) throws ValidationException;
/**
* PUBLIC:
* Log the log entry.
*/
void log(SessionLogEntry entry);
/**
* Log a untranslated message to the EclipseLink log at FINER level.
*/
void logMessage(String message);
/**
* PUBLIC:
* Read all of the instances of the class from the database.
* This operation can be customized through using a ReadAllQuery,
* or through also passing in a selection criteria.
*
* @see ReadAllQuery
* @see #readAllObjects(Class, Expression)
*/
Vector readAllObjects(Class domainClass) throws DatabaseException;
/**
* PUBLIC:
* Read all the instances of the class from the database returned through execution the Call string.
* The Call can be an SQLCall or JPQLCall.
*
* example: session.readAllObjects(Employee.class, new SQLCall("SELECT * FROM EMPLOYEE"));
* @see SQLCall
* @see JPQLCall
*/
Vector readAllObjects(Class domainClass, Call aCall) throws DatabaseException;
/**
* PUBLIC:
* Read all of the instances of the class from the database matching the given expression.
* This operation can be customized through using a ReadAllQuery.
*
* @see ReadAllQuery
*/
Vector readAllObjects(Class domainClass, Expression selectionCriteria) throws DatabaseException;
/**
* PUBLIC:
* Read the first instance of the class from the database.
* This operation can be customized through using a ReadObjectQuery,
* or through also passing in a selection criteria.
* By default, this method executes a query without selection criteria and
* consequently it will always result in a database access even if an instance
* of the specified Class exists in the cache. Executing a query with
* selection criteria allows you to avoid a database access if the selected
* instance is in the cache.
* Because of this, you may wish to consider a readObject method that takes selection criteria, such as: {@link #readObject(Class, Call)}, {@link #readObject(Class, Expression)}, or {@link #readObject(Object)}.
* @see ReadObjectQuery
* @see #readAllObjects(Class, Expression)
*/
Object readObject(Class domainClass) throws DatabaseException;
/**
* PUBLIC:
* Read the first instance of the class from the database returned through execution the Call string.
* The Call can be an SQLCall or JPQLCall.
*
* example: session.readObject(Employee.class, new SQLCall("SELECT * FROM EMPLOYEE"));
* @see SQLCall
* @see JPQLCall
*/
Object readObject(Class domainClass, Call aCall) throws DatabaseException;
/**
* PUBLIC:
* Read the first instance of the class from the database matching the given expression.
* This operation can be customized through using a ReadObjectQuery.
*
* @see ReadObjectQuery
*/
Object readObject(Class domainClass, Expression selectionCriteria) throws DatabaseException;
/**
* PUBLIC:
* Use the example object to construct a read object query by the objects primary key.
* This will read the object from the database with the same primary key as the object
* or null if no object is found.
*/
Object readObject(Object object) throws DatabaseException;
/**
* PUBLIC:
* Refresh the attributes of the object and of all of its private parts from the database.
* This can be used to ensure the object is up to date with the database.
* Caution should be used when using this to make sure the application has no uncommitted
* changes to the object.
*/
Object refreshObject(Object object);
/**
* PUBLIC:
* Release the session.
* This does nothing by default, but allows for other sessions such as the ClientSession to do something.
*/
void release();
/**
* PUBLIC:
* Remove the user defined property.
*/
void removeProperty(String property);
/**
* PUBLIC:
* Remove the query name from the set of pre-defined queries
*/
void removeQuery(String queryName);
/**
* Stores the default Session wide reference mode that a UnitOfWork will use when referencing
* managed objects.
* @see org.eclipse.persistence.config.ReferenceMode
*/
void setDefaultReferenceMode(ReferenceMode defaultReferenceMode);
/**
* PUBLIC:
* Set the exceptionHandler.
* Exception handler can catch errors that occur on queries or during database access.
*/
void setExceptionHandler(ExceptionHandler exceptionHandler);
/**
* OBSOLETE:
* Previously used for JTS integration.
*
* If your application requires to have JTS control transactions a
* ServerPlatform must be specified before login, either via your sessions.xml or in code.
*
* A subclass of ServerPlatformBase should handle your requirements.
*
* If not, we suggest creating your own subclass of ServerPlatformBase to specify the
* external transaction controller class.
*
* @see org.eclipse.persistence.platform.server.CustomServerPlatform
*/
//@deprecated was removed from this method as there is no viable alternative bug 5637867 was filed to
// have this resolved.
void setExternalTransactionController(ExternalTransactionController externalTransactionController);
/**
* PUBLIC:
* Set the integrityChecker, the integrityChecker holds all the ClassDescriptor Exceptions.
*/
void setIntegrityChecker(IntegrityChecker integrityChecker);
/**
* PUBLIC:
* Set the writer to which an accessor writes logged messages and SQL.
* If not set, this reference defaults to a writer on System.out.
* To enable logging logMessages() is used.
*
* @see #logMessage
*/
void setLog(Writer log);
/**
* PUBLIC:
* Set the name of the session.
* This is used with the session broker, or to give the session a more meaningful name.
*/
void setName(String name);
/**
* PUBLIC:
* Set the profiler for the session.
* This allows for performance operations to be profiled.
*/
void setProfiler(SessionProfiler profiler);
/**
* PUBLIC:
* Allow for user defined properties.
*/
void setProperty(String propertyName, Object propertyValue);
/**
* PUBLIC:
* Set the session log to which an accessor logs messages and SQL.
* If not set, this will default to a session log on a writer on System.out.
* To enable logging, logMessages must be turned on.
*
* @see #logMessage
*/
void setSessionLog(SessionLog sessionLog);
/**
* PUBLIC:
* Return if logging is enabled (false if log level is OFF)
*/
boolean shouldLogMessages();
/**
* ADVANCED:
* This can be used to help debugging an object identity problem.
* An object identity problem is when an object in the cache references an object not in the cache.
* This method will validate that all cached objects are in a correct state.
*/
void validateCache();
/**
* PUBLIC:
* Return the log level.
* <br>Possible values for log level and category are listed in SessionLog.
* @see org.eclipse.persistence.logging.SessionLog
*/
int getLogLevel(String category);
/**
* PUBLIC:
* Return the log level.
* <br>Possible values for log level are listed in SessionLog.
* @see org.eclipse.persistence.logging.SessionLog
*/
int getLogLevel();
/**
* PUBLIC:
* Set the log level.
* <br>Possible values for log level are listed in SessionLog.
* @see org.eclipse.persistence.logging.SessionLog
*/
@Override void setLogLevel(int level);
/**
* PUBLIC:
* Check if a message of the given level would actually be logged.
* <br>Possible values for log level and category are listed in SessionLog.
* @see org.eclipse.persistence.logging.SessionLog
*/
boolean shouldLog(int Level, String category);
/**
* PUBLIC:
* Allow any SEVERE level exceptions that occur within EclipseLink to be logged and handled by the exception handler.
*/
Object handleSevere(RuntimeException exception) throws RuntimeException;
/**
* PUBLIC:
* Return if this session's descendants should use finalizers.
* The allows certain finalizers such as in ClientSession to be enabled.
* These are disable by default for performance reasons.
*/
boolean isFinalizersEnabled();
/**
* PUBLIC:
* Set if this session's descendants should use finalizers.
* The allows certain finalizers such as in ClientSession to be enabled.
* These are disable by default for performance reasons.
*/
void setIsFinalizersEnabled(boolean isFinalizersEnabled);
/**
* PUBLIC:
* Set the default query timeout for this session.
* This timeout will apply to any queries that do not have a timeout set,
* and that do not have a default timeout defined in their descriptor.
*/
void setQueryTimeoutDefault(int queryTimeoutDefault);
/**
* PUBLIC:
* Set the default query timeout units for this session.
* This timeout unit will apply to any queries that do not have a unit value set,
* and that do not have a default timeout unit defined in their descriptor.
*/
void setQueryTimeoutUnitDefault(TimeUnit queryTimeoutDefault);
/**
* PUBLIC:
* Return the session's partitioning policy.
*/
PartitioningPolicy getPartitioningPolicy();
/**
* PUBLIC:
* Set the session's partitioning policy.
* A PartitioningPolicy is used to partition, load-balance or replicate data across multiple difference databases
* or across a database cluster such as Oracle RAC.
* Partitioning can provide improved scalability by allowing multiple database machines to service requests.
*/
void setPartitioningPolicy(PartitioningPolicy partitioningPolicy);
/**
* Return the Serializer to use by default for serialization.
*/
Serializer getSerializer();
/**
* Set the Serializer to use by default for serialization.
*/
void setSerializer(Serializer serializer);
}