FileDocCategorySizeDatePackage
AbstractSession.javaAPI DocGlassfish v2 API106784Thu Jul 26 13:41:24 BST 2007oracle.toplink.essentials.internal.sessions

AbstractSession

public abstract class AbstractSession extends Object implements Session, Cloneable, Serializable
Implementation of oracle.toplink.essentials.sessions.Session The public interface should be used by public API and testing, the implementation should be used internally.
see
oracle.toplink.essentials.sessions.Session

Purpose: Define the interface and common protocol of a TopLink compliant session.

Description: The session is the primary interface into TopLink, the application should do all of its reading and writing of objects through the session. The session also manages transactions and units of work. Normally the session is passed and used by the application controler objects. Controler objects normally sit behind the GUI and perform the buiness processes required for the application, they should perform all explict database access and database access should be avoided from the domain object model. Do not use a globally accessable session instance, doing so does not allow for multiple sessions. Multiple sessions may required when performing things like data migration or multiple database access, as well the unit of work feature requires the usage of multiple session instances. Although session is abstract, any users of its subclasses should only cast the variables to Session to allow usage of any of its subclasses.

Responsibilities:

  • Connecting/disconnecting.
  • Reading and writing objects.
  • Transaction and unit of work support.
  • Identity maps and caching.
see
DatabaseSession

Fields Summary
protected transient ExceptionHandler
exceptionHandler
ExceptionHandler handles database exceptions.
protected transient IntegrityChecker
integrityChecker
IntegrityChecker catch all the descriptor Exceptions.
protected transient Project
project
The project stores configuration information, such as the descriptors and login.
protected transient ConcurrencyManager
transactionMutex
Ensure mutual exclusion of the session's transaction state across multiple threads.
protected IdentityMapAccessor
identityMapAccessor
Manages the live object cache.
protected boolean
wasJTSTransactionInternallyStarted
If Transactions were externally started
protected transient Accessor
accessor
The connection to the data store.
protected transient Platform
platform
Allow the datasource platform to be cached.
protected transient Map
queries
Stores predefine reusable queries.
protected transient List
ejbqlPlaceHolderQueries
Stores predefined not yet parsed EJBQL queries.
protected transient CommitManager
commitManager
Resolves referencial integrity on commits.
protected transient SessionProfiler
profiler
Tool that log performance information.
protected transient AbstractSession
broker
Support being owned by a session broker.
protected String
name
Used to identify a session when using the session broker.
protected transient int
numberOfActiveUnitsOfWork
Keep track of active units of work.
protected transient SessionLog
sessionLog
Destination for logged messages and SQL.
protected transient String
logSessionString
When logging the name of the session is typed: class name + system hashcode.
protected transient SessionEventManager
eventManager
Stores the event listeners for this session.
protected Map
properties
Allow for user defined properties.
protected transient ExternalTransactionController
externalTransactionController
Delegate that handles synchronizing a UnitOfWork with an external transaction.
protected transient ClassDescriptor
lastDescriptorAccessed
Last descriptor accessed, use to optimize descriptor lookup.
public boolean
isInProfile
Used to determine If a session is in a profile or not
Constructors Summary
protected AbstractSession()
INTERNAL: Create and return a new session. This should only be called if the database login information is not know at the time of creation. Normally it is better to call the constructor that takes the login information as an argument so that the session can initialize itself to the platform information given in the login.

        this.name = "";
        initializeIdentityMapAccessor();
        // PERF - move to lazy init (3286091)
        this.numberOfActiveUnitsOfWork = 0;
    
protected AbstractSession(int nothing)
INTERNAL: Create a blank session, used for proxy session.

    
public AbstractSession(Login login)
PUBLIC: Create and return a new session. By giving the login information on creation this allows the session to initialize itself to the platform given in the login. This constructor does not return a connected session. To connect the session to the database login() must be sent to it. The login(userName, password) method may also be used to connect the session, this allows for the user name and password to be given at login but for the other database information to be provided when the session is created.

        this(new oracle.toplink.essentials.sessions.Project(login));
    
public AbstractSession(Project project)
PUBLIC: Create and return a new session. This constructor does not return a connected session. To connect the session to the database login() must be sent to it. The login(userName, password) method may also be used to connect the session, this allows for the user name and password to be given at login but for the other database information to be provided when the session is created.

        this();
        this.project = project;
        if (project.getDatasourceLogin() == null) {
            throw ValidationException.projectLoginIsNull(this);
        }
    
Methods Summary
public oracle.toplink.essentials.internal.sessions.UnitOfWorkImplacquireNonSynchronizedUnitOfWork()
INTERNAL: Return a unit of work for this session not registered with the JTS transaction.

        setNumberOfActiveUnitsOfWork(getNumberOfActiveUnitsOfWork() + 1);
        UnitOfWorkImpl unitOfWork = new UnitOfWorkImpl(this);
        if (shouldLog(SessionLog.FINER, SessionLog.TRANSACTION)) {
            log(SessionLog.FINER, SessionLog.TRANSACTION, "acquire_unit_of_work_with_argument", String.valueOf(System.identityHashCode(unitOfWork)));
        }
        return unitOfWork;
    
public oracle.toplink.essentials.sessions.UnitOfWorkacquireUnitOfWork()
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
UnitOfWork

        UnitOfWorkImpl unitOfWork = acquireNonSynchronizedUnitOfWork();
        unitOfWork.registerWithTransactionIfRequired();

        return unitOfWork;
    
public voidaddAlias(java.lang.String alias, oracle.toplink.essentials.descriptors.ClassDescriptor descriptor)
PUBLIC: Add an alias for the descriptor

        project.addAlias(alias, descriptor);
    
public voidaddEjbqlPlaceHolderQuery(oracle.toplink.essentials.queryframework.DatabaseQuery query)
INTERNAL: Return all pre-defined not yet parsed EJBQL queries.

see
#getAllQueries()

        getEjbqlPlaceHolderQueries().add(query);
    
protected voidaddQuery(oracle.toplink.essentials.queryframework.DatabaseQuery query)
INTERNAL: Add the query to the session queries.

        Vector queriesByName = (Vector)getQueries().get(query.getName());
        if (queriesByName == null) {
            // lazily create Vector in Hashtable.
            queriesByName = oracle.toplink.essentials.internal.helper.NonSynchronizedVector.newInstance();
            getQueries().put(query.getName(), queriesByName);
        }

        // Check that we do not already have a query that matched it
        for (Enumeration enumtr = queriesByName.elements(); enumtr.hasMoreElements();) {
            DatabaseQuery existingQuery = (DatabaseQuery)enumtr.nextElement();
            if (Helper.areTypesAssignable(query.getArgumentTypes(), existingQuery.getArgumentTypes())) {
                throw ValidationException.existingQueryTypeConflict(query, existingQuery);
            }
        }
        queriesByName.add(query);
    
public voidaddQuery(java.lang.String name, oracle.toplink.essentials.queryframework.DatabaseQuery query)
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.

        query.setName(name);
        addQuery(query);
    
public voidafterTransaction(boolean committed, boolean isExternalTransaction)
INTERNAL: Called after transaction is completed (committed or rolled back)

    
protected voidbasicBeginTransaction()
INTERNAL: Called by beginTransaction() to start a transaction. This starts a real database transaction.

        try {
            getAccessor().beginTransaction(this);
        } catch (RuntimeException exception) {
            handleException(exception);
        }
    
protected voidbasicCommitTransaction()
INTERNAL: Called by commitTransaction() to commit a transaction. This commits the active transaction.

        try {
            getAccessor().commitTransaction(this);
        } catch (RuntimeException exception) {
            handleException(exception);
        }
    
protected voidbasicRollbackTransaction()
INTERNAL: Called by rollbackTransaction() to rollback a transaction. This rollsback the active transaction.

        try {
            getAccessor().rollbackTransaction(this);
        } catch (RuntimeException exception) {
            handleException(exception);
        }
    
public booleanbeginExternalTransaction()
INTERNAL: Attempts to begin an external transaction. Returns true only in one case - extenal transaction has been internally started during this method call: wasJTSTransactionInternallyStarted()==false in the beginning of this method and wasJTSTransactionInternallyStarted()==true in the end of this method.

        boolean externalTransactionHasBegun = false;
        if (hasExternalTransactionController() && !wasJTSTransactionInternallyStarted()) {
            try {
                getExternalTransactionController().beginTransaction(this);
            } catch (RuntimeException exception) {
                handleException(exception);
            }
            if (wasJTSTransactionInternallyStarted()) {
                externalTransactionHasBegun = true;
                log(SessionLog.FINER, SessionLog.TRANSACTION, "external_transaction_has_begun_internally");
            }
        }
        return externalTransactionHasBegun;
    
public voidbeginTransaction()
PUBLIC: Begin a transaction on the database. This allows a group of database modification to be commited or rolledback as a unit. All writes/deletes will be sent to the database be will not be visible to other users until commit. Although databases do not allow nested transaction, TopLink supports nesting through only committing to the database on the outer commit.

exception
DatabaseException if the database connection is lost or the begin is rejected.
exception
ConcurrencyException if this session's transaction is aquired by another thread and a timeout occurs.
see
#isInTransaction()

        // If there is no db transaction in progress
        // beginExternalTransaction() starts an external transaction -
        // provided externalTransactionController is used, and there is
        // no active external transaction - so we have to start one internally.
        if (!isInTransaction()) {
            beginExternalTransaction();
        }

        // For unit of work and client session multi threading is allowed as they are a context,
        // this is required for JTS/RMI/CORBA/EJB stuff where the server thread can be different across calls.
        if (isUnitOfWork() || isClientSession()) {
            getTransactionMutex().setActiveThread(Thread.currentThread());
        }

        // Ensure mutual exclusion and call subclass specific begin.
        getTransactionMutex().acquire();
        if (!getTransactionMutex().isNested()) {
            getEventManager().preBeginTransaction();
            basicBeginTransaction();
            getEventManager().postBeginTransaction();
        }
    
