| By Dan MacKinnon | Article Rating: |
|
| April 26, 2002 12:00 AM EDT | Reads: |
9,279 |
J2EE is rapidly becoming an established platform for deploying long-running business-critical applications. As the number of J2EE applications grows and their importance increases, a standard way to manage J2EE servers and applications is becoming a key requirement.
Java Management Extensions (JMX) provide a pure Java management infrastructure that can be used for all Java-based software.
BEA WebLogic's support for JMX comes in not only providing a JMX implementation, but in basing all of its key administration and management features on this standard. The administration and management features of WebLogic are now extensible open to both developers and third-party tool integrations.
There are obvious benefits in improved and extensible administration, but J2EE application developers still face several questions: What exactly does JMX provide and how is it likely to be used? What management features should developers build into J2EE applications? Which management facilities should the application server provide automatically? This first article in a two-part series on WebLogic JMX provides a brief overview of JMX and discusses some of its implications for enterprise Java developers.
JMX and Application Management
An application is
instrumented if it provides a well-defined public interface that allows
other applications to access its management or administrative functions. The
management interface of an application does not generally resemble its public
client interface. Instead, it is intended for privileged users, exposing data
and functions for monitoring and administration. A component that has been
instrumented to provide such a management interface is a manageable
resource.
Manageable resources include devices such as printers, network routers, and telephone switches. More generally, any software component that resides on a server or in a distributed environment that is available to service requests is a good candidate for instrumentation. J2EE components fit well into this larger category. Management interfaces for such components include functions for tracking resource use, measuring client volumes, generating error logs, stopping and starting services, and load-balancing.
Developers (when tuning and debugging systems), system administrators (when monitoring applications and intervening when necessary), and other users employ management applications to access instrumented manageable resources. Management applications range from graphical resource-use monitors that run locally to Web-based administrative consoles that can be accessed remotely. Many of these tools use standard protocols to discover and display managed resources and their interfaces dynamically.
JMX is intended to be simple enough to allow developers to rapidly provide a management layer for either new or existing Java applications, and comprehensive enough to be adapted to other standard (non-Java) management protocols. The JMX specification, currently in its 1.0 release, is being developed through the Java Community Process. The JMX reference implementation is available from Sun Microsystems, which also provides a commercial JMX-based product, the Java Dynamic Management Kit (JDMK). A number of J2EE vendors now include JMX implementations in their application servers; WebLogic is one of the more comprehensive of these.
A specification for J2EE-specific management requirements based on JMX is currently under development, as are other specifications that describe how JMX should be adapted to other management protocols.
JMX Architecture
JMX presents a layered architecture,
shown in Table 1 and Figure 1. At the two extremes of the JMX levels are the
instrumentation level and the management level, representing managed resources
and management applications. Between these are the agent and distribution
levels, which provide the necessary protocols for applications in the management
level to access the manageable resources of the instrumentation level.
Managed Beans, or MBeans, make up the instrumentation level. These objects represent the manageable resources of the system, and are the primary components of the JMX architecture.
An MBean Server is the most essential part of the agent level. It provides a means for creating, registering, and finding MBeans within the system.
The agent level includes several services that are also represented by MBeans.
The distribution level may provide remote access to the agent level through CORBA, RMI, or other means, and may also provide adapters for other protocols. It may provide security as well.
The management level consists of the external applications that can access the MBeans via the APIs exposed through the agent layer, using protocols provided by the distribution layer.
WebLogic goes beyond the JMX 1.0 specification to provide a distribution layer that maps logically onto the underlying agent level. Both local and remote users of JMX can access MBeans through the corresponding MBeanHome, a WebLogic-specific component that provides a client with access to MBeans. WebLogic's MBeanHome components offer some distribution facilities, as well as other features that make them easy to use.
Using JMX
Simple Instrumentation
JMX's
instrumentation level provides a variety of Managed Bean types for developers to
implement depending on their requirements. It is important to note that MBeans
bear no resemblance to Enterprise JavaBeans (EJBs). An MBean is like a regular
JavaBean, having a well defined interface, complete with getters and setters.
Unlike EJBs, they have no built-in transactional security or distribution
facilities.
A Standard MBean, the most basic MBean, is not required to implement a special JMX interface or extend a particular abstract class. To be considered a Standard MBean, a class must simply implement an interface whose name matches that of the class with the additional MBean suffix. The MBean interface defines the management interface for the corresponding MBean class. A simple MyService MBean is shown in Listing 1 (code for this article may be found at www.sys-con.com/weblogic/sourcec.cfm).
Making the MyService MBean available within a JMX agent is straightforward. The examples in Listings 2 and 3 are based on the standard JMX interfaces and can be used with Sun's reference implementation.
Registration of an MBean with the agent layer is carried out using the MBeanServerFactory, MBeanServer, and ObjectName classes, all part of the standard JMX API, found in the javax.management package. The MBeanServer interface provides a rich API for registering and manipulating MBeans; essentially, all management of MBeans is carried out using this interface.
The MBeanServerFactory is a class that provides a broker for the various MBeanServer instances within a system. It is an implementation-neutral way of obtaining references to an MBeanServer. The API provided by the MBeanServerFactory allows for multiple servers to be active within the system.
An MBean is registered under a particular name that is used to uniquely and meaningfully identify it. For most MBeanServer operations, this name is represented by an ObjectName instance. It is a structured piece of data that complies with the JMX naming conventions. MBean names are given by a domain name, followed by a colon, and then by a sequence of one or more property-value pairs. Certain MBeanServer APIs support pattern-matching for MBean names, allowing users to query for a range of MBeans whose names conform to a given object name expression.
As shown in Listing 2, the basic registration process is quite simple. However, additional JMX facilities provide hooks for developers during the registration process, if required. For example, the MBean can implement an additional MBean Registration interface that will give the MBean- event callbacks during registration. These callbacks (preRegsiter, postRegister, deregister, and postDeregister) allow the MBean to obtain a reference to the MBeanServer, allowing the MBean to perform management actions on other MBeans. MBeans are used by invoking their methods through the MBeanServer interface (see Listing 3).
Intermediate and Advanced JMX Use
Standard
MBeans are simple, as is the basic API for manipulating the MBeanServer.
However, JMX also offers functionality that goes far beyond basic use. Instead
of Standard MBeans, implementers of MBeans can choose to build Dynamic MBeans or
Model MBeans, and may make use of the JMX Notification framework. The agent
level also has other features, including a number of built-in MBean monitors,
and services for loading and relating MBeans.
Dynamic MBeans
Dynamic MBeans allow the
management API of an MBean to be defined dynamically instead of through a
predefined interface. For all MBeans, the agent layer discovers the management
interface and exposes it through various APIs. For Standard MBeans, this
interface is discovered by inspection of the MBean interface. For Dynamic
MBeans, the agent level discovers the management interface by invoking
particular methods on the MBean (see Listing 4).
Dynamic MBeans generally require more coding than Standard MBeans, but allow the management interface to change at runtime, and allow the MBean developer to expose more information (such as textual descriptions of the MBean and its operations) through the agent level.
The surprising aspect of DynamicMBeans is that they present essentially the same client view to their users as Standard MBeans. A Dynamic MBean's attributes are displayed and its actions are invoked through MBeanServer methods in the same way as the much simpler Standard MBeans.
Model MBeans
Although a specialized form of
Dynamic MBeans, Model MBeans are completely different in how they are built and
configured. Essentially, a Model MBean is a generic Dynamic MBean that can be
loaded with an object that represents the manageable resource. A JMX Provider is
required to provide Model MBean implementations that developers can configure to
wrap their resources without creating any MBeans themselves. As a result, Model
MBeans require far less coding than Dynamic MBeans. To build a Model MBean, the
developer must
- Create an empty Model MBean,
- Provide a managed resource delegate against which all operations will be executed,
- Provide an MBeanInfo object that lists the allowed operations for the MBean,
- Register the Model MBean with the MBeanServer.
The JMX Notification framework allows MBeans to notify management applications of changes of state or other events that have occurred in the manageable resources of the system. Various subclasses of javax.management.Notification (which extends java.util.EventObject) can be used by MBeans that implement javax.management.NotificationBroadcaster to signal events to objects that have implemented the javax.management.NotificationListener interface.
MBean Monitors
Instead of relying on MBeans to
notify interested parties of changes in their state, management applications can
actively track MBean attributes through MBean monitors provided by the agent
level. A JMX agent implementation will provide various MBean Monitors. These are
used to detect changes in specific MBean attributes. Several monitor types are
provided with a JMX agent, including
- CounterMonitor: Checks the value of attributes that act as counters (these are integer types and have nonnegative values)
- StringMonitor: Detects changes in string values
- GaugeMonitor: Observes fluctuations in integer or floating point attributes within a range.
One of the key things that JMX provides is a way for managed resources to describe themselves to management applications. This allows management applications to be written independently of the systems they administer, without knowledge of the operations and attributes of the manageable components they will manipulate. The description of manageable resources is carried out through the JMX metadata data classes MBeanInfo, MBeanOperationInfo, MBeanConstructorInfo, MBeanAttributeInfo, and so forth.
Without a metadata infrastructure, management applications would have to rely on the Java reflection API for this discovery process. By providing this framework, JMX avoids the difficulties associated with reflection and provides a standard means of self-description that allows developers to provide more information than is available through reflection.
Roles in JMX
One of the main questions with JMX is not
how to use it its architecture and API are straight-forward but when
and why to use it. The potential users of JMX technology are best described
through a set of illustrative roles (see Table 2).
Java developers will likely find themselves in the roles of application developer, while building manageable applications, and management solutions developer, while creating ways to better manage existing applications. The application developer develops Java applications that provide a runtime management interface. J2EE applications built with technologies such as JSPs, servlets, EJB, JMS, and so on are likely to be the most common manageable applications. This role will use the instrumentation level of JMX.
Management solutions developers will create customized administration and monitoring systems that will function as components in the management layer of JMX. They will be accessing instrumented application components from the agent level through the distribution level. These developers may have to develop additional protocol adapters in the distribution level if they are integrating legacy management systems.
Management tool vendors may build management tools in Java, or may enhance existing tools to use JMX. This may include adapting existing management protocols to JMX.
For both the management solutions developer and the management tool vendor, the end-user of their work is the system administrator. This role uses these tools and solutions to manage the running applications monitoring their behavior, running diagnostic checks, shutting down and starting up services, and doing manual load-balancing as required.
A standalone Java application may provide a complete JMX implementation, but the more common scenario is that the vendors of J2EE servers will also become JMX Providers. The JMX Provider provides an implementation of JMX either as a framework to be incorporated into standalone Java applications, or as part of an application server.
JMX Use in J2EE
The inclusion of JMX in J2EE-based
application servers will enable developers to:
- Provide application-specific management interfaces that can be used by in-house and third-party management tools
- Leverage existing application-server instrumentation to create custom reporting and monitoring applications
- Integrate third-party management tools into their J2EE applications.
Ideally, integrating JMX into J2EE application servers will make the configuration and administration facilities of such servers extensible, allowing developers to create simplified administration consoles, integrate reporting facilities and statistics-gathering into the server, and tie server and application events to logging facilities or messaging channels.
The more instrumentation provided by the application server, the less need there will be to build JMX interfaces for individual J2EE application components. Instrumentation provided by the application server will be safer than anything built into individual components, and will provide a consistent management view across all deployed applications. Standard J2EE management facilities may include:
- Deployment, undeployment, and redeployment of components
- Server availability and cluster administration
- Security management
- Error logging
- Connector monitors (i.e,. JDBC connection tracking)
JMX Pitfalls
Overuse of JMX is a pitfall that should be
avoided. It is not designed to be a general-purpose distributed object system.
JMX use should be limited to those aspects of the system that are clearly
management-related. Some other areas in which JMX users should proceed with care
include:
1. Mixing JMX directly with EJB: Care must be taken to ensure that JMX code does not violate the security and transactional integrity of the EJBs. An EJB cannot also be an MBean for several reasons:
EJB components should not also be MBeans, nor should they expose their underlying bean instance directly to MBeans. It is possible, however, for MBeans to access EJBs through the standard EJB protocols. Unfortunately, MBeans would not be able to access EJBs through the new local interfaces provided by EJB 2.0 since these are restricted to use by other enterprise beans. Consequently, MBeans would have to access EJBs as remote clients, and the operations available to the MBeans would be the same as those exposed through the regular client interfaces.
2. Distributed JMX use: Lack of details for distribution in the specification puts developers who are trying to create application serverneutral management solutions at a disadvantage. MBeanHomes make up for this by providing a straightforward distribution mechanism.
3. Relying on Standard J2EE management features: There is no official statement on what management facilities should be present in an application server. The existing management and administration facilities in WebLogic are a good example of the direction in which these specifications are likely to proceed.
Conclusions
JMX provides an incredibly simple and
flexible way to make Java applications manageable, and a standard way to build
powerful management applications. J2EE application servers have reached a level
of maturity where management facilities are a requirement. As these two
technologies evolve, developers of J2EE applications will see an increased need
to make their applications JMX aware, and will see more JMX-based management
tools appear in the application server marketplace. Although JMX is based on
well proven management concepts and products, its use in application servers is
in its infancy but as with all enterprise Java technology, it is bound to grow
up quickly.
In part two of this series, we will look at WebLogic's JMX implementation, and discuss some concrete ways that it can be used to instrument J2EE applications.
References
http://jcp.org/jsr/detail/3.jsp.
http://jcp.org/jsr/detail/077.jsp.
http://jcp.org/jsr/detail/070.jsp.
http://jcp.org/jsr/detail/48.jsp
http://jcp.org/jsr/detail/3.jsp.
http://jcp.org/jsr/detail/070.jsp.
http://jcp.org/jsr/detail/3.jsp.
http://java.sun.com/products/ejb/
http://java.sun.com/products/JavaManagement/doc.html
http://e-docs.bea.com/wls/docs61/jmx/index.html.
Published April 26, 2002 Reads 9,279
Copyright © 2002 SYS-CON Media, Inc. — All Rights Reserved.
Syndicated stories and blog feeds, all rights reserved by the author.
More Stories By Dan MacKinnon
About 7 years ago I wrote these two articles for the now defunct "WebLogic Developers Journal." They have now shown up on 'ulitzer'. They are now horribly out of date - please ignore them! :) Thanks, -- Dan
![]() |
Thomas SMETS 01/07/05 10:31:12 AM EST | |||
The URL reference in the page is incorrect : http://www.sys-con.com.com \T, |
||||
- The Economics of Cloud Computing Analyzed
- GovIT Expo Highlights Cloud Computing
- Cloud Computing Best Practices
- Tactical Cloud Computing Panel at 1st Annual GovIT Expo
- Why SOA Needs Cloud Computing - Part 1
- The Cloud Transition: What Does It Mean For You?
- Cloud Computing Strategy
- IBM’s Mainframe Monopoly Threatened by BMC Founder’s Shop
- Economy Drives Adoption of Virtual Lab Technology
- Virtualization Expo Call for Papers Deadline December 15
- Oracle in Leader's Quadrant for Enterprise Application Servers
- Oracle Fusion Middleware Delivers World Record Single-Node Result
- The Economics of Cloud Computing Analyzed
- The Difference Between Web Hosting and Cloud Computing
- GovIT Expo Highlights Cloud Computing
- Cloud Computing Best Practices
- Tactical Cloud Computing Panel at 1st Annual GovIT Expo
- Citrix Aims To Cripple VMware’s Cloud Designs
- Product Evaluation: JBoss TCO Calculator
- Why SOA Needs Cloud Computing - Part 1
- Build Reliability into Cloud Computing for SMBs
- Perhaps SOA is More Strategy Than Architecture
- EC Wrong, Wrong, Wrong – and Sloppy to Boot: Intel
- Five Reasons to Choose a Private Cloud
- Java vs C++ "Shootout" Revisited
- Where Are RIA Technologies Headed in 2008?
- Configuring Eclipse for Remote Debugging a WebLogic Java Application
- Migrating a JBoss EJB Application to WebLogic
- XA Transactions
- The Top 250 Players in the Cloud Computing Ecosystem
- An Introduction to Abbot
- WebLogic Tutorial: "Integrating Apache Poi in WebLogic Server"
- Eclipse "Pollinate" Project to Integrate with Apache Beehive
- Failover and Recovery of Enterprise Applications - Part 1
- Cover Story: A Practical Solution to Internationalization of a J2EE Web App
- WebSphere vs WebLogic: IBM and BEA Spar Over SPEC Results































