Friday, December 14, 2007

Introscope EJB's not being displayed

When we added Introscope on a number of Websphere Application servers we noticed some of the EJB's were not coming up. As we poked around we saw the EJB's in the PMI data from the app server, but not flagged inside introscope itself.

Upon some research we see that introscope idenfities EJB's using the directives below:

IdentifyInheritedAs: javax.ejb.SessionBean SessionBeanTracing
IdentifyInheritedAs: javax.ejb.EntityBean EntityBeanTracing

The directives tell introscope that any object that directly inherits from javax.ejb.(SESSION|ENTITY)Bean is a (SESSION|ENTITY) EJB. The limitation is that it must *directly* inherit.

Example, if class B inherits from javax.ejb.SessionBean, then Introscope will know that class B is a Session bean. However, if class C inherits from class B, Introscope will not trace class C.

This was a big hit for us as we have a number of abstract superclasses for our EJB's. A majority of our EJB's were not being tagged. Fortunately this was an easy fix, once they were identified. We created a pbd which contains a number of directives:

IdentifyInheritedAs {abstract_superclass} SessionBeanTracing

One cool thing when we move to WebSphere 6.1 that we will be able to take advantage of is "if you are using 1.5 JVM, Introscope now supports ProbeBuilding for Multi-Level Class Hierarchies. In pre-5.0 JVMs (we are using 1.4.2 JVM), Introscope does NOT instrument classes in the deeper levels of an class hierarchy—only the classes that explicitly extend a probed class. On JVM 5.0, you can configure Introscope to instrument multiple levels of subclasses of a probed class."

Read more!

Last posts