public voidclearIntegrityChecker()
PUBLIC: clear the integrityChecker. IntegrityChecker holds all the Descriptor Exceptions.

        setIntegrityChecker(null);
    
public voidclearLastDescriptorAccessed()
INTERNAL: clear the lastDescriptorAccessed.

        lastDescriptorAccessed = null;
    
public voidclearProfile()
PUBLIC: Clear the profiler, this will end the current profile opperation.

        setProfiler(null);
    
public java.lang.Objectclone()
INTERNAL: Clones the descriptor

        // An alternative to this process should be found
        try {
            return super.clone();
        } catch (Exception exception) {
            return null;
        }
    
public booleancommitExternalTransaction()
INTERNAL: Attempts to commit the running internally started external transaction. Returns true only in one case - extenal transaction has been internally committed during this method call: wasJTSTransactionInternallyStarted()==true in the beginning of this method and wasJTSTransactionInternallyStarted()==false in the end of this method.

        boolean externalTransactionHasCommitted = false;
        if (hasExternalTransactionController() && wasJTSTransactionInternallyStarted()) {
            try {
                getExternalTransactionController().commitTransaction(this);
            } catch (RuntimeException exception) {
                handleException(exception);
            }
            if (!wasJTSTransactionInternallyStarted()) {
                externalTransactionHasCommitted = true;
                log(SessionLog.FINER, SessionLog.TRANSACTION, "external_transaction_has_committed_internally");
            }
        }
        return externalTransactionHasCommitted;
    
public voidcommitTransaction()
PUBLIC: Commit the active database transaction. This allows a group of database modification to be commited or rolledback as a unit. All writes/deletes will be sent to the database be will not be visible to other users until commit. Although databases do not allow nested transaction, TopLink supports nesting through only committing to the database on the outer commit.

exception
DatabaseException most databases validate changes as they are done, normally errors do not occur on commit unless the disk fails or the connection is lost.
exception
ConcurrencyException if this session is not within a transaction.

        // Release mutex and call subclass specific commit.
        if (!getTransactionMutex().isNested()) {
            getEventManager().preCommitTransaction();
            basicCommitTransaction();
            getEventManager().postCommitTransaction();
        }

        // This MUST not be in a try catch or finally as if the commit failed the transaction is still open.
        getTransactionMutex().release();

        // If there is no db transaction in progress
        // if there is an active external transaction 
        // which was started internally - it should be committed internally, too.
        if (!isInTransaction()) {
            commitExternalTransaction();
        }
    
public booleancompareObjects(java.lang.Object firstObject, java.lang.Object secondObject)
INTERNAL: Return if the two object match completely. This checks the objects attributes and their private parts.

        if ((firstObject == null) && (secondObject == null)) {
            return true;
        }

        if ((firstObject == null) || (secondObject == null)) {
            return false;
        }

        if (!(firstObject.getClass().equals(secondObject.getClass()))) {
            return false;
        }

        ObjectBuilder builder = getDescriptor(firstObject.getClass()).getObjectBuilder();

        return builder.compareObjects(builder.unwrapObject(firstObject, this), builder.unwrapObject(secondObject, this), this);
    
public booleancompareObjectsDontMatch(java.lang.Object firstObject, java.lang.Object secondObject)
TESTING: Return true if the object do not match. This checks the objects attributes and their private parts.

        return !this.compareObjects(firstObject, secondObject);
    
public voidconfig(java.lang.String message, java.lang.String category)
PUBLIC:

This method is called when a config level message needs to be logged. The message will be translated

param
message the message key

        log(SessionLog.CONFIG, category, message);
    
public booleancontainsQuery(java.lang.String queryName)
PUBLIC: Return true if the pre-defined query is defined on the session.

        return getQueries().containsKey(queryName);
    
public java.lang.ObjectcopyObject(java.lang.Object original)
PUBLIC: Return a complete copy of the object. This can be used to obtain a scatch 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, the object's primary key will be reset to null.

see
#copyObject(Object, ObjectCopyingPolicy)

        return copyObject(original, new ObjectCopyingPolicy());
    
public java.lang.ObjectcopyObject(java.lang.Object original, oracle.toplink.essentials.sessions.ObjectCopyingPolicy policy)
PUBLIC: Return a complete copy of the object. This can be used to obtain a scatch copy of an object, or for templatizing an existing object into another new object. The object copying policy allow for the depth, and reseting of the primary key to null, to be specified.

        if (original == null) {
            return null;
        }

        ClassDescriptor descriptor = getDescriptor(original);
        if (descriptor == null) {
            return original;
        }

        policy.setSession(this);
        return descriptor.getObjectBuilder().copyObject(original, policy);
    
public java.util.VectorcopyReadOnlyClasses()
INTERNAL: Copy the read only classes from the unit of work Added Nov 8, 2000 JED for Patch 2.5.1.8 Ref: Prs 24502

        return getDefaultReadOnlyClasses();
    
public voiddeleteAllObjects(java.util.Collection domainObjects)
PUBLIC: delete all of the objects and all of their privately owned parts in the database. The allows for a group of objects to be deleted as a unit. The objects will be deleted through a single transactions.

exception
DatabaseException if an error occurs on the database, these include constraint violations, security violations and general database erros.
exception
OptimisticLockException if the object's descriptor is using optimistic locking and the object has been updated or deleted by another user since it was last read.

        for (Iterator objectsEnum = domainObjects.iterator(); objectsEnum.hasNext();) {
            deleteObject(objectsEnum.next());
        }
    
public voiddeleteAllObjects(java.util.Vector domainObjects)
PUBLIC: delete all of the objects and all of their privately owned parts in the database. The allows for a group of objects to be deleted as a unit. The objects will be deleted through a single transactions.

exception
DatabaseException if an error occurs on the database, these include constraint violations, security violations and general database erros.
exception
OptimisticLockException if the object's descriptor is using optimistic locking and the object has been updated or deleted by another user since it was last read.

        for (Enumeration objectsEnum = domainObjects.elements(); objectsEnum.hasMoreElements();) {
            deleteObject(objectsEnum.nextElement());
        }
    
public java.lang.ObjectdeleteObject(java.lang.Object domainObject)
PUBLIC: Delete the object and all of its privately owned parts from the database. The delete operation can be customized through using a delete query.

exception
DatabaseException if an error occurs on the database, these include constraint violations, security violations and general database erros. An database error is not raised if the object is already deleted or no rows are effected.
exception
OptimisticLockException if the object's descriptor is using optimistic locking and the object has been updated or deleted by another user since it was last read.
see
DeleteObjectQuery

        DeleteObjectQuery query = new DeleteObjectQuery();
        query.setObject(domainObject);
        return executeQuery(query);
    
public booleandoesObjectExist(java.lang.Object object)
PUBLIC: Return if the object exists on the database or not. This always checks existence on the database.

        DoesExistQuery query = new DoesExistQuery();
        query.setObject(object);
        query.checkDatabaseForDoesExist();
        return ((Boolean)executeQuery(query)).booleanValue();
    
public voiddontLogMessages()
PUBLIC: Turn off logging

        setLogLevel(SessionLog.OFF);
    
public voidendOperationProfile(java.lang.String operationName)
INTERNAL: End the operation timing.

        if (isInProfile()) {
            getProfiler().endOperationProfile(operationName);
        }
    
public java.lang.ObjectexecuteCall(oracle.toplink.essentials.queryframework.Call call, oracle.toplink.essentials.internal.sessions.AbstractRecord translationRow, oracle.toplink.essentials.queryframework.DatabaseQuery query)
INTERNAL: Overridden by subclasses that do more than just execute the call. Executes the call directly on this session and does not check which session it should have executed on.

        //** sequencing refactoring
        if (query.getAccessor() == null) {
            query.setAccessor(getAccessor());
        }
        try {
            return query.getAccessor().executeCall(call, translationRow, this);
        } finally {
            if (call.isFinished()) {
                query.setAccessor(null);
            }
        }
    
public intexecuteNonSelectingCall(oracle.toplink.essentials.queryframework.Call call)
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.

Example:

session.executeNonSelectingCall(new SQLCall("Delete from Employee");

see
#executeSelectingCall(Call)

        DataModifyQuery query = new DataModifyQuery();
        query.setCall(call);
        Integer value = (Integer)executeQuery(query);
        if (value == null) {
            return 0;
        } else {
            return value.intValue();
        }
    
public voidexecuteNonSelectingSQL(java.lang.String sqlString)
PUBLIC: Execute the sql on the database.

Example:

session.executeNonSelectingSQL("Delete from Employee");

see
#executeNonSelectingCall(Call)

        executeNonSelectingCall(new SQLCall(sqlString));
    
public java.lang.ObjectexecuteQuery(java.lang.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.

see
#addQuery(String, DatabaseQuery)

        DatabaseQuery query = getQuery(queryName);

        if (query == null) {
            throw QueryException.queryNotDefined(queryName);
        }

        return executeQuery(query);
    
public java.lang.ObjectexecuteQuery(java.lang.String queryName, java.lang.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
DescriptorQueryManager#addQuery(String, DatabaseQuery)

        ClassDescriptor descriptor = getDescriptor(domainClass);

        if (descriptor == null) {
            throw QueryException.descriptorIsMissingForNamedQuery(domainClass, queryName);
        }

        DatabaseQuery query = (DatabaseQuery)descriptor.getQueryManager().getQuery(queryName);

        if (query == null) {
            throw QueryException.queryNotDefined(queryName, domainClass);
        }

        return executeQuery(query);
    
public java.lang.ObjectexecuteQuery(java.lang.String queryName, java.lang.Class domainClass, java.lang.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
DescriptorQueryManager#addQuery(String, DatabaseQuery)

        Vector argumentValues = new Vector();
        argumentValues.addElement(arg1);
        return executeQuery(queryName, domainClass, argumentValues);
    
public java.lang.ObjectexecuteQuery(java.lang.String queryName, java.lang.Class domainClass, java.lang.Object arg1, java.lang.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
DescriptorQueryManager#addQuery(String, DatabaseQuery)

        Vector argumentValues = new Vector();
        argumentValues.addElement(arg1);
        argumentValues.addElement(arg2);
        return executeQuery(queryName, domainClass, argumentValues);
    
public java.lang.ObjectexecuteQuery(java.lang.String queryName, java.lang.Class domainClass, java.lang.Object arg1, java.lang.Object arg2, java.lang.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
DescriptorQueryManager#addQuery(String, DatabaseQuery)

        Vector argumentValues = new Vector();
        argumentValues.addElement(arg1);
        argumentValues.addElement(arg2);
        argumentValues.addElement(arg3);
        return executeQuery(queryName, domainClass, argumentValues);
    
public java.lang.ObjectexecuteQuery(java.lang.String queryName, java.lang.Class domainClass, java.util.Vector 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. The class is the descriptor in which the query was pre-defined.

see
DescriptorQueryManager#addQuery(String, DatabaseQuery)

        ClassDescriptor descriptor = getDescriptor(domainClass);

        if (descriptor == null) {
            throw QueryException.descriptorIsMissingForNamedQuery(domainClass, queryName);
        }

        DatabaseQuery query = (DatabaseQuery)descriptor.getQueryManager().getQuery(queryName, argumentValues);

        if (query == null) {
            throw QueryException.queryNotDefined(queryName, domainClass);
        }

        return executeQuery(query, argumentValues);
    
public java.lang.ObjectexecuteQuery(java.lang.String queryName, java.lang.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)

        Vector argumentValues = new Vector();
        argumentValues.addElement(arg1);
        return executeQuery(queryName, argumentValues);
    
public java.lang.ObjectexecuteQuery(java.lang.String queryName, java.lang.Object arg1, java.lang.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)

        Vector argumentValues = new Vector();
        argumentValues.addElement(arg1);
        argumentValues.addElement(arg2);
        return executeQuery(queryName, argumentValues);
    
public java.lang.ObjectexecuteQuery(java.lang.String queryName, java.lang.Object arg1, java.lang.Object arg2, java.lang.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)

        Vector argumentValues = new Vector();
        argumentValues.addElement(arg1);
        argumentValues.addElement(arg2);
        argumentValues.addElement(arg3);
        return executeQuery(queryName, argumentValues);
    
public java.lang.ObjectexecuteQuery(java.lang.String queryName, java.util.Vector 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)

        DatabaseQuery query = getQuery(queryName, argumentValues);

        if (query == null) {
            throw QueryException.queryNotDefined(queryName);
        }

        return executeQuery(query, argumentValues);
    
public java.lang.ObjectexecuteQuery(oracle.toplink.essentials.queryframework.DatabaseQuery query)
PUBLIC: Execute the database query. A query is a database operation such as reading or writting. The query allows for the operation to be customized for such things as, performance, depth, caching, etc.

see
DatabaseQuery

        return executeQuery(query, new DatabaseRecord(1));
    
public java.lang.ObjectexecuteQuery(oracle.toplink.essentials.queryframework.DatabaseQuery query, java.util.Vector argumentValues)
PUBLIC: Return the results from exeucting the database query. the arguments are passed in as a vector

        if (query == null) {
            throw QueryException.queryNotDefined();
        }

        AbstractRecord row = query.rowFromArguments(argumentValues);

        return executeQuery(query, row);
    
public java.lang.ObjectexecuteQuery(oracle.toplink.essentials.queryframework.DatabaseQuery query, oracle.toplink.essentials.internal.sessions.AbstractRecord row)
INTERNAL: Return the results from exeucting the database query. the arguments should be a database row with raw data values.

        if (hasBroker()) {
            if (!((query.isDataModifyQuery() || query.isDataReadQuery()) && (query.getSessionName() == null))) {
                return getBroker().executeQuery(query, row);
            }
        }

        if (query == null) {
            throw QueryException.queryNotDefined();
        }

        //CR#2272
        log(SessionLog.FINEST, SessionLog.QUERY, "execute_query", query);

        try {
            getEventManager().preExecuteQuery(query);
            Object result;
            if (isInProfile()) {
                result = getProfiler().profileExecutionOfQuery(query, row, this);
            } else {
                result = internalExecuteQuery(query, row);
            }
            getEventManager().postExecuteQuery(query, result);
            return result;
        } catch (RuntimeException exception) {
            if (exception instanceof QueryException) {
                QueryException queryException = (QueryException)exception;
                if (queryException.getQuery() == null) {
                    queryException.setQuery(query);
                }
                if (queryException.getQueryArgumentsRecord() == null) {
                    queryException.setQueryArguments(row);
                }
                if (queryException.getSession() == null) {
                    queryException.setSession(this);
                }
            } else if (exception instanceof DatabaseException) {
                DatabaseException databaseException = (DatabaseException)exception;
                if (databaseException.getQuery() == null) {
                    databaseException.setQuery(query);
                }
                if (databaseException.getQueryArgumentsRecord() == null) {
                    databaseException.setQueryArguments(row);
                }
                if (databaseException.getSession() == null) {
                    databaseException.setSession(this);
                }
            }
            return handleException(exception);
        }
    
public java.util.VectorexecuteSQL(java.lang.String sqlString)
PUBLIC: Execute the sql on the database and return the result. It must return a value, if no value is return executeNonSelectingSQL must be used. A vector of database rows is returned, database row implements Java 2 Map which should be used to access the data.

Example:

session.executeSelectingCall("Select * from Employee");

see
#executeSelectingCall(Call)

        return executeSelectingCall(new SQLCall(sqlString));
    
public java.util.VectorexecuteSelectingCall(oracle.toplink.essentials.queryframework.Call call)
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.

Example:

session.executeSelectingCall(new SQLCall("Select * from Employee");

see
#executeNonSelectingCall(Call)

        DataReadQuery query = new DataReadQuery();
        query.setCall(call);
        return (Vector)executeQuery(query);
    
public voidfine(java.lang.String message, java.lang.String category)
PUBLIC:

This method is called when a fine level message needs to be logged. The message will be translated

param
message the message key

        log(SessionLog.FINE, category, message);
    
public voidfiner(java.lang.String message, java.lang.String category)
PUBLIC:

This method is called when a finer level message needs to be logged. The message will be translated

param
message the message key

        log(SessionLog.FINER, category, message);
    
public voidfinest(java.lang.String message, java.lang.String category)
PUBLIC:

This method is called when a finest level message needs to be logged. The message will be translated

param
message the message key

        log(SessionLog.FINEST, category, message);
    
public synchronized oracle.toplink.essentials.internal.databaseaccess.AccessorgetAccessor()
INTERNAL: Return the lowlevel database accessor. The database accesor is used for direct database access.

        if ((accessor == null) && (project != null) && (project.getDatasourceLogin() != null)) {
            // PERF: lazy init, not always required.
            accessor = project.getDatasourceLogin().buildAccessor();
        }
        return accessor;
    
public oracle.toplink.essentials.internal.databaseaccess.AccessorgetAccessor(java.lang.Class domainClass)
INTERNAL: Return the lowlevel database accessor. The database accesor is used for direct database access. If sessionBroker is used, the right accessor for this broker will be returned.

        return getAccessor();
    
public oracle.toplink.essentials.internal.databaseaccess.AccessorgetAccessor(java.lang.String sessionName)
INTERNAL: Return the lowlevel database accessor. The database accesor is used for direct database access. If sessionBroker is used, the right accessor for this broker will be returned based on the session name.

        return getAccessor();
    
public oracle.toplink.essentials.sessions.SessiongetActiveSession()
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.

        oracle.toplink.essentials.sessions.Session activeSession = getActiveUnitOfWork();
        if (activeSession == null) {
            activeSession = this;
        }

        return activeSession;
    
public oracle.toplink.essentials.sessions.UnitOfWorkgetActiveUnitOfWork()
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.

        if (hasExternalTransactionController()) {
            return getExternalTransactionController().getActiveUnitOfWork();
        }

        /* Steven Vo:  CR# 2517
           Get from the server session since the external transaction controller could be
           null out from the client session by TL WebLogic 5.1 to provide non-jts transaction
           operations
          */
        if (isClientSession()) {
            return ((oracle.toplink.essentials.threetier.ClientSession)this).getParent().getActiveUnitOfWork();
        }

        return null;
    
public java.util.MapgetAliasDescriptors()
INTERNAL: Returns the alias descriptors hashtable.

        return project.getAliasDescriptors();
    
public java.util.VectorgetAllQueries()
PUBLIC: Return the pre-defined queries in this session. A single vector containing all the queries is returned.

see
#getQueries()

        Vector allQueries = new Vector();
        for (Iterator vectors = getQueries().values().iterator(); vectors.hasNext();) {
            allQueries.addAll((Vector)vectors.next());
        }
        return allQueries;
    
public oracle.toplink.essentials.internal.sessions.AbstractSessiongetBroker()
INTERNAL: Allow the session to be used from a session broker.

        return broker;
    
public oracle.toplink.essentials.descriptors.ClassDescriptorgetClassDescriptor(java.lang.Class theClass)
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 hashtable, that descriptor will be stored under the new class.

		ClassDescriptor desc = getDescriptor(theClass);
		if (desc instanceof ClassDescriptor) {
			return (ClassDescriptor)desc;
		} else {
			throw ValidationException.cannotCastToClass(desc, desc.getClass(), ClassDescriptor.class);
		}
	
public oracle.toplink.essentials.descriptors.ClassDescriptorgetClassDescriptor(java.lang.Object domainObject)
ADVANCED: Return the descriptor specified for the object's class.

		ClassDescriptor desc = getDescriptor(domainObject);
		if (desc instanceof ClassDescriptor) {
			return (ClassDescriptor)desc;
		} else {
			throw ValidationException.cannotCastToClass(desc, desc.getClass(), ClassDescriptor.class);
		}
	
public oracle.toplink.essentials.descriptors.ClassDescriptorgetClassDescriptorForAlias(java.lang.String alias)
PUBLIC: Return the descriptor for the alias. UnitOfWork delegates this to the parent

        return project.getClassDescriptorForAlias(alias);
	
public oracle.toplink.essentials.internal.sessions.CommitManagergetCommitManager()
INTERNAL: The commit manager is used to resolve referncial integrity on commits of multiple objects. All brokered sessions share the same commit manager.

        if (hasBroker()) {
            return getBroker().getCommitManager();
        }

        // PERF: lazy init, not always required, not required for client sessions
        if (commitManager == null) {
            commitManager = new CommitManager(this);
        }
        return commitManager;
    
public oracle.toplink.essentials.sessions.LogingetDatasourceLogin()
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.

        return getProject().getDatasourceLogin();
    
public oracle.toplink.essentials.internal.databaseaccess.PlatformgetDatasourcePlatform()
PUBLIC: Return the database platform currently connected to. The platform is used for database specific behavoir.

        // PERF: Cache the platform.
        if (platform == null) {
            platform = getDatasourceLogin().getDatasourcePlatform();
        }
        return platform;
    
public java.util.VectorgetDefaultReadOnlyClasses()
INTERNAL: Returns the set of read-only classes that gets assigned to each newly created UnitOfWork.

see
oracle.toplink.essentials.sessions.Project#setDefaultReadOnlyClasses(Vector)

        //Bug#3911318  All brokered sessions share the same DefaultReadOnlyClasses.
        if (hasBroker()) {
            return getBroker().getDefaultReadOnlyClasses();
        }
        return getProject().getDefaultReadOnlyClasses();
    
public oracle.toplink.essentials.descriptors.ClassDescriptorgetDescriptor(java.lang.Class theClass)
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 hashtable, that descriptor will be stored under the new class.

        if (theClass == null) {
            return null;
        }

        // Optimize descriptor lookup through caching the last one accessed.
        ClassDescriptor lastDescriptor = this.lastDescriptorAccessed;
        if ((lastDescriptor != null) && (lastDescriptor.getJavaClass().equals(theClass))) {
            return lastDescriptor;
        }

        ClassDescriptor descriptor = (ClassDescriptor)getDescriptors().get(theClass);

        if ((descriptor == null) && hasBroker()) {
            // Also check the broker
            descriptor = getBroker().getDescriptor(theClass);
        }
        if (descriptor == null) {
            // Allow for an event listener to lazy register the descriptor for a class.
            getEventManager().missingDescriptor(theClass);
            descriptor = (ClassDescriptor)getDescriptors().get(theClass);
        }

        if (descriptor == null) {
            // This allows for the correct descriptor to be found if the class implements an interface,
            // or extends a class that a descriptor is register for.
            // This is used by EJB to find the descriptor for a stub and remote to unwrap it,
            // and by inheritance to allow for subclasses that have no additional state to not require a descriptor.
            if (!theClass.isInterface()) {
                Class[] interfaces = theClass.getInterfaces();
                for (int index = 0; index < interfaces.length; ++index) {
                    Class interfaceClass = (Class)interfaces[index];
                    descriptor = getDescriptor(interfaceClass);
                    if (descriptor != null) {
                        getDescriptors().put(interfaceClass, descriptor);
                        break;
                    }
                }
                if (descriptor == null) {
                    descriptor = getDescriptor(theClass.getSuperclass());
                }
            }
        }

        // Cache for optimization.
        this.lastDescriptorAccessed = descriptor;

        return descriptor;
    
public oracle.toplink.essentials.descriptors.ClassDescriptorgetDescriptor(java.lang.Object domainObject)
ADVANCED: Return the descriptor specified for the object's class.

        return getDescriptor(domainObject.getClass());        
    
public oracle.toplink.essentials.descriptors.ClassDescriptorgetDescriptorForAlias(java.lang.String alias)
PUBLIC: Return the descriptor for the alias

        return project.getDescriptorForAlias(alias);
    
public java.util.MapgetDescriptors()
ADVANCED: Return all registered descriptors.

        return getProject().getDescriptors();
    
public java.util.ListgetEjbqlPlaceHolderQueries()
ADVANCED: Return all pre-defined not yet parsed EJBQL queries.

see
#getAllQueries()

        // PERF: lazy init, not normally required.
        if (ejbqlPlaceHolderQueries == null) {
            ejbqlPlaceHolderQueries = new Vector();
        }
        return ejbqlPlaceHolderQueries;
    
public synchronized oracle.toplink.essentials.sessions.SessionEventManagergetEventManager()
PUBLIC: Return the event manager. The event manager can be used to register for various session events.

        if (eventManager == null) {
            // PERF: lazy init.
            eventManager = new SessionEventManager(this);
        }
        return eventManager;
    
public oracle.toplink.essentials.exceptions.ExceptionHandlergetExceptionHandler()
PUBLIC: Return the ExceptionHandler.Exception handler can catch errors that occur on queries or during database access.

        return exceptionHandler;
    
public java.lang.StringgetExceptionHandlerClass()
INTERNAL: Return a string which represents my ExceptionHandler's class Added for F2104: Properties.xml - gn

        String className = null;
        try {
            className = getExceptionHandler().getClass().getName();
        } catch (Exception exception) {
            return null;
        }
        return className;
    
public oracle.toplink.essentials.internal.sessions.AbstractSessiongetExecutionSession(oracle.toplink.essentials.queryframework.DatabaseQuery query)
INTERNAL: Gets the session which this query will be executed on. Generally will be called immediately before the call is translated, which is immediately before session.executeCall.

Since the execution session also knows the correct datasource platform to execute on, it is often used in the mappings where the platform is needed for type conversion, or where calls are translated.

Is also the session with the accessor. Will return a ClientSession if it is in transaction and has a write connection.

return
a session with a live accessor
param
query may store session name or reference class for brokers case

        return this;
    
public oracle.toplink.essentials.sessions.ExternalTransactionControllergetExternalTransactionController()
PUBLIC: Used for JTS integration. If your application requires to have JTS control transactions instead of TopLink an external transaction controler must be specified. TopLink provides JTS controlers for several JTS implementations including JTS 1.0, Weblogic 5.1 and WebSphere 3.0.

see
oracle.toplink.essentials.transaction.JTATransactionController

        return externalTransactionController;
    
public oracle.toplink.essentials.sessions.IdentityMapAccessorgetIdentityMapAccessor()
PUBLIC: The IdentityMapAccessor is the preferred way of accessing IdentityMap funcitons This will return an object which implements an interface which exposes all public IdentityMap functions.

        return identityMapAccessor;
    
public oracle.toplink.essentials.internal.sessions.IdentityMapAccessorgetIdentityMapAccessorInstance()
INTERNAL: Return the internally available IdentityMapAccessor instance.

        return identityMapAccessor;
    
public oracle.toplink.essentials.exceptions.IntegrityCheckergetIntegrityChecker()
PUBLIC: Returns the integrityChecker.IntegrityChecker holds all the Descriptor Exceptions.

        // BUG# 2700595 - Lazily create an IntegrityChecker if one has not already been created.
        if (integrityChecker == null) {
            integrityChecker = new IntegrityChecker();
        }

        return integrityChecker;
    
public java.io.WritergetLog()
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.

see
#getSessionLog()

        return getSessionLog().getWriter();
    
public intgetLogLevel(java.lang.String category)
PUBLIC:

Return the log level

return
the log level

param
category the string representation of a TopLink category, e.g. "sql", "transaction" ...

        return getSessionLog().getLevel(category);
    
public intgetLogLevel()
PUBLIC:

Return the log level

return
the log level

        return getSessionLog().getLevel();
    
public java.lang.StringgetLogSessionString()
INTERNAL: Return the name of the session: class name + system hashcode.

This should be the implementation of toString(), and also the value should be calculated in the constructor for it is used all the time. However everything is lazily initialized now and the value is transient for the system hashcode could vary?

        if (logSessionString == null) {
            StringWriter writer = new StringWriter();
            writer.write(getSessionTypeString());
            writer.write("(");
            writer.write(String.valueOf(System.identityHashCode(this)));
            writer.write(")");
            logSessionString = writer.toString();
        }
        return logSessionString;
    
public oracle.toplink.essentials.sessions.DatabaseLogingetLogin()
INTERNAL: Return the login, the login holds any database connection information given. This has been replaced by getDatasourceLogin to make use of the Login interface to support non-relational datasources, if DatabaseLogin API is required it will need to be cast.

        try {
            return (DatabaseLogin)getDatasourceLogin();
        } catch (ClassCastException wrongType) {
            throw ValidationException.notSupportedForDatasource();
        }
    
public java.lang.StringgetName()
PUBLIC: Return the name of the session. This is used with the session broker, or to give the session a more meaningful name.

        return name;
    
public longgetNextQueryId()
INTERNAL: Called by a sessions queries to obtain individual query ids. CR #2698903

        return QueryCounter.getCount();
    
public java.lang.NumbergetNextSequenceNumberValue(java.lang.Class domainClass)
ADVANCED: Return the sequnce number from the database

        return (Number)getSequencing().getNextValue(domainClass);
    
public intgetNumberOfActiveUnitsOfWork()
INTERNAL: Return the number of units of work connected.

        return numberOfActiveUnitsOfWork;
    
public oracle.toplink.essentials.internal.sessions.AbstractSessiongetParentIdentityMapSession(oracle.toplink.essentials.queryframework.DatabaseQuery query)
INTERNAL: Gets the next link in the chain of sessions followed by a query's check early return, the chain of sessions with identity maps all the way up to the root session.

        return getParentIdentityMapSession(query, false, false);
    
public oracle.toplink.essentials.internal.sessions.AbstractSessiongetParentIdentityMapSession(oracle.toplink.essentials.queryframework.DatabaseQuery query, boolean canReturnSelf, boolean terminalOnly)
INTERNAL: Gets the next link in the chain of sessions followed by a query's check early return, the chain of sessions with identity maps all the way up to the root session.

Used for session broker which delegates to registered sessions, or UnitOfWork which checks parent identity map also.

param
canReturnSelf true when method calls itself. If the path starting at this is acceptable. Sometimes true if want to move to the first valid session, i.e. executing on ClientSession when really should be on ServerSession.
param
terminalOnly return the session we will execute the call on, not the next step towards it.
return
this if there is no next link in the chain

        return this;
    
public oracle.toplink.essentials.internal.databaseaccess.DatabasePlatformgetPlatform()
PUBLIC: Return the database platform currently connected to. The platform is used for database specific behavoir. NOTE: this must only be used for relational specific usage, it will fail for non-relational datasources.

        
        // PERF: Cache the platform.
        if (platform == null) {
            platform = getDatasourceLogin().getPlatform();
        }
        return (DatabasePlatform)platform;
    
public oracle.toplink.essentials.internal.databaseaccess.PlatformgetPlatform(java.lang.Class domainClass)
INTERNAL: Return the database platform currently connected to for specified class. The platform is used for database specific behavoir.

        // PERF: Cache the platform.
        if (platform == null) {
            platform = getDatasourcePlatform();
        }
        return platform;
    
public oracle.toplink.essentials.sessions.SessionProfilergetProfiler()
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.

        return profiler;
    
public oracle.toplink.essentials.sessions.ProjectgetProject()
PUBLIC: Return the project, the project holds configuartion information including the descriptors.

        return project;
    
public java.util.MapgetProperties()
ADVANCED: Allow for user defined properties.

        if (properties == null) {
            properties = new HashMap(5);
        }
        return properties;
    
public java.lang.ObjectgetProperty(java.lang.String name)
ADVANCED: Returns the user defined property.

        return getProperties().get(name);
    
public java.util.MapgetQueries()
ADVANCED: Return all pre-defined queries.

see
#getAllQueries()

        // PERF: lazy init, not normally required.
        if (queries == null) {
            queries = new HashMap(5);
        }
        return queries;
    
public oracle.toplink.essentials.queryframework.DatabaseQuerygetQuery(java.lang.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.

        return getQuery(name, null);
    
public oracle.toplink.essentials.queryframework.DatabaseQuerygetQuery(java.lang.String name, java.util.Vector arguments)
PUBLIC: Return the query from the session pre-defined queries with the given name and argument types. This allows for common queries to be pre-defined, reused and executed by name. This method should be used if the Session has multiple queries with the same name but different arguments.

see
#getQuery(String)

        Vector queries = (Vector)getQueries().get(name);
        if ((queries == null) || queries.isEmpty()) {
            return null;
        }

        // Short circuit the simple, most common case of only one query.
        if (queries.size() == 1) {
            return (DatabaseQuery)queries.firstElement();
        }

        // CR#3754; Predrag; mar 19/2002;
        // We allow multiple named queries with the same name but
        // different argument set; we can have only one query with
        // no arguments; Vector queries is not sorted;
        // When asked for the query with no parameters the
        // old version did return the first query - wrong: 
        // return (DatabaseQuery) queries.firstElement();
        int argumentTypesSize = 0;
        if (arguments != null) {
            argumentTypesSize = arguments.size();
        }
        Vector argumentTypes = new Vector(argumentTypesSize);
        for (int i = 0; i < argumentTypesSize; i++) {
            argumentTypes.addElement(arguments.elementAt(i).getClass());
        }
        for (Enumeration queriesEnum = queries.elements(); queriesEnum.hasMoreElements();) {
            DatabaseQuery query = (DatabaseQuery)queriesEnum.nextElement();
            if (Helper.areTypesAssignable(argumentTypes, query.getArgumentTypes())) {
                return query;
            }
        }
        return null;
    
public oracle.toplink.essentials.internal.sessions.AbstractSessiongetRootSession(oracle.toplink.essentials.queryframework.DatabaseQuery query)
INTERNAL: The session that this query is executed against when not in transaction. The session containing the shared identity map.

In most cases this is the root ServerSession or DatabaseSession.

In cases where objects are not to be cached in the global identity map an alternate session may be returned:

  • A ClientSession if in transaction
  • An isolated ClientSession or HistoricalSession
  • A registered session of a root SessionBroker

        return getParentIdentityMapSession(query, false, true);
    
public oracle.toplink.essentials.internal.sequencing.SequencinggetSequencing()
INTERNAL: Return the Sequencing object used by the session.

        return null;
    
public oracle.toplink.essentials.platform.server.ServerPlatformgetServerPlatform()
INTERNAL: Marked internal as this is not customer API but helper methods for accessing the server platform from within TopLink's other sessions types (ie not DatabaseSession)

        return null;
    
public oracle.toplink.essentials.internal.sessions.AbstractSessiongetSessionForClass(java.lang.Class domainClass)
INTERNAL: Return the session to be used for the class. Used for compatibility with the session broker.

        if (hasBroker()) {
            return getBroker().getSessionForClass(domainClass);
        }
        return this;
    
public oracle.toplink.essentials.logging.SessionLoggetSessionLog()
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.

        if (sessionLog == null) {
            setSessionLog(new DefaultSessionLog());
        }
        return sessionLog;
    
public java.lang.StringgetSessionTypeString()
INTERNAL: Returns the type of session, its class.

Override to hide from the user when they are using an internal subclass of a known class.

A user does not need to know that their UnitOfWork is a non-deferred UnitOfWork, or that their ClientSession is an IsolatedClientSession.

        return Helper.getShortClassName(getClass());
    
public synchronized oracle.toplink.essentials.internal.helper.ConcurrencyManagergetTransactionMutex()
INTERNAL: The transaction mutex ensure mutual exclusion on transaction across multiple threads.

        // PERF: not always required, defer.
        if (transactionMutex == null) {
            transactionMutex = new ConcurrencyManager();
        }
        return transactionMutex;
    
public java.lang.ObjecthandleException(java.lang.RuntimeException exception)
PUBLIC: Allow any WARNING level exceptions that occur within TopLink to be logged and handled by the exception handler.

        if ((exception instanceof TopLinkException)) {
            TopLinkException topLinkException = (TopLinkException)exception;
            if (topLinkException.getSession() == null) {
                topLinkException.setSession(this);
            }
            //Bug#3559280  Avoid logging an exception twice
            if (!topLinkException.hasBeenLogged()) {
                logThrowable(SessionLog.WARNING, null, exception);
                topLinkException.setHasBeenLogged(true);
            }
        } else {
            logThrowable(SessionLog.WARNING, null, exception);
        }
        if (hasExceptionHandler()) {
            return getExceptionHandler().handleException(exception);
        } else {
            throw exception;
        }
    
public java.lang.ObjecthandleSevere(java.lang.RuntimeException exception)
PUBLIC: Allow any SEVERE level exceptions that occur within TopLink to be logged and handled by the exception handler.

        logThrowable(SessionLog.SEVERE, null, exception);
        if (hasExceptionHandler()) {
            return getExceptionHandler().handleException(exception);
        } else {
            throw exception;
        }
    
public booleanhasBroker()
INTERNAL: Allow the session to be used from a session broker.

        return broker != null;
    
public booleanhasDescriptor(java.lang.Class theClass)
ADVANCED: Return true if a descriptor exists for the given class.

        if (theClass == null) {
            return false;
        }

        return getDescriptors().get(theClass) != null;
    
public booleanhasExceptionHandler()
PUBLIC: Return if an exception handler is present.

        if (exceptionHandler == null) {
            return false;
        }
        return true;
    
public booleanhasExternalTransactionController()
PUBLIC: Used for JTA integration. If your application requires to have JTA control transactions instead of TopLink an external transaction controler must be specified. TopLink provides JTA controlers for JTA 1.0 and application servers.

see
oracle.toplink.essentials.transaction.JTATransactionController

        return externalTransactionController != null;
    
public booleanhasProperties()
INTERNAL: Allow to check for user defined properties.

        return ((properties != null) && !properties.isEmpty());
    
public voidincrementProfile(java.lang.String operationName)
INTERNAL: Updates the count of SessionProfiler event

        if (isInProfile()) {
            getProfiler().occurred(operationName);
        }
    
public voidinfo(java.lang.String message, java.lang.String category)
PUBLIC:

This method is called when a info level message needs to be logged. The message will be translated

param
message the message key

        log(SessionLog.INFO, category, message);
    
public voidinitializeIdentityMapAccessor()
INTERNAL: Set up the IdentityMapManager. This method allows subclasses of Session to override the default IdentityMapManager functionality.

        this.identityMapAccessor = new oracle.toplink.essentials.internal.sessions.IdentityMapAccessor(this, new IdentityMapManager(this));
    
public java.lang.ObjectinsertObject(java.lang.Object domainObject)
PUBLIC: Insert the object and all of its privately owned parts into the database. Insert should only be used if the application knows that the object is new, otherwise writeObject should be used. The insert operation can be customized through using an insert query.

exception
DatabaseException if an error occurs on the database, these include constraint violations, security violations and general database erros.
see
InsertObjectQuery
see
#writeObject(Object)

        InsertObjectQuery query = new InsertObjectQuery();
        query.setObject(domainObject);
        return executeQuery(query);
    
public java.lang.ObjectinternalExecuteQuery(oracle.toplink.essentials.queryframework.DatabaseQuery query, oracle.toplink.essentials.internal.sessions.AbstractRecord databaseRow)
INTERNAL: Return the results from exeucting the database query. The arguments should be a database row with raw data values. This method is provided to allow subclasses to change the default querying behavoir. All querying goes through this method.

        return query.execute(this, databaseRow);
    
public booleanisBroker()
INTERNAL: Returns true if the session is a session Broker.

        return false;
    
public booleanisClassReadOnly(java.lang.Class theClass)
PUBLIC: Return if the class is defined as read-only.

        ClassDescriptor descriptor = getDescriptor(theClass);
        return isClassReadOnly(theClass, descriptor);
    
public booleanisClassReadOnly(java.lang.Class theClass, oracle.toplink.essentials.descriptors.ClassDescriptor descriptor)
INTERNAL: Return if the class is defined as read-only. PERF: Pass descriptor to avoid re-lookup.

        if ((descriptor != null) && descriptor.shouldBeReadOnly()) {
            return true;
        }
        if (theClass != null) {
            return getDefaultReadOnlyClasses().contains(theClass);
        }
        return false;
    
public booleanisClientSession()
PUBLIC: Return if this session is a client session.

        return false;
    
public booleanisConnected()
PUBLIC: Return if this session is connected to the database.

        if (getAccessor() == null) {
            return false;
        }

        return getAccessor().isConnected();
    
public booleanisDatabaseSession()
PUBLIC: Return if this session is a database session.

        return false;
    
public booleanisDistributedSession()
PUBLIC: Return if this session is a distributed session.

        return false;
    
public booleanisInBroker()
INTERNAL: Returns true if the session is in a session Broker.

        return false;
    
public booleanisInProfile()
PUBLIC: Return if a profiler is being used.

        return isInProfile;
    
public booleanisInTransaction()
PUBLIC: Return if the session is currently in the progress of a database transaction. Because nested transactions are allowed check if the transaction mutex has been aquired.

        return getTransactionMutex().isAcquired();
    
public booleanisRemoteSession()
PUBLIC: Return if this session is remote.

        return false;
    
public booleanisRemoteUnitOfWork()
PUBLIC: Return if this session is a unit of work.

        return false;
    
public booleanisServerSession()
PUBLIC: Return if this session is a server session.

        return false;
    
public booleanisSessionBroker()
PUBLIC: Return if this session is a session broker.

        return false;
    
public booleanisUnitOfWork()
PUBLIC: Return if this session is a unit of work.

        return false;
    
public java.util.VectorkeyFromObject(java.lang.Object domainObject)
ADVANCED: Extract and return the primary key from the object.

        ClassDescriptor descriptor = getDescriptor(domainObject);
        return keyFromObject(domainObject, descriptor);
    
public java.util.VectorkeyFromObject(java.lang.Object domainObject, oracle.toplink.essentials.descriptors.ClassDescriptor descriptor)
ADVANCED: Extract and return the primary key from the object.

        if (descriptor == null) {
            throw ValidationException.missingDescriptor(domainObject.getClass().getName());
        }
        Object implemention = descriptor.getObjectBuilder().unwrapObject(domainObject, this);
        if (implemention == null) {
            return null;
        }
        return descriptor.getObjectBuilder().extractPrimaryKeyFromObject(implemention, this);
    
public voidlog(oracle.toplink.essentials.logging.SessionLogEntry entry)
PUBLIC: Log the log entry.

        if (shouldLog(entry.getLevel(), entry.getNameSpace())) {
            if (entry.getSession() == null) {// Used for proxy session.
                entry.setSession(this);
            }
            getSessionLog().log(entry);
        }
    
public voidlog(int level, java.lang.String category, java.lang.String message)
PUBLIC:

Log a message with level and category that needs to be translated.

param
level the log request level value

param
message the string message

param
category the string representation of a TopLink category.

        if (!shouldLog(level, category)) {
            return;
        }
        log(level, category, message, (Object[])null);
    
public voidlog(int level, java.lang.String category, java.lang.String message, java.lang.Object param)
INTERNAL:

Log a message with level, category and a parameter that needs to be translated.

param
level the log request level value

param
message the string message

param
category the string representation of a TopLink category.

param
param a parameter of the message

        if (!shouldLog(level, category)) {
            return;
        }
        log(level, category, message, new Object[] { param });
    
public voidlog(int level, java.lang.String category, java.lang.String message, java.lang.Object param1, java.lang.Object param2)
INTERNAL:

Log a message with level, category and two parameters that needs to be translated.

param
level the log request level value

param
message the string message

param
category the string representation of a TopLink category.

param
param1 a parameter of the message

param
param2 second parameter of the message

        if (!shouldLog(level, category)) {
            return;
        }
        log(level, category, message, new Object[] { param1, param2 });
    
public voidlog(int level, java.lang.String category, java.lang.String message, java.lang.Object param1, java.lang.Object param2, java.lang.Object param3)
INTERNAL:

Log a message with level, category and three parameters that needs to be translated.

param
level the log request level value

param
message the string message

param
category the string representation of a TopLink category.

param
param1 a parameter of the message

param
param2 second parameter of the message

param
param3 third parameter of the message

        if (!shouldLog(level, category)) {
            return;
        }
        log(level, category, message, new Object[] { param1, param2, param3 });
    
public voidlog(int level, java.lang.String category, java.lang.String message, java.lang.Object[] params)
INTERNAL:

Log a message with level, category and an array of parameters that needs to be translated.

param
level the log request level value

param
message the string message

param
category the string representation of a TopLink category.

param
params array of parameters to the message

        log(level, category, message, params, null);
    
public voidlog(int level, java.lang.String category, java.lang.String message, java.lang.Object[] params, oracle.toplink.essentials.internal.databaseaccess.Accessor accessor)
INTERNAL:

Log a message with level, category, parameters and accessor that needs to be translated.

param
level the log request level value

param
message the string message

param
params array of parameters to the message

param
accessor the connection that generated the log entry

param
category the string representation of a TopLink category.

        log(level, category, message, params, accessor, true);
    
public voidlog(int level, java.lang.String category, java.lang.String message, java.lang.Object[] params, oracle.toplink.essentials.internal.databaseaccess.Accessor accessor, boolean shouldTranslate)
INTERNAL:

Log a message with level, category, parameters and accessor. shouldTranslate determines if the message needs to be translated.

param
level the log request level value

param
message the string message

param
params array of parameters to the message

param
accessor the connection that generated the log entry

param
category the string representation of a TopLink category.

param
shouldTranslate true if the message needs to be translated.

        if (shouldLog(level, category)) {
            startOperationProfile(SessionProfiler.Logging);
            log(new SessionLogEntry(level, category, this, message, params, accessor, shouldTranslate));
            endOperationProfile(SessionProfiler.Logging);
        }
    
public voidlog(int level, java.lang.String message, java.lang.Object[] params, oracle.toplink.essentials.internal.databaseaccess.Accessor accessor)
INTERNAL:

Log a message with level, parameters and accessor that needs to be translated.

param
level the log request level value

param
message the string message

param
params array of parameters to the message

param
accessor the connection that generated the log entry

        log(level, message, params, accessor, true);
    
public voidlog(int level, java.lang.String message, java.lang.Object[] params, oracle.toplink.essentials.internal.databaseaccess.Accessor accessor, boolean shouldTranslate)
INTERNAL:

Log a message with level, parameters and accessor. shouldTranslate determines if the message needs to be translated.

param
level the log request level value

param
message the string message

param
params array of parameters to the message

param
accessor the connection that generated the log entry

param
shouldTranslate true if the message needs to be translated.

        if (shouldLog(level, null)) {
            startOperationProfile(SessionProfiler.Logging);
            log(new SessionLogEntry(level, this, message, params, accessor, shouldTranslate));
            endOperationProfile(SessionProfiler.Logging);
        }
    
public voidlogMessage(java.lang.String message)
Log a untranslated message to the TopLink log at FINER level.

        log(SessionLog.FINER, message, (Object[])null, null, false);
    
public voidlogThrowable(int level, java.lang.String category, java.lang.Throwable throwable)
PUBLIC:

Log a throwable with level and category.

param
level the log request level value

param
category the string representation of a TopLink category.

param
throwable a Throwable

        // Must not create the log if not logging as is a performance issue.
        if (shouldLog(level, category)) {
            startOperationProfile(SessionProfiler.Logging);
            log(new SessionLogEntry(this, level, category, throwable));
            endOperationProfile(SessionProfiler.Logging);
        }
    
public oracle.toplink.essentials.queryframework.DatabaseQueryprepareDatabaseQuery(oracle.toplink.essentials.queryframework.DatabaseQuery query)
INTERNAL: A call back to do session specific preparation of a query.

The call back occurs soon before we clone the query for execution, meaning that if this method needs to clone the query then the caller will determine that it doesn't need to clone the query itself.

        if (!isUnitOfWork() && query.isObjectLevelReadQuery()) {
            return ((ObjectLevelReadQuery)query).prepareOutsideUnitOfWork(this);
        } else {
            return query;
        }
    
public voidprocessEJBQLQueries()
INTERNAL: Allows for EJBQL strings to be parsed and added as named queries. Should be called after descriptors have been initialized to ensure all mappings exist.

        List queries = getEjbqlPlaceHolderQueries();
        processEJBQLQueries(queries);
        queries.clear();
    
public voidprocessEJBQLQueries(java.util.List queries)
INTERNAL: Allows for EJBQL strings to be parsed and added as named queries. Should be called after descriptors have been initialized to ensure all mappings exist.

        for (Iterator iterator = queries.iterator(); iterator.hasNext();) {
            EJBQLPlaceHolderQuery existingQuery = (EJBQLPlaceHolderQuery)iterator.next();
            this.addQuery(existingQuery.processEjbQLQuery(this));
        }
    
public java.util.VectorreadAllObjects(java.lang.Class domainClass)
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)

        ReadAllQuery query = new ReadAllQuery();
        query.setReferenceClass(domainClass);
        return (Vector)executeQuery(query);
    
public java.util.VectorreadAllObjects(java.lang.Class domainClass, java.lang.String sqlString)
PUBLIC: Read all of the instances of the class from the database return through execution the SQL string. The SQL string must be a valid SQL select statement or selecting stored procedure call. This operation can be customized through using a ReadAllQuery.

see
ReadAllQuery

        ReadAllQuery query = new ReadAllQuery();
        query.setReferenceClass(domainClass);
        query.setSQLString(sqlString);
        return (Vector)executeQuery(query);
    
public java.util.VectorreadAllObjects(java.lang.Class referenceClass, oracle.toplink.essentials.queryframework.Call aCall)
PUBLIC: Read all the instances of the class from the database returned through execution the Call string. The Call can be an SQLCall or EJBQLCall. example: session.readAllObjects(Employee.class, new SQLCall("SELECT * FROM EMPLOYEE"));

see
Call

        ReadAllQuery raq = new ReadAllQuery();
        raq.setReferenceClass(referenceClass);
        raq.setCall(aCall);
        return (Vector)executeQuery(raq);
    
public java.util.VectorreadAllObjects(java.lang.Class domainClass, oracle.toplink.essentials.expressions.Expression expression)
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

        ReadAllQuery query = new ReadAllQuery();
        query.setReferenceClass(domainClass);
        query.setSelectionCriteria(expression);
        return (Vector)executeQuery(query);
    
public java.lang.ObjectreadObject(java.lang.Class domainClass)
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.

see
ReadObjectQuery
see
#readAllObjects(Class, Expression)

        ReadObjectQuery query = new ReadObjectQuery();
        query.setReferenceClass(domainClass);
        return executeQuery(query);
    
public java.lang.ObjectreadObject(java.lang.Class domainClass, java.lang.String sqlString)
PUBLIC: Read the first instance of the class from the database return through execution the SQL string. The SQL string must be a valid SQL select statement or selecting stored procedure call. This operation can be customized through using a ReadObjectQuery.

see
ReadObjectQuery

        ReadObjectQuery query = new ReadObjectQuery();
        query.setReferenceClass(domainClass);
        query.setSQLString(sqlString);
        return executeQuery(query);
    
public java.lang.ObjectreadObject(java.lang.Class domainClass, oracle.toplink.essentials.queryframework.Call aCall)
PUBLIC: Read the first instance of the class from the database returned through execution the Call string. The Call can be an SQLCall or EJBQLCall. example: session.readObject(Employee.class, new SQLCall("SELECT * FROM EMPLOYEE"));

see
SQLCall
see
EJBQLCall

        ReadObjectQuery query = new ReadObjectQuery();
        query.setReferenceClass(domainClass);
        query.setCall(aCall);
        return executeQuery(query);
    
public java.lang.ObjectreadObject(java.lang.Class domainClass, oracle.toplink.essentials.expressions.Expression expression)
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

        ReadObjectQuery query = new ReadObjectQuery();
        query.setReferenceClass(domainClass);
        query.setSelectionCriteria(expression);
        return executeQuery(query);
    
public java.lang.ObjectreadObject(java.lang.Object object)
PUBLIC: Use the example object to consruct 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.

        ReadObjectQuery query = new ReadObjectQuery();
        query.setSelectionObject(object);
        return executeQuery(query);
    
public java.lang.ObjectrefreshAndLockObject(java.lang.Object object)
PUBLIC: Refresh the attributes of the object and of all of its private parts from the database. The object will be pessimisticly locked on the database for the duration of the transaction. If the object is already locked this method will wait until the lock is released. A no wait option is available through setting the lock mode.

see
#refreshAndLockObject(Object, lockMode)

        ReadObjectQuery query = new ReadObjectQuery();
        query.setSelectionObject(object);
        query.refreshIdentityMapResult();
        query.cascadePrivateParts();
        query.setLockMode(ObjectBuildingQuery.LOCK);
        return executeQuery(query);
    
public java.lang.ObjectrefreshAndLockObject(java.lang.Object object, short lockMode)
PUBLIC: Refresh the attributes of the object and of all of its private parts from the database. The object will be pessimisticly locked on the database for the duration of the transaction.

Lock Modes: ObjectBuildingQuery.NO_LOCK, LOCK, LOCK_NOWAIT

        ReadObjectQuery query = new ReadObjectQuery();
        query.setSelectionObject(object);
        query.refreshIdentityMapResult();
        query.cascadePrivateParts();
        query.setLockMode(lockMode);
        return executeQuery(query);
    
public java.lang.ObjectrefreshObject(java.lang.Object object)
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 un commited changes to the object.

        return refreshAndLockObject(object, ObjectBuildingQuery.NO_LOCK);
    
public voidrelease()
PUBLIC: Release the session. This does nothing by default, but allows for other sessions such as the ClientSession to do something.

    
public voidreleaseUnitOfWork(oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl unitOfWork)
INTERNAL: Release the unit of work, if lazy release the connection.

        // Nothing is required by default, allow subclasses to do cleanup.
        setNumberOfActiveUnitsOfWork(getNumberOfActiveUnitsOfWork() - 1);
    
public voidremoveProperty(java.lang.String property)
PUBLIC: Remove the user defined property.

        getProperties().remove(property);
    
public voidremoveQuery(java.lang.String queryName)
PUBLIC: Remove all queries with the given queryName regardless of the argument types.

see
#removeQuery(String, Vector)

        getQueries().remove(queryName);
    
public voidremoveQuery(java.lang.String queryName, java.util.Vector argumentTypes)
PUBLIC: Remove the specific query with the given queryName and argumentTypes.

        Vector queries = (Vector)getQueries().get(queryName);
        if (queries == null) {
            return;
        } else {
            DatabaseQuery query = null;
            for (Enumeration enumtr = queries.elements(); enumtr.hasMoreElements();) {
                query = (DatabaseQuery)enumtr.nextElement();
                if (Helper.areTypesAssignable(argumentTypes, query.getArgumentTypes())) {
                    break;
                }
            }
            if (query != null) {
                queries.remove(query);
            }
        }
    
protected booleanrollbackExternalTransaction()
PROTECTED: Attempts to rollback the running internally started external transaction. Returns true only in one case - extenal transaction has been internally rolled back during this method call: wasJTSTransactionInternallyStarted()==true in the beginning of this method and wasJTSTransactionInternallyStarted()==false in the end of this method.

        boolean externalTransactionHasRolledBack = false;
        if (hasExternalTransactionController() && wasJTSTransactionInternallyStarted()) {
            try {
                getExternalTransactionController().rollbackTransaction(this);
            } catch (RuntimeException exception) {
                handleException(exception);
            }
            if (!wasJTSTransactionInternallyStarted()) {
                externalTransactionHasRolledBack = true;
                log(SessionLog.FINER, SessionLog.TRANSACTION, "external_transaction_has_rolled_back_internally");
            }
        }
        return externalTransactionHasRolledBack;
    
public voidrollbackTransaction()
PUBLIC: Rollback the active database transaction. This allows a group of database modification to be commited or rolledback as a unit. All writes/deletes will be sent to the database be will not be visible to other users until commit. Although databases do not allow nested transaction, TopLink supports nesting through only committing to the database on the outer commit.

exception
DatabaseException if the database connection is lost or the rollback fails.
exception
ConcurrencyException if this session is not within a transaction.

        // Ensure release of mutex and call subclass specific release.
        try {
            if (!getTransactionMutex().isNested()) {
                getEventManager().preRollbackTransaction();
                basicRollbackTransaction();
                getEventManager().postRollbackTransaction();
            }
        } finally {
            getTransactionMutex().release();

            // If there is no db transaction in progress
            // if there is an active external transaction 
            // which was started internally - it should be rolled back internally, too.
            if (!isInTransaction()) {
                rollbackExternalTransaction();
            }
        }
    
public voidsetAccessor(oracle.toplink.essentials.internal.databaseaccess.Accessor accessor)
INTERNAL: Set the accessor.

        this.accessor = accessor;
    
public voidsetBroker(oracle.toplink.essentials.internal.sessions.AbstractSession broker)
INTERNAL: Allow the session to be used from a session broker.

        this.broker = broker;
    
public voidsetCommitManager(oracle.toplink.essentials.internal.sessions.CommitManager commitManager)
INTERNAL: The commit manager is used to resolve referncial integrity on commits of multiple objects.

        this.commitManager = commitManager;
    
public voidsetDatasourceLogin(oracle.toplink.essentials.sessions.Login login)
PUBLIC: Set the login.

        getProject().setDatasourceLogin(login);
    
public voidsetEventManager(oracle.toplink.essentials.sessions.SessionEventManager eventManager)
INTERNAL: Set the event manager. The event manager can be used to register for various session events.

        if (eventManager != null) {
            this.eventManager = eventManager;
        } else {
            this.eventManager = new SessionEventManager();
        }
        this.eventManager.setSession(this);
    
public voidsetExceptionHandler(oracle.toplink.essentials.exceptions.ExceptionHandler exceptionHandler)
PUBLIC: Set the exceptionHandler. Exception handler can catch errors that occur on queries or during database access.

        this.exceptionHandler = exceptionHandler;
    
public voidsetExternalTransactionController(oracle.toplink.essentials.sessions.ExternalTransactionController externalTransactionController)
Used for JTS integration internally by ServerPlatform.

        this.externalTransactionController = externalTransactionController;
        if (externalTransactionController == null) {
            return;
        }
        externalTransactionController.setSession(this);
    
public voidsetIntegrityChecker(oracle.toplink.essentials.exceptions.IntegrityChecker integrityChecker)
PUBLIC: set the integrityChecker. IntegrityChecker holds all the Descriptor Exceptions.

        this.integrityChecker = integrityChecker;
    
public voidsetIsInProfile(boolean inProfile)
PUBLIC: Allow for user deactive a profiler

        this.isInProfile = inProfile;
    
public voidsetLog(java.io.Writer log)
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.

see
#setSessionLog(SessionLog)

        getSessionLog().setWriter(log);
    
public voidsetLogLevel(int level)
PUBLIC:

Set the log level

param
level the new log level

        getSessionLog().setLevel(level);
    
public voidsetLogin(oracle.toplink.essentials.sessions.DatabaseLogin login)
PUBLIC: Set the login.

        setDatasourceLogin(login);
    
public voidsetLogin(oracle.toplink.essentials.sessions.Login login)
PUBLIC: Set the login.

        setDatasourceLogin(login);
    
public voidsetName(java.lang.String name)
PUBLIC: Set the name of the session. This is used with the session broker.

        this.name = name;
    
protected voidsetNumberOfActiveUnitsOfWork(int numberOfActiveUnitsOfWork)

        this.numberOfActiveUnitsOfWork = numberOfActiveUnitsOfWork;
    
public voidsetProfiler(oracle.toplink.essentials.sessions.SessionProfiler profiler)
PUBLIC: Set the profiler for the session. This allows for performance operations to be profiled.

        this.profiler = profiler;
        if (profiler != null) {
            profiler.setSession(this);
            setIsInProfile(getProfiler().getProfileWeight() != SessionProfiler.NONE);
            // Clear cached flag that bybasses the profiler check.
            getIdentityMapAccessorInstance().getIdentityMapManager().clearCacheAccessPreCheck();
        } else {
            setIsInProfile(false);
        }
    
public voidsetProject(oracle.toplink.essentials.sessions.Project project)
INTERNAL: Set the project, the project holds configuartion information including the descriptors.

        this.project = project;
    
public voidsetProperties(java.util.Hashtable properties)
INTERNAL: Set the user defined properties.

        this.properties = properties;
    
public voidsetProperty(java.lang.String propertyName, java.lang.Object propertyValue)
PUBLIC: Allow for user defined properties.

        getProperties().put(propertyName, propertyValue);
    
protected voidsetQueries(java.util.Hashtable queries)

        this.queries = queries;
    
public voidsetSessionLog(oracle.toplink.essentials.logging.SessionLog sessionLog)
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, log level can not be OFF. Also set a backpointer to this session in SessionLog. To avoid a sessionLog being shared by more than one session, it needs to be cloned.

see
#logMessage(String)

        this.sessionLog = (SessionLog)((AbstractSessionLog)sessionLog).clone();
        if (this.sessionLog != null) {
            this.sessionLog.setSession(this);
        }
    
protected voidsetTransactionMutex(oracle.toplink.essentials.internal.helper.ConcurrencyManager transactionMutex)

        this.transactionMutex = transactionMutex;
    
public voidsetWasJTSTransactionInternallyStarted(boolean wasJTSTransactionInternallyStarted)
INTERNAL: Return if a JTS transaction was started by the session. The session will start a JTS transaction if a unit of work or transaction is begun without a JTS transaction present.

        this.wasJTSTransactionInternallyStarted = wasJTSTransactionInternallyStarted;
    
public voidsevere(java.lang.String message, java.lang.String category)
PUBLIC:

This method is called when a severe level message needs to be logged. The message will be translated

param
message the message key

        log(SessionLog.SEVERE, category, message);
    
public booleanshouldLog(int Level, java.lang.String category)
PUBLIC:

Check if a message of the given level would actually be logged.

return
true if the given message level will be logged

param
level the log request level
param
category the string representation of a TopLink category

        return getSessionLog().shouldLog(Level, category);
    
public booleanshouldLogMessages()
PUBLIC: Return if logging is enabled (false if log level is OFF)

        if (getLogLevel(null) == SessionLog.OFF) {
            return false;
        } else {
            return true;
        }
    
public voidstartOperationProfile(java.lang.String operationName)
INTERNAL: Start the operation timing.

        if (isInProfile()) {
            getProfiler().startOperationProfile(operationName);
        }
    
public java.lang.StringtoString()
Print the connection status with the session.

        StringWriter writer = new StringWriter();
        writer.write(getSessionTypeString() + "(" + Helper.cr() + "\t" + getAccessor() + Helper.cr() + "\t" + getDatasourcePlatform() + ")");
        return writer.toString();
    
public java.lang.ObjectunwrapObject(java.lang.Object proxy)
INTERNAL: Unwrap the object if required. This is used for the wrapper policy support and EJB.

        return getDescriptor(proxy).getObjectBuilder().unwrapObject(proxy, this);
    
public java.lang.ObjectupdateObject(java.lang.Object domainObject)
PUBLIC: Update the object and all of its privately owned parts in the database. Update should only be used if the application knows that the object is new, otherwise writeObject should be used. The update operation can be customized through using an update query.

exception
DatabaseException if an error occurs on the database, these include constraint violations, security violations and general database erros.
exception
OptimisticLockException if the object's descriptor is using optimistic locking and the object has been updated or deleted by another user since it was last read.
see
UpdateObjectQuery
see
#writeObject(Object)

        UpdateObjectQuery query = new UpdateObjectQuery();
        query.setObject(domainObject);
        return executeQuery(query);
    
public voidupdateProfile(java.lang.String operationName, java.lang.Object value)
INTERNAL: Updates the value of SessionProfiler state

        if (isInProfile()) {
            getProfiler().update(operationName, value);
        }
    
public voidvalidateQuery(oracle.toplink.essentials.queryframework.DatabaseQuery query)
INTERNAL: This method will be used to update the query with any settings required For this session. It can also be used to validate execution.

        // a no-op for this class
    
public booleanverifyDelete(java.lang.Object domainObject)
TESTING: This is used by testing code to ensure that a deletion was successful.

        ObjectBuilder builder = getDescriptor(domainObject).getObjectBuilder();
        Object implementation = builder.unwrapObject(domainObject, this);

        return builder.verifyDelete(implementation, this);
    
public voidwarning(java.lang.String message, java.lang.String category)
PUBLIC:

This method is called when a warning level message needs to be logged. The message will be translated

param
message the message key

        log(SessionLog.WARNING, category, message);
    
public booleanwasJTSTransactionInternallyStarted()
INTERNAL: Return if a JTS transaction was started by the session. The session will start a JTS transaction if a unit of work or transaction is begun without a JTS transaction present.

        return wasJTSTransactionInternallyStarted;
    
public java.lang.ObjectwrapObject(java.lang.Object implementation)
INTERNAL: Wrap the object if required. This is used for the wrapper policy support and EJB.

        return getDescriptor(implementation).getObjectBuilder().wrapObject(implementation, this);
    
protected voidwriteAllObjects(oracle.toplink.essentials.internal.helper.IdentityHashtable domainObjects)
INTERNAL: Write all of the objects and all of their privately owned parts in the database. The allows for a group of new objects to be commited as a unit. The objects will be commited through a single transactions and any foreign keys/circular references between the objects will be resolved.

        getCommitManager().commitAllObjects(domainObjects);
    
protected voidwriteAllObjectsWithChangeSet(oracle.toplink.essentials.internal.sessions.UnitOfWorkChangeSet uowChangeSet)
INTERNAL: Write all of the objects and all of their privately owned parts in the database. The allows for a group of new objects to be commited as a unit. The objects will be commited through a single transactions and any foreign keys/circular references between the objects will be resolved.

        getCommitManager().commitAllObjectsWithChangeSet(uowChangeSet);
    
public java.lang.ObjectwriteObject(java.lang.Object domainObject)
PUBLIC: Write the object and all of its privately owned parts in the database. Write will determine if an insert or an update should be done, it may go to the database to determine this (by default will check the identity map). The write operation can be customized through using an write query.

exception
DatabaseException if an error occurs on the database, these include constraint violations, security violations and general database erros.
exception
OptimisticLockException if the object's descriptor is using optimistic locking and the object has been updated or deleted by another user since it was last read.
see
WriteObjectQuery
see
#insertObject(Object)
see
#updateObject(Object)

        WriteObjectQuery query = new WriteObjectQuery();
        query.setObject(domainObject);
        return executeQuery(query);
    
public voidwritesCompleted()
INTERNAL: This method notifies the accessor that a particular sets of writes has completed. This notification can be used for such thing as flushing the batch mechanism

        getAccessor().writesCompleted(this);