If the user wants a different external transaction controller class or
to provide some different behavior than the provided ServerPlatform(s), we recommend
subclassing org.eclipse.persistence.platform.server.ServerPlatformBase (or a subclass),
and overriding:

disableJTA()
INTERNAL: disableJTA(): Configure the receiver such that my external transaction controller class will
be ignored, and will NOT be used to populate DatabaseSession's external transaction controller class
at runtime.

void

disableRuntimeServices()
INTERNAL: disableRuntimeServices(): Configure the receiver such that no JMX/MBean will be registered
to provide runtime services for my DatabaseSession at runtime.

protected void

ensureNotLoggedIn()
INTERNAL: Make sure that the DatabaseSession has not logged in yet.

protected void

externalTransactionControllerNotNullWarning()
INTERNAL: externalTransactionControllerNotNullWarning():
When the external transaction controller is being initialized, we warn the developer
if they have already defined the external transaction controller in some way other
than subclassing ServerPlatformBase.

serverSpecificRegisterMBean()
INTERNAL: serverSpecificRegisterMBean(): Server specific implementation of the
creation and deployment of the JMX MBean to provide runtime services for my
databaseSession.

void

serverSpecificUnregisterMBean()
INTERNAL: serverSpecificUnregisterMBean(): Server specific implementation of the
unregistration of the JMX MBean from its server.

void

setExternalTransactionControllerClass(java.lang.Class newClass)
INTERNAL: setExternalTransactionControllerClass(Class newClass): Set the class of external
transaction controller to use in the DatabaseSession.

void

setIsCMP(boolean isThisCMP)
INTERNAL: setIsCMP(boolean): Define whether or not we're in the context of CMP (i.e. the container created me)

boolean

shouldUseDriverManager()
INTERNAL: shouldUseDriverManager(): Indicates whether DriverManager should be used while connecting DefaultConnector.

unwrapConnection(java.sql.Connection connection)
INTERNAL: This method is used to unwrap the connection wrapped by
the application server.

boolean

wasFailureCommunicationBased(java.sql.SQLException exception,
org.eclipse.persistence.internal.databaseaccess.Accessor connection,
org.eclipse.persistence.internal.sessions.AbstractSession sessionForProfile)
INTERNAL:
A call to this method will perform a platform based check on the connection and exception
error code to determine if the connection is still valid or if a communication error has occurred.

getExternalTransactionControllerClass

INTERNAL: getExternalTransactionControllerClass(): Answer the class of external transaction controller to use
For this server platform. This is read-only.
If the user wants a different external transaction controller class than the provided ServerPlatform(s),
we recommend subclassing org.eclipse.persistence.platform.server.ServerPlatformBase (or a subclass),
and overriding:
ServerPlatformBase.getExternalTransactionControllerClass()
for the desired behavior.

externalTransactionControllerNotNullWarning

protected void externalTransactionControllerNotNullWarning()

INTERNAL: externalTransactionControllerNotNullWarning():
When the external transaction controller is being initialized, we warn the developer
if they have already defined the external transaction controller in some way other
than subclassing ServerPlatformBase.

isJTAEnabled

public boolean isJTAEnabled()

INTERNAL: isJTAEnabled(): Answer true if the DatabaseSession's external transaction controller class will
be populated with my transaction controller class at runtime. If the transaction controller class is
overridden in the DatabaseSession, my transaction controller class will be ignored.
Answer true if TopLink will be configured to register for callbacks for beforeCompletion and afterCompletion.

disableJTA

public void disableJTA()

INTERNAL: disableJTA(): Configure the receiver such that my external transaction controller class will
be ignored, and will NOT be used to populate DatabaseSession's external transaction controller class
at runtime.
TopLink will NOT be configured to register for callbacks for beforeCompletion and afterCompletion.

serverSpecificRegisterMBean

public void serverSpecificRegisterMBean()

INTERNAL: serverSpecificRegisterMBean(): Server specific implementation of the
creation and deployment of the JMX MBean to provide runtime services for my
databaseSession.
Default is to do nothing. This should be subclassed if required.

unwrapConnection

INTERNAL: This method is used to unwrap the connection wrapped by
the application server. TopLink needs this unwrapped connection for certain
database vendor specific support. (i.e. TIMESTAMPTZ,NCHAR,XMLTYPE)
Be default we will use the connection's metadata to try to get the connection

INTERNAL:
A call to this method will perform a platform based check on the connection and exception
error code to determine if the connection is still valid or if a communication error has occurred.
If a communication error has occurred then the query may be retried.
If this platform is unable to determine if the error was communication based it will return
false forcing the error to be thrown to the user.

getNewTempClassLoader

INTERNAL:
JIRA EJBTHREE-572 requires that we use the real classLoader in place of the getNewTempClassLoader().
The override code should stay in place until the UCL3 loader does not throw a NPE on loadClass()