Skip to main content
Jump to: navigation, search

Difference between revisions of "EclipseLink/DesignDocs/235168"

m (GUI)
m (Design Specification: JMX MBean Support)
Line 35: Line 35:
 
== Design Constraints ==
 
== Design Constraints ==
 
* C1: MBeans are not available until the first login of a server application (lazy-loaded)
 
* C1: MBeans are not available until the first login of a server application (lazy-loaded)
* C2:  
+
* C2: Functions marked OBSOLETE will not be implemented if there is no suitable replacement
 
== Use Cases ==
 
== Use Cases ==
 
* UC1: EclipseLink managed MBean registration
 
* UC1: EclipseLink managed MBean registration
Line 45: Line 45:
 
The following functions are supported in EclipseLink 1.0
 
The following functions are supported in EclipseLink 1.0
 
====Runtime Services MBean====
 
====Runtime Services MBean====
 +
*public void setShouldProfilePerformance(boolean shouldProfile)
 +
*public boolean getShouldProfilePerformance()
 +
*public void setShouldLogPerformanceProfiler(boolean shouldLogPerformanceProfiler)
 +
*public boolean getShouldLogPerformanceProfiler()
 +
*public void setShouldCacheAllStatements(boolean shouldCacheAllStatements)
 +
*public boolean getShouldCacheAllStatements()
 +
*public void setStatementCacheSize(int size)
 +
*public int getStatementCacheSize()
 +
*public void updatePoolSize(String poolName, int maxSize, int minSize)
 +
*public List getAvailableConnectionPools()
 +
*public List getSizeForPool(String poolName)
 +
*public void addNewConnectionPool(String poolName, int maxSize, int minSize, String platform, String driverClassName, String url, String userName, String password) throws ClassNotFoundException
 +
*public void resetAllConnections()
 +
*public List getClassesInSession()
 +
*public List getObjectsInIdentityMap(String className) throws ClassNotFoundException
 +
*public Integer getNumberOfObjectsInIdentityMap(String className) throws ClassNotFoundException
 +
*public List getObjectsInIdentityMapSubCacheAsMap(String className) throws ClassNotFoundException
 +
*public Integer getNumberOfObjectsInIdentityMapSubCache(String className) throws ClassNotFoundException
 +
*public int getLogLevel(String category)
 +
*public void setLogLevel(int level)
 +
*public boolean shouldLog(int Level, String category)
 +
*public void setProfileWeight(int weight)
  
 
====Development Services MBean====
 
====Development Services MBean====
Line 50: Line 72:
 
The following functions are obsolete or deprecated and will not be included.
 
The following functions are obsolete or deprecated and will not be included.
 
====Runtime Services MBean====
 
====Runtime Services MBean====
 +
*public void setSequencePreallocationSize(int size)
 +
*public int getSequencePreallocationSize()
 +
*public void setShouldLogMessages(boolean shouldLogMessages) // Replaced by setLogLevel(int level)
 +
*public void setShouldLogDebug(boolean shouldLogDebug) // Replaced by setLogLevel(int level)
 +
*public boolean getShouldLogDebug() // Replaced by getLogLevel(String category)
 +
*public void setShouldLogExceptions(boolean shouldLogExceptions) // Replaced by setLogLevel(int level)
 +
*public boolean getShouldLogExceptions() // replaced by getLogLevel(String category)
 +
*public void setShouldLogExceptionStackTrace(boolean shouldLogExceptionStackTrace)
 +
*public boolean getShouldLogExceptionStackTrace()
 +
*public void setShouldPrintDate(boolean shouldPrintDate)
 +
*public boolean getShouldPrintDate()
 +
*public void setShouldPrintSession(boolean shouldPrintSession)
 +
*public boolean getShouldPrintSession()
 +
*public void setShouldPrintThread(boolean shouldPrintThread)
 +
*public boolean getShouldPrintThread()
 +
*public void setShouldPrintConnection(boolean shouldPrintConnection)
 +
*public boolean getShouldPrintConnection()
 +
*public void addNewConnectionPool(String poolName, int maxSize, int minSize, String platform, String driverClassName, String url, String userName, String password, String licencePath) throws ClassNotFoundException
 +
*public List getObjectsInIdentityMapSubCache(String className) throws ClassNotFoundException // replaced by getObjectsInIdentityMapSubCacheAsMap(String className)
  
 
====Development Services MBean====
 
====Development Services MBean====

Revision as of 08:23, 24 June 2008

Design Specification: JMX MBean Support

Bug# 235168 JMX MBean Tutorial for WebLogic

Document History

Date Author Version Description & Notes
2008-06-23 Michael O 0.1 Starting Draft

Project overview

This enhancement will add JMX MBean support to EclipseLink 1.0 by exposing select runtime and development attributes and methods to custom JMX client code or JConsole.

Concepts

Based on JMX 1.2 and JMX Remote API 1.0

References

ELUG Documentation JMX MBeans in WebLogic 10

Requirements

  • R1: Enable JMX MBean Support for WebLogic
  • R2: Enable JMX MBean support for generic J2EE servers
  • R3: MBeans have a 1:1 relationship with their session (multiple EARs=multiple beans)
  • R4: Clients can disable post login MBean registration (via SessionCustomizer)
  • R5: Clients can manage their own registration of EclipseLink MBeans (via ApplicationLifecycleListener)

