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

< EclipseLink‎ | DesignDocs
Revision as of 12:24, 23 October 2008 by Michael.obrien.oracle.com (Talk | contribs) (Design Specification: WebLogic 10.3 JMX MBean Support)

Design Specification: WebLogic 10.3 JMX MBean Support

Bug# 248748

JMX MBean Tutorial for WebLogic

JPA EAR WebLogic 10.3 J2EE application and J2SE table populator Eclipse project zip files

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-09-23 Michael O 0.2 Phase 1 ready for review - ClassSummaryDetailsArray functional ER 248748

Project overview

We require specific attributes available outside of the generic MBeans in http://bugs.eclipse.org/235168 ER 235168]. This enhancement request has 2 possible phases - we are only working on phase 1 at this time - port OC4J functions to WebLogic.

  • 1) Add functions originally only available on the OC4J server platform
  • 2) Add functions new to WebLogic 10

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

</pre>

Design / Functionality

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 2 is unacceptable for now.

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.

API

No new jar dependencies.

The JMX API is included in J2SE 1.5 (new to J2SE 1.5 from J2EE 1.4) - the interfaces from this JMX API is 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


UML Class Diagram

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


Open Issues

Issue # Owner Description / Notes
I1 mobrien open: 248748 Add WebLogic specific getModuleName() Function

Back to the top