Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

EclipseLink/DesignDocs/248748

Design Specification: WebLogic 10.3 JMX MBean Support

Bug# 235168 - Generic JMX MBeans for WebLogic - complete

Bug# 248748 - WebLogic extensions to generic JMX MBeans - in progress here

JMX MBean Tutorial for Oracle WebLogic Server


JPA EAR, EJB, WAR and SE (DDL Generation) WebLogic 10.3 J2EE application Eclipse projects in SVN - use to perform JMX MBean registration

Document History

Date Author Version Description & Notes
2008-09-26 Michael O 0.1 Starting Draft for WebLogic 10.3 version of ER 248748
2008-10-23 Michael O 0.2 Phase 1 ready for review - ClassSummaryDetailsArray functional ER 248748
2008-10-31 Michael O 0.3 Phase 1 reviewed - ER 248748 checked into rev# 2700

Project overview

We require specific attributes available outside of the generic MBeans in ER 235168. This enhancement request has 3 phases - we are working on phase 1 and 2 at this time below.

  • 1) Add functions originally available on the OC4J server platform that do not require WebLogic API
  • 2) Add functions previously available on OC4J that required reflective or API calls
  • 3) Add functions new to WebLogic 10/10.3 - future

Enhancement Requests

Requirements

  • Add the following functions to a WebLogic version of our RuntimeServices Mbean - to be reviewed.
    • We want to cross-reference this new list with the exclusion list in the 1.0 implementation.
    • Some of the attributes prefixed with print have generic analogs using get already.
    • Some of the attributes contain an internal current keyword that is removed.
    • Some of these public functions may not make it to the public interface

Interface Addition Candidates

  • public String getSessionName()
  • public String getSessionType()
  • public ArrayList <ClassSummaryDetail> getClassSummaryDetailsArray()
  • public Object[][] getClassSummaryDetails()
  • public String getModuleName()
  • public String getDeployedEclipseLinkLogLevel()
  • public String getDeployedEclipseLogLevel(String category)
  • public String getCurrentEclipseLogLevel()
  • public String getCurrentEclipseLogLevel(String category)
  • public synchronized void setCurrentEclipseLogLevel(String newLevel)
  • public synchronized String getProfilingType()
  • public synchronized void setProfilingType(String profileType)
  • public void setUsesEclipseProfiling()
  • public void setUsesDMSProfiling() - removed
  • public Boolean getusesEclipseProfiling() - are we still removing this - it currently exists?
  • public Boolean getUsesDMSProfiling() - removed
  • public void setUseNoProfiling()
  • public synchronized void setshouldLogPerformanceProfiler(Boolean shouldLogPerformanceProfiler) - removed
  • public Boolean getshouldLogPerformanceProfiler() - removed
  • public Boolean getShouldBindAllParameters()
  • public Integer getStringBindingSize()
  • public Long getTimeConnectionEstablished()
  • public Boolean getUsesJDBCBatchWriting()
  • public Boolean getUsesByteArrayBinding()
  • public Boolean getUsesNativeSQL()
  • public Boolean getUsesStreamsForBinding()
  • public Boolean getShouldCacheAllStatements()
  • public Integer getStatementCacheSize()
  • public synchronized void clearStatementCache()
  • public Integer getSequencePreallocationSize()
  • public void printAvailableConnectionPools()
  • public Integer getMaxSizeForPool(String poolName)
  • public Integer getMinSizeForPool(String poolName)
  • public void printClassesInSession()
  • public void printObjectsInIdentityMap(String className) throws ClassNotFoundException
  • public void printAllIdentityMapTypes()
  • public void printObjectsInIdentityMaps()
  • public Integer getNumberOfObjectsInAllIdentityMaps()
  • public Integer getNumberOfPersistentClasses()
  • public void printIdentityMapLocks()
  • public void printIdentityMapLocks(String registeredClassName)
  • public void printProfileSummary()
  • public void printProfileSummaryByClass()
  • public void printProfileSummaryByQuery()
  • public String getLogType()
  • public String getDatabasePlatform()
  • public synchronized String getConnectionPoolType()
  • public synchronized String getDriver()
  • public String getLogFilename()
  • public synchronized String getdeployedProfileWeight() - removed - superclassed by getProfileWeight()
  • public synchronized String getcurrentProfileWeight() - removed - superclassed by getProfileWeight()
  • public synchronized void setcurrentProfileWeight(String weight) - removed - superclassed by getProfileWeight()
  • public synchronized void initializeAllIdentityMaps()
  • public synchronized void initializeIdentityMaps(String[] classNames) throws

ClassNotFoundException

  • public synchronized void initializeIdentityMap(String className) throws