Design Constraints

  • C1: MBeans are not available until the first login of a server application (lazy-loaded)
  • C2: Functions marked OBSOLETE will not be implemented if there is no suitable replacement

Use Cases

  • UC1: EclipseLink managed MBean registration
  • UC2: Application managed MBean registration
  • UC3: No MBean registration

Design / Functionality

MBean Functions/Attributes

The following functions are supported in EclipseLink 1.0

Runtime Services MBean

  • public void setShouldProfilePerformance(boolean shouldProfile)
  • public boolean getShouldProfilePerformance()
  • public void setShouldLogPerformanceProfiler(boolean shouldLogPerformanceProfiler)
  • public boolean getShouldLogPerformanceProfiler()
  • public void setShouldCacheAllStatements(boolean shouldCacheAllStatements)
  • public boolean getShouldCacheAllStatements()
  • public void setStatementCacheSize(int size)
  • public int getStatementCacheSize()
  • public void updatePoolSize(String poolName, int maxSize, int minSize)
  • public List getAvailableConnectionPools()
  • public List getSizeForPool(String poolName)
  • public void addNewConnectionPool(String poolName, int maxSize, int minSize, String platform, String driverClassName, String url, String userName, String password) throws ClassNotFoundException
  • public void resetAllConnections()
  • public List getClassesInSession()
  • public List getObjectsInIdentityMap(String className) throws ClassNotFoundException
  • public Integer getNumberOfObjectsInIdentityMap(String className) throws ClassNotFoundException
  • public List getObjectsInIdentityMapSubCacheAsMap(String className) throws ClassNotFoundException
  • public Integer getNumberOfObjectsInIdentityMapSubCache(String className) throws ClassNotFoundException
  • public int getLogLevel(String category)
  • public void setLogLevel(int level)
  • public boolean shouldLog(int Level, String category)
  • public void setProfileWeight(int weight)

Development Services MBean

The following functions are obsolete or deprecated and will not be included.

Runtime Services MBean

  • public void setSequencePreallocationSize(int size)
  • public int getSequencePreallocationSize()
  • public void setShouldLogMessages(boolean shouldLogMessages) // Replaced by setLogLevel(int level)
  • public void setShouldLogDebug(boolean shouldLogDebug) // Replaced by setLogLevel(int level)
  • public boolean getShouldLogDebug() // Replaced by getLogLevel(String category)
  • public void setShouldLogExceptions(boolean shouldLogExceptions) // Replaced by setLogLevel(int level)
  • public boolean getShouldLogExceptions() // replaced by getLogLevel(String category)
  • public void setShouldLogExceptionStackTrace(boolean shouldLogExceptionStackTrace)
  • public boolean getShouldLogExceptionStackTrace()
  • public void setShouldPrintDate(boolean shouldPrintDate)
  • public boolean getShouldPrintDate()
  • public void setShouldPrintSession(boolean shouldPrintSession)
  • public boolean getShouldPrintSession()
  • public void setShouldPrintThread(boolean shouldPrintThread)
  • public boolean getShouldPrintThread()
  • public void setShouldPrintConnection(boolean shouldPrintConnection)
  • public boolean getShouldPrintConnection()
  • public void addNewConnectionPool(String poolName, int maxSize, int minSize, String platform, String driverClassName, String url, String userName, String password, String licencePath) throws ClassNotFoundException
  • public List getObjectsInIdentityMapSubCache(String className) throws ClassNotFoundException // replaced by getObjectsInIdentityMapSubCacheAsMap(String className)

Development Services MBean

EclipseLink Managed Lazy Registration

By default MBean registration is enabled for WebLogic. This registration occurs as a post step during the first login to the session.

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.

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>

Testing

A formal JMX J2SE client test suite is required.

Manual Testing Results

Action: DevelopmentServices | initializeIdentityMap p1=org.eclipse.persistence.example.unified.business.StatLabel

[EL Finer]: 2008.06.24 08:58:13.722--ServerSession(32676101)--Thread(Thread[RMI TCP Connection(16)-10.156.52.98,5,RMI Runtime])--
initialize identitymaps
[EL Finer]: 2008.06.24 08:59:04.004--ServerSession(32676101)--Thread(Thread[RMI TCP Connection(18)-10.156.52.98,5,RMI Runtime])--
initialize identitymap: class org.eclipse.persistence.example.unified.business.StatLabel


API

GUI

<JAVA_HOME>/bin/JConsole client

You should see the following EclipseLink MBeans off the root of the JNDI tree. In this example there are 2 separate EARs deployed to WebLogic - each with its own set of MBeans based on the login session.

Eclipselink jmx mbeans in jconsole.jpg

Config files

Documentation

http://wiki.eclipse.org/Integrating_EclipseLink_with_an_Application_Server_(ELUG)#How_to_Integrate_JMX - move and rewrite for WebLogic http://wiki.eclipse.org/Configuring_a_Session_%28ELUG%29#Configuring_the_Server_Platform - WebLogic replaces OC4J in "Check this field to configure the EclipseLink runtime to enable the deployment of a JMX MBean that allows monitoring of the EclipseLink session. Currently, this is only supported for OC4J."

Open Issues

Issue # Owner Description / Notes

Decisions

Issue # Description / Notes Decision

Future Considerations

During the research for this project the following items were identified as out of scope but are captured here as potential future enhancements. If agreed upon during the review process these should be logged in the bug system.

  • OC4J, WebSphere, JBoss, Geronimo specific MBean support

Back to the top