Skip to main content

Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "EclipseLink/DesignDocs/248748"

m (Design / Functionality)
m (Design Specification: WebLogic 10.3 JMX MBean Support)
Line 16: Line 16:
 
| Michael O
 
| Michael O
 
| 0.1 Starting Draft for WebLogic 10.3 version of [http://bugs.eclipse.org/248748 ER 248748]
 
| 0.1 Starting Draft for WebLogic 10.3 version of [http://bugs.eclipse.org/248748 ER 248748]
 +
|-
 +
| 2008-09-23
 +
| Michael O
 +
| 0.2 Phase 1 ready for review - ClassSummaryDetailsArray functional [http://bugs.eclipse.org/248748 ER 248748]
 
|}
 
|}
  
Line 32: Line 36:
  
 
===Interface Addition Candidates===
 
===Interface Addition Candidates===
*    public String getsessionName() {
+
*    public String getSessionName()
  
*    public String getsessionType() {
+
*    public String getSessionType()
  
*    public Object[][] getClassSummaryDetailsUsingFilter(String filter){
+
*    public ArrayList <ClassSummaryDetail> getClassSummaryDetailsArray()
  
*    public Object[][] getClassSummaryDetails() {
+
*    public Object[][] getClassSummaryDetails()
  
*    public Vector getMappedClassNamesUsingFilter(String filter) {
+
*    public String getModuleName()
  
*    public String getmoduleName() {
+
*    public String getDeployedEclipseLinkLogLevel()
  
*    public String getdeployedEclipseLinkLogLevel() {
+
*    public String getDeployedEclipseLogLevel(String category)
  
*    public String getDeployedEclipseLogLevel(String category) {
+
*    public String getCurrentEclipseLogLevel()
  
*    public String getcurrentEclipseLogLevel() {
+
*    public String getCurrentEclipseLogLevel(String category)
  
*    public String getcurrentEclipseLogLevel(String category) {
+
*    public synchronized void setCurrentEclipseLogLevel(String newLevel)
  
*    public synchronized void setcurrentEclipseLogLevel(String newLevel) {
+
*    public synchronized String getProfilingType()
  
*    public synchronized String getprofilingType() {
+
*    public synchronized void setProfilingType(String profileType)
  
*    public synchronized void setprofilingType(String profileType) {
+
*    public void setUsesEclipseProfiling()
  
*    public void setuseEclipseProfiling() {
+
*''<font color="red">   public void setUsesDMSProfiling() - removed </font>''
  
*    public void setuseDMSProfiling() {
+
*''<font color="red">   public Boolean getusesEclipseProfiling() </font>'' - are we still removing this - it currently exists?
  
*''<font color="red">    public Boolean getusesEclipseProfiling() {</font>'' - do not implement
+
*''<font color="red">    public Boolean getUsesDMSProfiling() - removed</font>''
  
*    public Boolean getusesDMSProfiling() {
+
*    public void setUseNoProfiling()
  
*    public void setuseNoProfiling() {
+
*''<font color="red">   public synchronized void setshouldLogPerformanceProfiler(Boolean shouldLogPerformanceProfiler) - removed</font>''
  
*    public synchronized void setshouldLogPerformanceProfiler(Boolean  
+
*''<font color="red">   public Boolean getshouldLogPerformanceProfiler() - removed</font>''
shouldLogPerformanceProfiler) {
+
  
*    public Boolean getshouldLogPerformanceProfiler() {
+
*    public Boolean getShouldBindAllParameters()
  
*    public Boolean getshouldBindAllParameters() {
+
*    public Integer getStringBindingSize()
  
*    public Integer getstringBindingSize() {
+
*    public Long getTimeConnectionEstablished()
  
*    public Long gettimeConnectionEstablished() {
+
*    public Boolean getUsesJDBCBatchWriting()
  
*    public Boolean getusesJDBCBatchWriting() {
+
*    public Boolean getUsesByteArrayBinding()
  
*    public Boolean getusesByteArrayBinding() {
+
*    public Boolean getUsesNativeSQL()
  
*    public Boolean getusesNativeSQL() {
+
*    public Boolean getUsesStreamsForBinding()
  
*    public Boolean getusesStreamsForBinding() {
+
*    public Boolean getShouldCacheAllStatements()
  
*    public Boolean getshouldCacheAllStatements() {
+
*    public Integer getStatementCacheSize()
  
*    public Integer getstatementCacheSize() {
+
*    public synchronized void clearStatementCache()
  
*    public synchronized void clearStatementCache() {
+
*    public Integer getSequencePreallocationSize()
  
*    public Integer getsequencePreallocationSize() {
+
*    public void printAvailableConnectionPools()
  
*    public void printAvailableConnectionPools() {
+
*    public Integer getMaxSizeForPool(String poolName)
  
*    public Integer getMaxSizeForPool(String poolName) {
+
*    public Integer getMinSizeForPool(String poolName)
  
*    public Integer getMinSizeForPool(String poolName) {
+
*    public void printClassesInSession()
  
*    public void printClassesInSession() {
+
*    public void printObjectsInIdentityMap(String className) throws ClassNotFoundException
  
*    public void printObjectsInIdentityMap(String className) throws ClassNotFoundException {
+
*    public void printAllIdentityMapTypes()
  
*    public void printAllIdentityMapTypes() {
+
*    public void printObjectsInIdentityMaps()
  
*    public void printObjectsInIdentityMaps() {
+
*    public Integer getNumberOfObjectsInAllIdentityMaps()
  
*    public Integer getnumberOfObjectsInAllIdentityMaps() {
+
*    public Integer getNumberOfPersistentClasses()
  
*    public Integer getnumberOfPersistentClasses() {
+
*    public void printIdentityMapLocks()
  
*    public void printIdentityMapLocks() {
+
*    public void printIdentityMapLocks(String registeredClassName)
  
*    public void printIdentityMapLocks(String registeredClassName) {
+
*    public void printProfileSummary()
  
*    public void printProfileSummary() {
+
*    public void printProfileSummaryByClass()
  
*    public void printProfileSummaryByClass() {
+
*    public void printProfileSummaryByQuery()
  
*    public void printProfileSummaryByQuery() {
+
*    public String getLogType()
  
*    public String getlogType() {
+
*    public String getDatabasePlatform()
  
*    public String getdatabasePlatform() {
+
*    public synchronized String getConnectionPoolType()
  
*    public synchronized String getconnectionPoolType() {
+
*    public synchronized String getDriver()
  
*    public synchronized String getdriver() {
+
*    public String getLogFilename()
  
*    public String getlogFilename() {
+
*''<font color="blue">   public synchronized String getdeployedProfileWeight() - removed - superclassed by getProfileWeight()</font>''
  
*    public synchronized String getdeployedProfileWeight() {
+
*''<font color="blue">   public synchronized String getcurrentProfileWeight() - removed - superclassed by getProfileWeight()</font>''
  
*    public synchronized String getcurrentProfileWeight() {
+
*''<font color="blue">   public synchronized void setcurrentProfileWeight(String weight)  - removed - superclassed by getProfileWeight()</font>''
  
*    public synchronized void setcurrentProfileWeight(String weight) {
+
*    public synchronized void initializeAllIdentityMaps()
 
+
*    public synchronized void initializeAllIdentityMaps() {
+
  
 
*    public synchronized void initializeIdentityMaps(String[] classNames) throws  
 
*    public synchronized void initializeIdentityMaps(String[] classNames) throws  
ClassNotFoundException {
+
ClassNotFoundException
  
 
*    public synchronized void initializeIdentityMap(String className) throws  
 
*    public synchronized void initializeIdentityMap(String className) throws  
ClassNotFoundException {
+
ClassNotFoundException
  
 
*    public synchronized void invalidateAllIdentityMaps() {
 
*    public synchronized void invalidateAllIdentityMaps() {
Line 153: Line 154:
  
 
*    public synchronized void invalidateIdentityMap(String className) throws  
 
*    public synchronized void invalidateIdentityMap(String className) throws  
ClassNotFoundException {
+
ClassNotFoundException
  
*    public synchronized void invalidateIdentityMap(String className, Boolean recurse) throws  
+
*    public synchronized void invalidateIdentityMap(String className, Boolean recurse) throws ClassNotFoundException
ClassNotFoundException {
+
  
*    public Boolean getcacheSynchEnabled() {
+
*''<font color="red">   public Boolean getcacheSynchEnabled() - removed</font>''
  
*    public Boolean getcacheSynchAsynchronous() {
+
*''<font color="red">   public Boolean getcacheSynchAsynchronous() - removed</font>''
  
 
</pre>
 
</pre>

Revision as of 12:24, 23 October 2008

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