ClassNotFoundException

  • public synchronized void invalidateAllIdentityMaps() {
  • public synchronized void invalidateIdentityMaps(String[] classNamesParam, Boolean

recurse) throws ClassNotFoundException {

  • public synchronized void invalidateIdentityMap(String className) throws

ClassNotFoundException

  • public synchronized void invalidateIdentityMap(String className, Boolean recurse) throws ClassNotFoundException
  • public Boolean getcacheSynchEnabled() - removed
  • public Boolean getcacheSynchAsynchronous() - removed

Design / Functionality

Design Constraints

C1: MBeans are not available until the first login of a server application (lazy-loaded)

Design Issue 1: getModuleName() Application Name from WebLogic

The getModuleName() function is required to return the application name of the owner of the current session. This function name will be determined from either the EJB, War or MDB application. There are currently 3 methods we can use to determine this function name.

Alternative 1: Pass module name via weblogic.moduleName property

Pros

  • No introduction of a weblogic.jar dependency in EclipseLink

Cons

  • Each application must supply the moduleName in persistence.xml or sessions.xml

Alternative 2: Pass module name via WebLogic specific container context API

Pros

Cons

  • Introduction of a dependency on weblogic.jar from EclipseLink

Alternative 3: Pass module name via Reflective call to the WebLogic context

Pros

  • No introduction of a weblogic.jar dependency in EclipseLink

Cons

Decision

Alternative 1 is acceptable for now until a full enhancement for 248746 is entered as alternative 3.

- in progress

Design Issue 2: rename all fuctions in standard MBean format get/setUpperCase()

All functions must be in the format get/setUppercase() not get/setlowerCase() - some of the functions ported from OC4J are not in the correct format, therefore the interface and implementation will be modified to standard MBean naming format.

- complete

Design Issue 3: Rename MBean in standard org.eclipse.persistence format

  • Entered: 20081031 (code review)
  • Instead of using the existing "EclipseLink_Domain" format, we should move to the a standard . naming format of org.eclipse.persistence.
  • "Runtime_<session name>" changed to "Runtime-<session name>"
  • This will affect how consumers search for the mbean.

Design Issue 4: DMS functionality in WebLogic

There is a requirement to port DMS profiling functionality to the EclipseLink WebLogic platform. We will need to add this functionality without introducing dependencies on WebLogic specific API.

This will be accomplished by using generic interface functions where possible or reflective calls to WebLogic. Any requirements to add functionality to the WebLogic server itself will be scoped here. We will require an implementation of tools.DMSPerformanceProfiler that implements the existing SessionProfiler.

API

No new jar dependencies - use reflective calls where server API is required.

The JMX API is included in J2SE 1.5 (new to J2SE 1.5 from J2EE 1.4) - the interfaces from this JMX API are used even though the implementation uses weblogic specific weblogic.management API during runtime.

There is a JMX server now in the 1.5 SE JRE

J2SE 1.5 JMX

JMX used to be in J2EE 1.4

J2EE 1.4 JMX

Disabling EclipseLink Managed Lazy Registration

By default MBean registration is disabled for WebLogic. This registration would occur as a post step during the first login to the session when it is enabled.

Application Managed Lazy Registration

Disabling MBean Registration

If MBean registration is not required, or the application will be handling registration then you may disable automatic registration at the first login by setting up the following.

  • System properties

MBean registration is enabled by adding one or both of the two mbean system properties If [eclipselink.register.dev.mbean] or [eclipselink.register.run.mbean] properties are missing then MBean registration will not proceed for that bean.

rem set JAVA_OPTIONS=%JAVA_OPTIONS% -Declipselink.register.dev.mbean=true
rem set JAVA_OPTIONS=%JAVA_OPTIONS% -Declipselink.register.run.mbean=true
  • sessions.xml property

WebLogic ApplicationLifecycleListener Example

Here the application can manage registration/deregistration of the MBeans by using a SessionCustomizer in conjunction with a listener on either a servlet or session bean within the JEE application.

  • SessionCustomizer
  • Listener

You must configure the EclipseLink Mbeans in the EAR/meta-inf via a weblogic-application.xml descriptor entry.

<!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN"  "http://java.sun.com/dtd/application_1_3.dtd">
<weblogic-application xmlns="http://www.bea.com/ns/weblogic/10">
    <listener>
       <listener-class>org.eclipse.persistence.example.unified.integration.ApplicationLifecycleListenerImpl</listener-class>
    </listener>
</weblogic-application>

UML Class Diagram

In the following UML static class diagram we are introducing the blue artifacts that subclass off the existing generic JMX MBean implementation in EclipseLink.

Eclipselink uml design jmx.jpg

GUI

<JAVA_HOME>/bin/JConsole client

You should see the following single EclipseLink MBean off the root of the JNDI tree. In this example there is one EAR deployed to WebLogic - with its own set of MBeans based on the login session.

Runtime weblogic specific mbean screen cap.JPG

Runtime weblogic specific mbean screen cap 2b inherited.JPG

Code Reviews

20081031

  • Modifications:

http://fisheye2.atlassian.com/changelog/eclipselink/?cs=2700

  • - use standard MBean registration format "org.eclipse.persistence" instead of existing "EclipseLink_Domain"
  • - "Runtime_<session name>" changed to "Runtime-<session name>"
  • - 2 duplicated functions in sub-interface MBeanWebLogicRuntimeMBean that are already in MBeanRuntimeServicesMBean
    • public Integer getNumberOfObjectsInIdentityMap(String className) throws ClassNotFoundException;
    • public void resetAllConnections();
  • - Modify null session name error message
    • { "session_key_for_mbean_name_is_null", "Session name used for the MBean registration cannot be null." },
  • Four refactoring requests were entered

Open Issues

Issue # Owner Description / Notes
I1 mobrien open: 248746 Add WebLogic specific getModuleName() Function
I2 mobrien open: 252786 Add DMS functionality

References

ELUG Documentation JMX MBeans in WebLogic 10

Back to the top