blob: 39abcf005d71fb6fe6cec9b100071f06f15d16fc [file] [log] [blame]
/*
* Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Oracle - initial API and implementation from Oracle TopLink
// @author mobrien
// @since EclipseLink 1.0 enh# 235168
package org.eclipse.persistence.services.mbean;
import java.util.List;
import java.util.Vector;
import org.eclipse.persistence.services.ClassSummaryDetailBase;
/**
* <p>
* <b>Purpose</b>: Provide a dynamic interface into the EclipseLink Session.
* <p>
* <b>Description</b>: This class is meant to provide an interface for gaining access to configuration
* of the EclipseLink Session during runtime. It provides the basis for a JMX MBean
*
*/
public interface MBeanRuntimeServicesMBean {
/**
* This method is used to determine if messages should be logged by the session
*/
boolean getShouldLogMessages();
/**
* This method is used to turn on Performance Profiling
*/
void setShouldProfilePerformance(boolean shouldProfile);
/**
* This method will return if profiling is turned on or not
*/
boolean getShouldProfilePerformance();
/**
* This method is used to turn on Profile logging when using the Performance Profiler
*/
void setShouldLogPerformanceProfiler(boolean shouldLogPerformanceProfiler);
/**
* This method is used to determine if we should be logging when using the Performance Profiler
*/
boolean getShouldLogPerformanceProfiler();
/**
* Method used to set if statements should be cached. Please note that Statements can not be cached when
* using an external connection pool
*/
void setShouldCacheAllStatements(boolean shouldCacheAllStatements);
/**
* Returns if statements should be cached or not
*/
boolean getShouldCacheAllStatements();
/**
* Used to set the statement cache size. This is only valid if using cached Statements
*/
void setStatementCacheSize(int size);
/**
* Returns the statement cache size. Only valid if statements are being cached
*/
int getStatementCacheSize();
/**
* This method provides access for setting the sequence pre-allocation size
*/
void setSequencePreallocationSize(int size);
/**
* Method returns the value of the Sequence Preallocation size
*/
int getSequencePreallocationSize();
/**
* This method allows the client to set the pool size for a particular pool, based on the pool name
*/
void updatePoolSize(String poolName, int maxSize, int minSize);
/**
* This method will return the available Connection pools within this Server Session
*/
List getAvailableConnectionPools();
/**
* This method will retrieve the size of a particular connection pool
*/
List getSizeForPool(String poolName);
/**
* This method provides client with access to add a new connection pool to a TopLink
* ServerSession. This method throws classNotFound Exception if any of the class names are misspelled.
*/
void addNewConnectionPool(String poolName, int maxSize, int minSize, String platform, String driverClassName, String url, String userName, String password) throws ClassNotFoundException;
/**
* This method is used to reset connections from the session to the database. Please
* Note that this will not work with a SessionBroker at this time
*/
void resetAllConnections();
/**
* This method is used to return those Class Names that have identity Maps in the Session.
* Please note that SubClasses and aggregates will be missing from this list as they do not have
* separate identity maps.
*/
List getClassesInSession();
/**
* This method will return a collection of the objects in the Identity Map.
* There is no particular order to these objects.
*/
List getObjectsInIdentityMap(String className) throws ClassNotFoundException;
/**
* This method is used to return the number of objects in a particular Identity Map
* @param className the fully qualified name of the class to get number of instances of.
* @exception ClassNotFoundException if thrown then the IdentityMap for that class name could not be found
*/
Integer getNumberOfObjectsInIdentityMap(String className) throws ClassNotFoundException;
/**
* This method will return a collection of the objects in the Identity Map.
* There is no particular order to these objects. These objects are returned as a Map
* which is how they are stored on the cache. This method replaces getObjectsInIdentityMapSubCache(String className)
* which returned a List.
*
*/
List getObjectsInIdentityMapSubCacheAsMap(String className) throws ClassNotFoundException;
/**
* This method is used to return the number of objects in a particular Identity Map's
* subcache. Only works for those identity Maps with a sub cache (IE Hard Cache Weak Identity Map)
* If ClassNotFoundException is thrown then the IdenityMap for that class name could not be found
*/
Integer getNumberOfObjectsInIdentityMapSubCache(String className) throws ClassNotFoundException;
/**
* Return the DMS sensor weight
*/
int getProfileWeight();
/**
* Set the DMS sensor weight
*/
void setProfileWeight(int size);
/**
* Answer the EclipseLink log level at deployment time. This is read-only.
*/
String getDeployedEclipseLinkLogLevel();
/**
* Answer the EclipseLink log level that is changeable.
* This does not affect the log level in the project (i.e. The next
* time the application is deployed, changes are forgotten)
*/
String getCurrentEclipseLinkLogLevel();
/**
* Set the EclipseLink log level to be used at runtime.
*
* This does not affect the log level in the project (i.e. The next
* time the application is deployed, changes are forgotten)
*
* @param newLevel new log level
*/
void setCurrentEclipseLinkLogLevel(String newLevel);
/**
* Answer the name of the EclipseLink session this MBean represents.
*/
String getSessionName();
/**
* Return whether this session is an EclipseLink JPA session.
* The absence of this function or a value of false will signify that the session
* belongs to a provider other than EclipseLink.
*/
boolean isJPASession();
// 316513: refactored up as generic from WebLogic
/**
* Answer the type of the EclipseLink session this MBean represents.
* Types include: "ServerSession", "DatabaseSession", "SessionBroker"
*/
String getSessionType();
/**
* Provide an instance of 2 Dimensional Array simulating tabular format information about all
* classes in the session whose class names match the provided filter.
*
* The 2 Dimensional array contains each item with values being row object array. Each row object array
* represents EclipseLink class details info with respect to below attributes:
* ["Class Name", "Parent Class Name", "Cache Type", "Configured Size", "Current Size"]
*
*/
Object[][] getClassSummaryDetailsUsingFilter(String filter);
/**
* Provide an instance of 2 Dimensional Array simulating tabular format information about all
* classes in the session.
*
* The 2 Dimensional array contains each item with values being row object array. Each row object array
* represents EclipseLink class details info with respect to below attributes:
* ["Class Name", "Parent Class Name", "Cache Type", "Configured Size", "Current Size"]
*
*/
Object[][] getClassSummaryDetails();
/**
* Provide a list of instance of ClassSummaryDetail containing information about the
* classes in the session whose class names match the provided filter.
*
* ClassSummaryDetail is a model specific class that can be used internally by the Portable JMX Framework to
* convert class attribute to JMX required open type, it has:-
* 1. model specific type that needs to be converted : ["Class Name", "Parent Class Name", "Cache Type", "Configured Size", "Current Size"]
* 2. convert methods.
*
* @param filter A comma separated list of strings to match against.
* @return A ArrayList of instance of ClassSummaryDetail containing class information for the class names that match the filter.
*/
List <ClassSummaryDetailBase> getClassSummaryDetailsUsingFilterArray(String filter);
/**
* Provide a list of instance of ClassSummaryDetail containing information about all
* classes in the session.
*
* ClassSummaryDetail is a model specific class that can be used internally by the Portable JMX Framework to
* convert class attribute to JMX required open type, it has:-
* 1. model specific type that needs to be converted : ["Class Name", "Parent Class Name", "Cache Type", "Configured Size", "Current Size"]
* 2. convert methods.
*
* @return A ArrayList of instance of ClassSummaryDetail containing class information for the class names that match the filter.
*/
List <ClassSummaryDetailBase> getClassSummaryDetailsArray();
/**
* INTERNAL:
* This method traverses the EclipseLink descriptors and returns a Vector of the descriptor's
* reference class names that match the provided filter. The filter is a comma separated
* list of strings to match against.
*
* @param filter A comma separated list of strings to match against.
* @return A Vector of class names that match the filter.
*/
Vector getMappedClassNamesUsingFilter(String filter);
/**
* getModuleName(): Answer the name of the context-root of the application that this session is associated with.
* Answer "unknown" if there is no module name available.
* Default behavior is to return "unknown" - we override this behavior here for WebLogic.
*/
String getModuleName();
/**
* getApplicationName(): Answer the name of the module (EAR name) that this session is associated with.
* Answer "unknown" if there is no application name available.
* Default behavior is to return "unknown" - we override this behavior here for WebLogic.
*/
String getApplicationName();
/**
* This method is used to get the type of profiling.
* Possible values are: "EclipseLink" or "None".
*/
String getProfilingType();
/**
* This method is used to select the type of profiling.
* Valid values are: "EclipseLink" or "None". These values are not case sensitive.
* null is considered to be "None".
*/
void setProfilingType(String profileType);
/**
* This method is used to turn on EclipseLink Performance Profiling
*/
void setUseEclipseLinkProfiling();
/**
* This method answers true if EclipseLink Performance Profiling is on.
*/
Boolean getUsesEclipseLinkProfiling();
/**
* This method is used to turn off all Performance Profiling, DMS or EclipseLink.
*/
void setUseNoProfiling();
/**
* Return the size of strings after which will be bound into the statement
* If we are not using a DatabaseLogin, or we're not using string binding,
* answer 0 (zero).
*/
Integer getStringBindingSize();
/**
* This method will return a long indicating the exact time in Milliseconds that the
* session connected to the database.
*/
Long getTimeConnectionEstablished();
/**
* This method will return if batchWriting is in use or not.
*/
Boolean getUsesJDBCBatchWriting();
/**
* Shows if Byte Array Binding is turned on or not
*/
Boolean getUsesByteArrayBinding();
/**
* Shows if native SQL is being used
*/
Boolean getUsesNativeSQL();
/**
* This method indicates if streams are being used for binding
*/
Boolean getUsesStreamsForBinding();
/**
* This method indicates if Strings are being bound
*/
Boolean getUsesStringBinding();
/**
* Used to clear the statement cache. Only valid if statements are being cached
*/
void clearStatementCache();
/**
* This method will print the available Connection pools to the SessionLog.
*/
void printAvailableConnectionPools();
/**
* This method will retrieve the max size of a particular connection pool
* @param poolName the name of the pool to get the max size for
* @return Integer for the max size of the pool. Return -1 if pool doesn't exist.
*/
Integer getMaxSizeForPool(String poolName);
/**
* This method will retrieve the min size of a particular connection pool
* @param poolName the name of the pool to get the min size for
* @return Integer for the min size of the pool. Return -1 if pool doesn't exist.
*/
Integer getMinSizeForPool(String poolName);
/**
* This method is used to output those Class Names that have identity Maps in the Session.
* Please note that SubClasses and aggregates will be missing form this list as they do not have
* separate identity maps.
*/
void printClassesInSession();
/**
* This method will log the objects in the Identity Map.
* There is no particular order to these objects.
* @param className the fully qualified classname identifying the identity map
* @exception ClassNotFoundException if thrown then the IdentityMap for that class name could not be found
*/
void printObjectsInIdentityMap(String className) throws ClassNotFoundException;
/**
* This method will log the types of Identity Maps in the session.
*/
void printAllIdentityMapTypes();
/**
* This method will log all objects in all Identity Maps in the session.
*/
void printObjectsInIdentityMaps();
/**
* This method will SUM and return the number of objects in all Identity Maps in the session.
*/
Integer getNumberOfObjectsInAllIdentityMaps();
/**
* This method will answer the number of persistent classes contained in the session.
* This does not include aggregates.
*/
Integer getNumberOfPersistentClasses();
/**
* This method will log the instance level locks in all Identity Maps in the session.
*/
void printIdentityMapLocks();
/**
* This method will log the instance level locks in the Identity Map for the given class in the session.
*/
void printIdentityMapLocks(String registeredClassName);
/**
* This method assumes EclipseLink Profiling (as opposed to Java profiling).
* This will log at the INFO level a summary of all elements in the profile.
*/
void printProfileSummary();
/**
* This method assumes EclipseLink Profiling (as opposed to Java profiling).
* This will log at the INFO level a summary of all elements in the profile, categorized
* by Class.
*/
void printProfileSummaryByClass();
/**
* This method assumes EclipseLink Profiling (as opposed to Java profiling).
* This will log at the INFO level a summary of all elements in the profile, categorized
* by Query.
*/
void printProfileSummaryByQuery();
/**
* Return the log type, either "EclipseLink", "Java" or the simple name of the logging class used.
* @return the log type
*/
String getLogType();
/**
* Return the database platform used by the DatabaseSession.
* @return String databasePlatform
*/
String getDatabasePlatform();
/**
* Return JDBCConnection detail information. This includes URL and datasource information.
*/
String getJdbcConnectionDetails();
/**
* Return connection pool type. Values include: "Internal", "External" and "N/A".
*/
String getConnectionPoolType();
/**
* Return db driver class name. This only applies to DefaultConnector. Return "N/A" otherwise.
*/
String getDriver();
/**
* Return the log filename. This returns the fully qualified path of the log file when
* EclipseLink logging is enabled. Null is returned otherwise.
*
* @return String logFilename
*/
String getLogFilename();
/**
* This method is used to initialize the identity maps specified by the Vector of classNames.
*
* @param classNames String[] of fully qualified classnames identifying the identity maps to initialize
*/
void initializeIdentityMaps(String[] classNames) throws ClassNotFoundException;
/**
* This method is used to invalidate the identity maps in the session.
*/
void invalidateAllIdentityMaps();
/**
* This method is used to invalidate the identity maps specified by the String[] of classNames.
* @param classNamesParam String[] of fully qualified classnames identifying the identity maps to invalidate
* @param recurse Boolean indicating if we want to invalidate the children identity maps too
*/
void invalidateIdentityMaps(String[] classNamesParam, Boolean recurse) throws ClassNotFoundException;
/**
* This method is used to invalidate the identity maps specified by className. This does not
* invalidate the children identity maps
* @param className the fully qualified classname identifying the identity map to invalidate
*/
void invalidateIdentityMap(String className) throws ClassNotFoundException;
/**
* This method is used to invalidate the identity maps specified by className.
* @param className the fully qualified classname identifying the identity map to invalidate
* @param recurse Boolean indicating if we want to invalidate the children identity maps too
*/
void invalidateIdentityMap(String className, Boolean recurse) throws ClassNotFoundException;
}