Package org.eclipse.persistence.sessions
Class DatasourceLogin
- java.lang.Object
-
- org.eclipse.persistence.sessions.DatasourceLogin
-
- All Implemented Interfaces:
java.io.Serializable
,java.lang.Cloneable
,CoreLogin<org.eclipse.persistence.internal.databaseaccess.Platform>
,Login
- Direct Known Subclasses:
DatabaseLogin
,EISLogin
,XMLLogin
public abstract class DatasourceLogin extends java.lang.Object implements Login, java.io.Serializable, java.lang.Cloneable
Purpose: Hold the configuration information necessary to connect to a datasource.
Description: This is an abstract class that defines the common datasource independent connection configuration. It is extended to support specific datasources such as JDBC, JCA, XML, etc.
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description protected int
cacheTransactionIsolation
By default concurrency is optimized and the cache is not locked during reads or writes, This allows for concurrent reading and writing and should never cause any problems.static int
CONCURRENT_READ_WRITE
Reads and unit of work merges can occur concurrently.protected Connector
connector
Provide a little flexibility for connecting to a databaseprotected org.eclipse.persistence.internal.databaseaccess.Platform
platform
Implementation of platform-specific behaviors.protected java.util.Properties
properties
Connection properties (e.g. user, password, and driver-specific settings)static int
SYNCHRONIZED_READ_ON_WRITE
Reads and unit of work merges will be serialized.static int
SYNCHRONIZED_WRITE
Reads can occur concurrently but unit of work merges will be serialized.static int
SYNCRONIZED_OBJECT_LEVEL_READ_WRITE
Writes to the cache (merge, object build/refresh will be synchronized as will cache access (cloning) based on when access is required.static int
SYNCRONIZED_OBJECT_LEVEL_READ_WRITE_DATABASE
Writes to the cache (merge, object build/refresh will be synchronized as will cache access (cloning) based on database transaction.protected boolean
usesExternalConnectionPooling
True if we use an external connection pool such as WebLogic's JTS driverprotected boolean
usesExternalTransactionController
True if we should use some external transaction service such as JTS.static java.lang.String
versionString
-
Constructor Summary
Constructors Constructor Description DatasourceLogin()
PUBLIC: Create a new login.DatasourceLogin(org.eclipse.persistence.internal.databaseaccess.Platform databasePlatform)
ADVANCED: Create a new login for the given platform.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addSequence(Sequence sequence)
Add sequence corresponding to the name Don't use if the session is connected.DatasourceLogin
clone()
INTERNAL: Clone the login.java.lang.Object
connectToDatasource(org.eclipse.persistence.internal.databaseaccess.Accessor accessor, Session session)
INTERNAL: Connect to the datasource, and return the driver level connection object.void
dontUseExternalConnectionPooling()
PUBLIC: Do not use external connection pooling.void
dontUseExternalTransactionController()
PUBLIC: Let EclipseLink control transactions instead of some external transaction service such as JTS.int
getCacheTransactionIsolation()
ADVANCED: By default concurrency is optimized and the cache is not locked more than required during reads or writes, This allows for virtual concurrent reading and writing and should never cause any problems.Connector
getConnector()
ADVANCED: Return the connector that will instantiate the connection.org.eclipse.persistence.internal.databaseaccess.Platform
getDatasourcePlatform()
PUBLIC: Return the datasource platform specific information.Sequence
getDefaultSequence()
Get default sequenceSequence
getDefaultSequenceToWrite()
INTERNAL: Used only for writing the login into XML or Java.java.lang.String
getPassword()
Return the password.DatabasePlatform
getPlatform()
INTERNAL: Return the database platform specific information.java.lang.String
getPlatformClassName()
INTERNAL: Return the name of the database platform class.java.util.Properties
getProperties()
INTERNAL: The properties are additional, driver-specific, connection information to be passed to the driver.java.lang.Object
getProperty(java.lang.String name)
PUBLIC: The properties are additional, driver-specific, connection information to be passed to the driver.protected org.eclipse.persistence.internal.security.SecurableObjectHolder
getSecurableObjectHolder()
INTERNAL: Return the encryption securable holder.Sequence
getSequence(java.lang.String seqName)
Get sequence corresponding to the namejava.util.Map
getSequences()
Returns a map of sequence names to Sequences (may be null).java.util.Map
getSequencesToWrite()
INTERNAL: Used only for writing the login into XML or Java.java.lang.String
getTableQualifier()
PUBLIC: Return the qualifier for the all of the tables referenced by EclipseLink.java.lang.String
getUserName()
PUBLIC: The user name is the database login name.static java.lang.String
getVersion()
PUBLIC: Return the EclipseLink version.boolean
isConnectionHealthValidatedOnError()
PUBLIC: This value defaults to false when not on a DatabaseLogin as the functionality has not been implemented for other datasource type.void
removeAllSequences()
Remove all sequences but the default one.void
removeProperty(java.lang.String propertyName)
PUBLIC: Some drivers don't like the "user" and "password" properties.Sequence
removeSequence(java.lang.String seqName)
Remove sequence corresponding to name.void
setCacheTransactionIsolation(int cacheTransactionIsolation)
ADVANCED: By default concurrency is optimized and the cache is not locked more than required during reads or writes, This allows for virtual concurrent reading and writing and should never cause any problems.void
setConnector(Connector connector)
PUBLIC: Set the connector that will instantiate the connection.void
setDatasourcePlatform(org.eclipse.persistence.internal.databaseaccess.Platform platform)
PUBLIC: Set the database platform specific information.void
setDefaultNullValue(java.lang.Class type, java.lang.Object value)
PUBLIC: The default value to substitute for database NULLs can be configured on a per-class basis.void
setDefaultSequence(Sequence sequence)
Set default sequencevoid
setEncryptedPassword(java.lang.String password)
Set the encrypted password.void
setEncryptionClassName(java.lang.String encryptionClassName)
Sets the encryption class namevoid
setPassword(java.lang.String password)
Set the password.void
setPlatform(org.eclipse.persistence.internal.databaseaccess.Platform platform)
INTERNAL: Set the database platform specific information.void
setPlatformClassName(java.lang.String platformClassName)
INTERNAL: Set the name of the Platform to be used.void
setPlatformClassName(java.lang.String platformClassName, java.lang.ClassLoader loader)
INTERNAL: Set the name of the Platform to be created using the passed in class loader.void
setProperties(java.util.Properties properties)
PUBLIC: The properties are additional, driver-specific, connection information to be passed to the JDBC driver.void
setProperty(java.lang.String propertyName, java.lang.Object propertyValue)
PUBLIC: Some JDBC drivers require additional, driver-specific, properties.void
setSequences(java.util.Map sequences)
INTERNAL: Used only for reading the login from XML.void
setTableQualifier(java.lang.String qualifier)
PUBLIC: Set the default qualifier for all tables.void
setTimestampQuery(ValueReadQuery timestampQuery)
PUBLIC: Override the default query for returning a timestamp from the server.void
setUserName(java.lang.String name)
PUBLIC: The user name is the database login name.void
setUsesExternalConnectionPooling(boolean usesExternalConnectionPooling)
PUBLIC: Return whether EclipseLink uses some external connection pooling service such as a JDBC 2.0 driver.void
setUsesExternalTransactionController(boolean usesExternalTransactionController)
PUBLIC: Return whether EclipseLink uses some external transaction service such as JTS.boolean
shouldAllowConcurrentReadWrite()
INTERNAL: Used for cache isolation.boolean
shouldSynchronizedReadOnWrite()
INTERNAL: Used for cache isolation.boolean
shouldSynchronizeObjectLevelReadWrite()
INTERNAL: Used for Cache Isolation.boolean
shouldSynchronizeObjectLevelReadWriteDatabase()
INTERNAL: Used for Cache Isolation.boolean
shouldSynchronizeWrites()
INTERNAL: Used for Cache Isolation.boolean
shouldUseExternalConnectionPooling()
PUBLIC: Return whether EclipseLink uses some external connection pooling (e.g.boolean
shouldUseExternalTransactionController()
PUBLIC: Return whether EclipseLink uses some external transaction service such as JTS.java.lang.String
toString()
PUBLIC: Print all of the connection information.void
useExternalConnectionPooling()
PUBLIC: Use external connection pooling.void
useExternalTransactionController()
PUBLIC: Use an external transaction controller such as a JTS servicevoid
usePlatform(org.eclipse.persistence.internal.databaseaccess.Platform platform)
ADVANCED: Set the database platform to be custom platform.-
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.eclipse.persistence.sessions.Login
buildAccessor
-
-
-
-
Field Detail
-
versionString
public static java.lang.String versionString
-
properties
protected java.util.Properties properties
Connection properties (e.g. user, password, and driver-specific settings)
-
platform
protected org.eclipse.persistence.internal.databaseaccess.Platform platform
Implementation of platform-specific behaviors.
-
connector
protected Connector connector
Provide a little flexibility for connecting to a database
-
usesExternalConnectionPooling
protected boolean usesExternalConnectionPooling
True if we use an external connection pool such as WebLogic's JTS driver
-
usesExternalTransactionController
protected boolean usesExternalTransactionController
True if we should use some external transaction service such as JTS.
-
cacheTransactionIsolation
protected int cacheTransactionIsolation
By default concurrency is optimized and the cache is not locked during reads or writes, This allows for concurrent reading and writing and should never cause any problems. If the application uses no form of locking the last unit of work to merge changes will win, with no locking it is possible only under this scenario for two unit of works to merge changes different than the database although highly unlikely and if occurred is the entire purpose of locking. This property allows for the isolation level of changes to the cache to be configured for sever situation and it is not suggest that this be changed.
-
CONCURRENT_READ_WRITE
public static final int CONCURRENT_READ_WRITE
Reads and unit of work merges can occur concurrently.- See Also:
- Constant Field Values
-
SYNCHRONIZED_WRITE
public static final int SYNCHRONIZED_WRITE
Reads can occur concurrently but unit of work merges will be serialized.- See Also:
- Constant Field Values
-
SYNCHRONIZED_READ_ON_WRITE
public static final int SYNCHRONIZED_READ_ON_WRITE
Reads and unit of work merges will be serialized.- See Also:
- Constant Field Values
-
SYNCRONIZED_OBJECT_LEVEL_READ_WRITE
public static final int SYNCRONIZED_OBJECT_LEVEL_READ_WRITE
Writes to the cache (merge, object build/refresh will be synchronized as will cache access (cloning) based on when access is required.- See Also:
- Constant Field Values
-
SYNCRONIZED_OBJECT_LEVEL_READ_WRITE_DATABASE
public static final int SYNCRONIZED_OBJECT_LEVEL_READ_WRITE_DATABASE
Writes to the cache (merge, object build/refresh will be synchronized as will cache access (cloning) based on database transaction.- See Also:
- Constant Field Values
-
-
Method Detail
-
getSecurableObjectHolder
protected org.eclipse.persistence.internal.security.SecurableObjectHolder getSecurableObjectHolder()
INTERNAL: Return the encryption securable holder. Lazy initialize to handle serialization.
-
clone
public DatasourceLogin clone()
INTERNAL: Clone the login. This also clones the platform as it is internal to the login.
-
connectToDatasource
public java.lang.Object connectToDatasource(org.eclipse.persistence.internal.databaseaccess.Accessor accessor, Session session) throws DatabaseException
INTERNAL: Connect to the datasource, and return the driver level connection object.- Specified by:
connectToDatasource
in interfaceLogin
- Throws:
DatabaseException
-
getCacheTransactionIsolation
public int getCacheTransactionIsolation()
ADVANCED: By default concurrency is optimized and the cache is not locked more than required during reads or writes, This allows for virtual concurrent reading and writing and should never cause any problems. If the application uses no form of locking the last unit of work to merge changes will win, with no locking it is possible only under this scenario for two unit of works to merge changes different than the database although highly unlikely and if occurred is the entire purpose of locking and locking is the suggested solution if this is a problem. This property allows for the isolation level of changes to the cache to be configured for sever situations and it is not suggest that this be changed.Setting are:
- ConcurrentReadWrite - default
- SynchronizedWrite - only allow a single writer (i.e. unit of work merge) to the cache at once
- SynchronizedReadOnWrite - do not allow reading or other unit of work merge while a unit of work is in merge
-
getConnector
public Connector getConnector()
ADVANCED: Return the connector that will instantiate the connection.
-
getPlatform
public DatabasePlatform getPlatform()
INTERNAL: Return the database platform specific information. This allows EclipseLink to configure certain advanced features for the database desired. NOTE: this must only be used for relational specific usage and will not work for non-relational datasources.- Specified by:
getPlatform
in interfaceLogin
-
getDatasourcePlatform
public org.eclipse.persistence.internal.databaseaccess.Platform getDatasourcePlatform()
PUBLIC: Return the datasource platform specific information. This allows EclipseLink to configure certain advanced features for the datasource desired.- Specified by:
getDatasourcePlatform
in interfaceCoreLogin<org.eclipse.persistence.internal.databaseaccess.Platform>
- Specified by:
getDatasourcePlatform
in interfaceLogin
-
getProperties
public java.util.Properties getProperties()
INTERNAL: The properties are additional, driver-specific, connection information to be passed to the driver.NOTE: Do not set the password directly by getting the properties and setting the "password" property directly. Use the method DatabaseLogin.setPassword(String).
-
getProperty
public java.lang.Object getProperty(java.lang.String name)
PUBLIC: The properties are additional, driver-specific, connection information to be passed to the driver.NOTE: Do not set the password directly by getting the properties and setting the "password" property directly. Use the method DatabaseLogin.setPassword(String).
- Specified by:
getProperty
in interfaceLogin
-
getTableQualifier
public java.lang.String getTableQualifier()
PUBLIC: Return the qualifier for the all of the tables referenced by EclipseLink. This can be the creator of the table or database name the table exists on. This is required by some databases such as Oracle and DB2. This should only be used if all of the tables have the same qualifier. It can also be set on each descriptor when the table name is specified.- Specified by:
getTableQualifier
in interfaceLogin
-
getUserName
public java.lang.String getUserName()
PUBLIC: The user name is the database login name. Some databases do not require a user name or the user is obtained from the OS, in this case the user name not be specified.- Specified by:
getUserName
in interfaceLogin
-
isConnectionHealthValidatedOnError
public boolean isConnectionHealthValidatedOnError()
PUBLIC: This value defaults to false when not on a DatabaseLogin as the functionality has not been implemented for other datasource type. On an SQL Exception EclipseLink will ping the database to determine if the connection used can continue to be used for queries. This should have no impact on applications unless the user is using pessimistic locking queries with 'no wait' or are using a query timeout feature. If that is the case and the application is experiencing a performance impact from the health check then this feature can be turned off. Turning this feature off will prevent EclipseLink from being able to retry queries in the case of database failure.- Specified by:
isConnectionHealthValidatedOnError
in interfaceLogin
-
getVersion
public static java.lang.String getVersion()
PUBLIC: Return the EclipseLink version.- Returns:
- version of EclipseLink
-
removeProperty
public void removeProperty(java.lang.String propertyName)
PUBLIC: Some drivers don't like the "user" and "password" properties. They can be removed with this method, or by using setUserName(null) / setPassword(null)
-
setCacheTransactionIsolation
public void setCacheTransactionIsolation(int cacheTransactionIsolation)
ADVANCED: By default concurrency is optimized and the cache is not locked more than required during reads or writes, This allows for virtual concurrent reading and writing and should never cause any problems. If the application uses no form of locking the last unit of work to merge changes will win, with no locking it is possible only under this scenario for two unit of works to merge changes different than the database although highly unlikely and if occurred is the entire purpose of locking and locking is the suggested solution if this is a problem. This property allows for the isolation level of changes to the cache to be configured for sever situations and it is not suggest that this be changed.Setting are:
- ConcurrentReadWrite - default
- SynchronizedWrite - only allow a single writer (i.e. unit of work merge) to the cache at once
- SynchronizedReadOnWrite - do not allow reading or other unit of work merge while a unit of work is in merge
-
setConnector
public void setConnector(Connector connector)
PUBLIC: Set the connector that will instantiate the connection. As an example, to use a JNDI-suppliedDataSource
, use code something like the following:
where thesession.getLogin().setConnector(new JNDIConnector(context, dataSourceName));
session.login();context
is an instance of ajavax.naming.Context
and thedataSourceName
refers to the name of theDataSource
within the context.
-
setDefaultNullValue
public void setDefaultNullValue(java.lang.Class type, java.lang.Object value)
PUBLIC: The default value to substitute for database NULLs can be configured on a per-class basis. Example: login.setDefaultNullValue(long.class, Long.valueOf(0))
-
setPassword
public void setPassword(java.lang.String password)
Set the password.- Specified by:
setPassword
in interfaceLogin
-
getPassword
public java.lang.String getPassword()
Return the password. It will be encrypted.- Specified by:
getPassword
in interfaceLogin
-
setEncryptedPassword
public void setEncryptedPassword(java.lang.String password)
Set the encrypted password.
-
setEncryptionClassName
public void setEncryptionClassName(java.lang.String encryptionClassName)
Sets the encryption class name
-
setPlatform
public void setPlatform(org.eclipse.persistence.internal.databaseaccess.Platform platform)
INTERNAL: Set the database platform specific information. This allows EclipseLink to configure certain advanced features for the database desired.- Specified by:
setPlatform
in interfaceLogin
-
setDatasourcePlatform
public void setDatasourcePlatform(org.eclipse.persistence.internal.databaseaccess.Platform platform)
PUBLIC: Set the database platform specific information. This allows EclipseLink to configure certain advanced features for the database desired.- Specified by:
setDatasourcePlatform
in interfaceLogin
-
getPlatformClassName
public java.lang.String getPlatformClassName()
INTERNAL: Return the name of the database platform class.
-
setPlatformClassName
public void setPlatformClassName(java.lang.String platformClassName) throws ValidationException
INTERNAL: Set the name of the Platform to be used. Creates a new instance of the specified Class.- Throws:
ValidationException
-
setPlatformClassName
public void setPlatformClassName(java.lang.String platformClassName, java.lang.ClassLoader loader) throws ValidationException
INTERNAL: Set the name of the Platform to be created using the passed in class loader. If no class loader is passed in, of if an exception is thrown, call the setPlatformClassName method with no classloader.- Throws:
ValidationException
- See Also:
setPlatformClassName(String platformClassName)
-
usePlatform
public void usePlatform(org.eclipse.persistence.internal.databaseaccess.Platform platform)
ADVANCED: Set the database platform to be custom platform.
-
setProperties
public void setProperties(java.util.Properties properties)
PUBLIC: The properties are additional, driver-specific, connection information to be passed to the JDBC driver.- Specified by:
setProperties
in interfaceLogin
-
setProperty
public void setProperty(java.lang.String propertyName, java.lang.Object propertyValue)
PUBLIC: Some JDBC drivers require additional, driver-specific, properties. Add the specified property to those to be passed to the JDBC driver.- Specified by:
setProperty
in interfaceLogin
-
setTableQualifier
public void setTableQualifier(java.lang.String qualifier)
PUBLIC: Set the default qualifier for all tables. This can be the creator of the table or database name the table exists on. This is required by some databases such as Oracle and DB2.
-
setTimestampQuery
public void setTimestampQuery(ValueReadQuery timestampQuery)
PUBLIC: Override the default query for returning a timestamp from the server.
-
setUserName
public void setUserName(java.lang.String name)
PUBLIC: The user name is the database login name. Some databases do not require a user name or the user is obtained from the OS, in this case this should not be specified.- Specified by:
setUserName
in interfaceLogin
-
setUsesExternalConnectionPooling
public void setUsesExternalConnectionPooling(boolean usesExternalConnectionPooling)
PUBLIC: Return whether EclipseLink uses some external connection pooling service such as a JDBC 2.0 driver.
-
setUsesExternalTransactionController
public void setUsesExternalTransactionController(boolean usesExternalTransactionController)
PUBLIC: Return whether EclipseLink uses some external transaction service such as JTS.
-
dontUseExternalConnectionPooling
public void dontUseExternalConnectionPooling()
PUBLIC: Do not use external connection pooling. This is appropriate if using regular EclipseLink connection pooling and regular JDBC drivers.- See Also:
useExternalConnectionPooling()
-
dontUseExternalTransactionController
public void dontUseExternalTransactionController()
PUBLIC: Let EclipseLink control transactions instead of some external transaction service such as JTS.- See Also:
useExternalTransactionController()
-
shouldAllowConcurrentReadWrite
public boolean shouldAllowConcurrentReadWrite()
INTERNAL: Used for cache isolation.- Specified by:
shouldAllowConcurrentReadWrite
in interfaceLogin
-
shouldSynchronizedReadOnWrite
public boolean shouldSynchronizedReadOnWrite()
INTERNAL: Used for cache isolation.- Specified by:
shouldSynchronizedReadOnWrite
in interfaceLogin
-
shouldSynchronizeWrites
public boolean shouldSynchronizeWrites()
INTERNAL: Used for Cache Isolation. Causes EclipseLink to lock at the class level on cache updates.- Specified by:
shouldSynchronizeWrites
in interfaceLogin
-
shouldSynchronizeObjectLevelReadWrite
public boolean shouldSynchronizeObjectLevelReadWrite()
INTERNAL: Used for Cache Isolation. Causes EclipseLink to lock at the object level on cache updates and cache access.- Specified by:
shouldSynchronizeObjectLevelReadWrite
in interfaceLogin
-
shouldSynchronizeObjectLevelReadWriteDatabase
public boolean shouldSynchronizeObjectLevelReadWriteDatabase()
INTERNAL: Used for Cache Isolation. Causes EclipseLink to lock at the object level on cache updates and cache access, based on database transaction.- Specified by:
shouldSynchronizeObjectLevelReadWriteDatabase
in interfaceLogin
-
shouldUseExternalConnectionPooling
public boolean shouldUseExternalConnectionPooling()
PUBLIC: Return whether EclipseLink uses some external connection pooling (e.g. WebLogic's JTS driver).- Specified by:
shouldUseExternalConnectionPooling
in interfaceLogin
- See Also:
useExternalConnectionPooling()
,dontUseExternalConnectionPooling()
-
shouldUseExternalTransactionController
public boolean shouldUseExternalTransactionController()
PUBLIC: Return whether EclipseLink uses some external transaction service such as JTS.- Specified by:
shouldUseExternalTransactionController
in interfaceLogin
- See Also:
useExternalTransactionController()
,dontUseExternalTransactionController()
-
useExternalConnectionPooling
public void useExternalConnectionPooling()
PUBLIC: Use external connection pooling.
-
useExternalTransactionController
public void useExternalTransactionController()
PUBLIC: Use an external transaction controller such as a JTS service
-
toString
public java.lang.String toString()
PUBLIC: Print all of the connection information.- Overrides:
toString
in classjava.lang.Object
-
getDefaultSequence
public Sequence getDefaultSequence()
Get default sequence
-
setDefaultSequence
public void setDefaultSequence(Sequence sequence)
Set default sequence
-
addSequence
public void addSequence(Sequence sequence)
Add sequence corresponding to the name Don't use if the session is connected.
-
getSequence
public Sequence getSequence(java.lang.String seqName)
Get sequence corresponding to the name
-
getSequences
public java.util.Map getSequences()
Returns a map of sequence names to Sequences (may be null).
-
removeSequence
public Sequence removeSequence(java.lang.String seqName)
Remove sequence corresponding to name. Doesn't remove default sequence. Don't use if the session is connected.
-
removeAllSequences
public void removeAllSequences()
Remove all sequences but the default one.
-
getDefaultSequenceToWrite
public Sequence getDefaultSequenceToWrite()
INTERNAL: Used only for writing the login into XML or Java.
-
getSequencesToWrite
public java.util.Map getSequencesToWrite()
INTERNAL: Used only for writing the login into XML or Java.
-
setSequences
public void setSequences(java.util.Map sequences)
INTERNAL: Used only for reading the login from XML.
-
-