All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.persistence.platform.server.ServerPlatform Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 1998, 2024 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0,
 * or the Eclipse Distribution License v. 1.0 which is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
 */

// Contributors:
//     Oracle - initial API and implementation from Oracle TopLink
//     06/30/2010-2.1.1 Michael O'Brien
//       - 316513: Enable JMX MBean functionality for JBoss, Glassfish and WebSphere in addition to WebLogic
//       Move JMX MBean generic registration code up from specific platforms
//       add new isRuntimeServicesEnabledDefault()
//       see http://wiki.eclipse.org/EclipseLink/DesignDocs/316513
//     12/18/2014-2.6 Rick Curtis
//       - 455690: Move JNDIConnector lookup type to ServerPlatform.
package org.eclipse.persistence.platform.server;

import jakarta.persistence.spi.PersistenceUnitInfo;
import org.eclipse.persistence.internal.databaseaccess.Accessor;
import org.eclipse.persistence.internal.helper.JPAClassLoaderHolder;
import org.eclipse.persistence.internal.sessions.AbstractSession;
import org.eclipse.persistence.sessions.DatabaseSession;
import org.eclipse.persistence.sessions.ExternalTransactionController;

import java.sql.SQLException;

/**
 * PUBLIC:
 * 

* This is the interface describing the behavior for ServerPlatformBase, and any other * class that wants to provide behavior for a server. *

* This interface provides the behavior for *

* - Which external transaction controller to use * - Whether or not to enable JTA (external transaction control) * - How to register/unregister for runtime services (JMX/MBean) * - Whether or not to enable runtime services * - How to launch container Threads *

* Any subclasses of ServerPlatformBase created by the user must implement this interface. *

* public API: *

* String getServerNameAndVersion() * * @see ServerPlatformBase */ public interface ServerPlatform { /** * INTERNAL: getDatabaseSession(): Answer the instance of DatabaseSession the receiver is helping. * * @return DatabaseSession */ DatabaseSession getDatabaseSession(); /** * PUBLIC: getServerNameAndVersion(): Talk to the relevant server class library, and get the server name * and version * * @return String serverNameAndVersion */ String getServerNameAndVersion(); /** * INTERNAL: getModuleName(): Answer the name of the module (jar name) that my session * is associated with. * Answer "unknown" if there is no module name available. * * @return String moduleName */ String getModuleName(); /** * INTERNAL: getExternalTransactionControllerClass(): Answer the class of external transaction controller to use * For this server platform. This is read-only. *

* If the subclasses of the ServerPlatformBase do not provide the Class desired, then * a new subclass should be created to return the desired class. * * @return Class externalTransactionControllerClass * * @see org.eclipse.persistence.transaction.JTATransactionController * @see #isJTAEnabled() * @see #disableJTA() * @see #initializeExternalTransactionController() */ Class getExternalTransactionControllerClass(); /** * INTERNAL: setExternalTransactionControllerClass(Class newClass): Set the class of external * transaction controller to use in the DatabaseSession. * This is defined by the user via the sessions.xml. * * @see org.eclipse.persistence.transaction.JTATransactionController * @see #isJTAEnabled() * @see #disableJTA() * @see #initializeExternalTransactionController() */ void setExternalTransactionControllerClass(Class newClass); /** * INTERNAL: initializeExternalTransactionController(): Populate the DatabaseSession's * external transaction controller with an instance of my transaction controller class. *

* To change the external transaction controller class, we recommend creating a subclass of * ServerPlatformBase, and overriding getExternalTransactionControllerClass() * * @see ServerPlatformBase */ void initializeExternalTransactionController(); /** * 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. * * @return boolean isJTAEnabled * @see #getExternalTransactionControllerClass() * @see #disableJTA() */ boolean isJTAEnabled(); /** * INTERNAL: * isRuntimeServicesEnabledDefault(): Answer true if the JMX/MBean providing runtime services for * the receiver's DatabaseSession will be deployed at runtime. * Provide the default value for {@link #isRuntimeServicesEnabled()} for a * ServerPlatform. By default this is false but some platforms * can choose to have MBeans deployed by default. */ boolean isRuntimeServicesEnabledDefault(); /** * 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. * * @see #getExternalTransactionControllerClass() * @see #isJTAEnabled() */ void disableJTA(); /** * INTERNAL: isRuntimeServicesEnabled(): Answer true if the JMX/MBean providing runtime services for * the receiver's DatabaseSession will be deployed at runtime. * * @return boolean isRuntimeServicesEnabled * @see #disableRuntimeServices() */ boolean isRuntimeServicesEnabled(); /** * INTERNAL: disableRuntimeServices(): Configure the receiver such that no JMX/MBean will be registered * to provide runtime services for my DatabaseSession at runtime. * * @see #isRuntimeServicesEnabled() */ void disableRuntimeServices(); /** * INTERNAL: registerMBean(): Create and deploy the JMX MBean to provide runtime services for my * databaseSession. * * @see #isRuntimeServicesEnabled() * @see #disableRuntimeServices() * @see #unregisterMBean() */ void registerMBean(); /** * INTERNAL: unregisterMBean(): Unregister the JMX MBean that was providing runtime services for my * databaseSession. * * @see #isRuntimeServicesEnabled() * @see #disableRuntimeServices() * @see #registerMBean() */ void unregisterMBean(); /** * INTERNAL: perform any require shutdown tasks. */ void shutdown(); /** * Return the thread pool size. */ int getThreadPoolSize(); /** * Set the thread pool size. */ void setThreadPoolSize(int threadPoolSize); /** * INTERNAL: This method is used to unwrap the oracle connection wrapped by * the application server. TopLink needs this unwrapped connection for certain * database vendor specific support. * This is added as a workaround for bug 4460996 */ java.sql.Connection unwrapConnection(java.sql.Connection connection); /** * INTERNAL: launchContainerRunnable(Runnable runnable): Use the container library to * start the provided Runnable. *

* Default behavior is to use Thread(runnable).start() * * @param runnable the instance of runnable to be "started" */ void launchContainerRunnable(Runnable runnable); /** * INTERNAL: getServerLog(): Return the ServerLog for this platform *

* Return the default ServerLog in the base * * @return org.eclipse.persistence.logging.SessionLog */ org.eclipse.persistence.logging.SessionLog getServerLog(); /** * INTERNAL: shouldUseDriverManager(): Indicates whether DriverManager should be used while connecting DefaultConnector. * * @return boolean */ boolean shouldUseDriverManager(); /** * 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. * In the case of the server platform the connection pool itself may be tested. * 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. */ boolean wasFailureCommunicationBased(SQLException exception, Accessor connection, AbstractSession sessionForProfile); /** * 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() * * @param puInfo - the persistence unit info * @return ClassLoaderHolder - a composite object containing the classLoader and the flag * that is true if the classLoader returned is temporary * * @see org.eclipse.persistence.internal.helper.JPAClassLoaderHolder */ JPAClassLoaderHolder getNewTempClassLoader(PersistenceUnitInfo puInfo); /** * INTERNAL: * Clears statement cache of the wrapper connection. * Required by Oracle proxy authentication: currently connection statement cache * becomes invalid on switching to/from proxy session. * This method is called by OracleJDBC_10_1_0_2ProxyConnectionCustomizer * before opening proxy session and before closing it. */ void clearStatementCache(java.sql.Connection connection); /** * INTERNAL: Get JNDIConnector lookupType value for this platform. */ int getJNDIConnectorLookupType(); /** * INTERNAL: Some servers may support partitioning * @return true if server supports partitions, false otherwise */ boolean usesPartitions(); /** * INTERNAL: Get Partition ID. * @return partition ID */ String getPartitionID(); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy