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/316513"

m (GlassFish JMX Integration)
m (Testing)
Line 143: Line 143:
 
</source>
 
</source>
  
 +
===JBoss Proof of Concept Registration 1===
 +
*First POC results positive using a non-JNDI JMX spec findMBeanServer() first server returned lookup (fine only for non-JRockit JVMs)
 +
*Using the server
 +
<source lang="java">mBeanServerRuntime = (MBeanServer) MBeanServerFactory.findMBeanServer(null).get(0);</source>
 +
*we register via
 +
<source lang="java">runtimeInstance = mBeanServerRuntime.registerMBean(runtimeServices, anObjectName);</source>
 +
*to
 +
<pre>
 +
server MBeanServerImpl  (id=400)
 +
classLoaderRepository UnifiedLoaderRepository3  (id=409)
 +
listeners MBeanServerListenerRegistry  (id=417)
 +
outer MBeanServerImpl  (id=400)
 +
classLoaderRepository UnifiedLoaderRepository3  (id=409)
 +
listeners MBeanServerListenerRegistry  (id=417)
 +
outer MBeanServerImpl  (id=400)
 +
registry BasicMBeanRegistry  (id=419)
 +
defaultDomain "jboss" (id=426)
 +
delegate MBeanServerDelegate  (id=427)
 +
domainMap ConcurrentReaderHashMap  (id=432)
 +
fMbInfosToStore null
 +
loaderRepository UnifiedLoaderRepository3  (id=409)
 +
mbeanInfoService ObjectName  (id=436)
 +
registrationNotificationSequence SynchronizedLong  (id=439)
 +
server MBeanServerImpl  (id=400)
 +
unregistrationNotificationSequence SynchronizedLong  (id=444)
 +
registry BasicMBeanRegistry  (id=419)
 +
</pre>
 +
*giving us
 +
<pre>
 +
16:56:54,376 INFO  [STDOUT] [EL Finest]: 2010-06-22 16:56:54.376--Thread(Thread[http-127.0.0.1-8080-2,5,jboss])--Registered MBean: org.eclipse.persistence.services.jboss.MBeanJBossRuntimeServices[TopLink:Name=Session(vfszip_/C_/opt/jboss-eap-5.0b/jboss-as/server/default/deploy/org.eclipse.persistence.example.jpa.server.jboss.EnterpriseEAR.ear/org.eclipse.persistence.example.jpa.server.jboss.EnterpriseEJB.jar/_example)]
 +
 +
runtimeInstance ServerObjectInstance  (id=519)
 +
agentID "xps435_1277239942304" (id=436)
 +
className "org.eclipse.persistence.services.jboss.MBeanJBossRuntimeServices" (id=521)
 +
name ObjectName  (id=501)
 +
_ca_array ObjectName$Property[1]  (id=523)
 +
_canonicalName "TopLink:Name=Session(vfszip_/C_/opt/jboss-eap-5.0b/jboss-as/server/default/deploy/org.eclipse.persistence.example.jpa.server.jboss.EnterpriseEAR.ear/org.eclipse.persistence.example.jpa.server.jboss.EnterpriseEJB.jar/_example)" (id=524)
 +
</pre>
 
===Testing Data Model===
 
===Testing Data Model===
  

Revision as of 17:05, 22 June 2010

Design Specification: Extend WebLogic 10.3 JMX MBean support to JBoss 5.1.0 and WebSphere 7 as generic API

Work in Queue

Completed Work

JPA EAR, EJB, WAR and SE (DDL Generation) WebLogic 10.3 J2EE application Eclipse projects in SVN - use to perform JMX MBean registration

Document History

Date Author Version Description & Notes
2010-06-10 Michael O'Brien 0.1 Starting Draft for Generic JMX MBean support to extend WebLogic 10.3 support to JBoss 5.1.0 EAP and WebSphere 7 for ER 316513
2010-06-22 Michael O'Brien 0.2 Develop/Document JBoss 5.1.0 EAP JMX registration code ER 316511

Project overview

Analysis

DI 1: Architecture for JMX Implementors

Option 1: Move everything generic up to ServerPlatformBase

  • This issue with this is that we will only have 3 of the 6 platforms JMX enabled - by moving JMX code too high up in the class hierarchy we introduce functionality that OC4J, SAP and SUNAS support but not within the current EclipseLink version.

Option 2: Create a new JMXServer Policy or Interface

Decision DI 1:

  • Currently option 2 - new JMX Policy

DI 2: Enabling JMX MBeans

  • The following properties will continue to enable registration for any capable application server.
  • No code changes required at this point.

WebLogic

rem set JAVA_OPTIONS=%JAVA_OPTIONS% -Declipselink.register.dev.mbean=true
rem set JAVA_OPTIONS=%JAVA_OPTIONS% -Declipselink.register.run.mbean=true

JBoss

  • jboss-eap-5.0/jboss/as/bin/run.bat:83
// after
set JAVA_OPTS=%JAVA_OPTS% "-Djava.library.path=%JBOSS_NATIVE_HOME%;%PATH%;%SYSTEMROOT%"
// add
set JAVA_OPTS=%JAVA_OPTS% -Declipselink.register.run.mbean=true

WebSphere

DI 3: MBean Registration and Deregistration

  • These steps are mostly the same for all servers
    • 1) Get JNDI context to lookup an 'MBeanServer
    • 2) Create a new ObjectName for the MBean
    • 3) Create a server specific MBean
    • 4) call registerMBean using the MBean and ObjectName
    • 5) discard the ObjectInstance return of registerMBean but cache the MBean*RuntimeServices MBean

WebLogic JMX Integration

JBoss JMX Integration

  • 20100622: This section details the JMX registration code for EclipseLink MBeans on JBoss 5.1.0 EAP
  • See jar signing and JMX prepending issues solved in bug# 305331 specific to the JBoss EAP edition that need to be covered off.

Modules

NEW: core:services.mbean.jboss.MBeanJBossRuntimeServices.java
NEW: core:services.mbean.jboss.MBeanJBossRuntimeServicesMBean.java
NEW: core:services.mbean.jboss.JBossRuntimeServices.java
MOD: core:services.mbean.weblogic.ClassSummaryDetail.java moved up to parent package
MOD: core:platform.server.jboss.JBossPlatform.java
MOD: core:services.mbean.weblogic.WebLogic_10_platform.java
  • Move the now generic system properties up to ServerPlatformBase
    /** This System property "eclipselink.register.dev.mbean" when set to true will enable registration/unregistration of the DevelopmentServices MBean */
    public static final String JMX_REGISTER_DEV_MBEAN_PROPERTY = "eclipselink.register.dev.mbean";
    /** This System property "eclipselink.register.run.mbean" when set to true will enable registration/unregistration of the RuntimeServices MBean */    
    public static final String JMX_REGISTER_RUN_MBEAN_PROPERTY = "eclipselink.register.run.mbean";

WebSphere JMX Integration

GlassFish JMX Integration

  • No work scheduled at this point of 20100622

Design

Design Issue NN:

Analysis NN:

Solution NN:

Implementation

Testing

JBoss Specific EAR Configuration

  • The following scenario specifies @Remote on the remote interface and @Stateless on the stateless session bean.
    • This results in the following JNDI name emitted by the server on EAR deploy
@Stateless(name="ApplicationService", mappedName="ApplicationService")
@Remote(ApplicationServiceRemote.class)
public class ApplicationService implements ApplicationServiceRemote  {
	@PersistenceContext(unitName="example", type=PersistenceContextType.TRANSACTION)	
	private EntityManager entityManager;
...
}
 
public class FrontController extends HttpServlet implements Servlet {
    public static final String APPLICATION_SERVICE_JNDI_NAME 
      = "org.eclipse.persistence.example.jpa.server.jboss.EnterpriseEAR/ApplicationService/remote-org.eclipse.persistence.example.jpa.server.business.ApplicationServiceRemote";    
 
    /**
     * Get the SSB ApplicationService bean - using a JNDI context lookup (no EJB injection was used on this servlet)
     * @param viaJNDILookup
     * @return
     */
    public ApplicationServiceRemote getApplicationService(boolean viaJNDILookup) {
        if(null == applicationService && viaJNDILookup) {
            try {
                Hashtable<String, String> env = new Hashtable<String, String>();      
                env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");     
                env.put(Context.PROVIDER_URL, "localhost");      
                env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces" );     
                InitialContext ctx = new InitialContext(env);
                System.out.println("FrontController.getApplicationService() JNDI lookup of " + APPLICATION_SERVICE_JNDI_NAME);
                return (ApplicationServiceRemote) ctx.lookup(APPLICATION_SERVICE_JNDI_NAME);            
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException("Exception looking up session bean: ", e);
            }
        } else {
            return applicationService;
        }
    }
...
}

JBoss Proof of Concept Registration 1

  • First POC results positive using a non-JNDI JMX spec findMBeanServer() first server returned lookup (fine only for non-JRockit JVMs)
  • Using the server
mBeanServerRuntime = (MBeanServer) MBeanServerFactory.findMBeanServer(null).get(0);
  • we register via
runtimeInstance = mBeanServerRuntime.registerMBean(runtimeServices, anObjectName);
  • to
server	MBeanServerImpl  (id=400)	
	classLoaderRepository	UnifiedLoaderRepository3  (id=409)	
	listeners	MBeanServerListenerRegistry  (id=417)	
	outer	MBeanServerImpl  (id=400)	
		classLoaderRepository	UnifiedLoaderRepository3  (id=409)	
		listeners	MBeanServerListenerRegistry  (id=417)	
		outer	MBeanServerImpl  (id=400)	
		registry	BasicMBeanRegistry  (id=419)	
			defaultDomain	"jboss" (id=426)	
			delegate	MBeanServerDelegate  (id=427)	
			domainMap	ConcurrentReaderHashMap  (id=432)	
			fMbInfosToStore	null	
			loaderRepository	UnifiedLoaderRepository3  (id=409)	
			mbeanInfoService	ObjectName  (id=436)	
			registrationNotificationSequence	SynchronizedLong  (id=439)	
			server	MBeanServerImpl  (id=400)	
			unregistrationNotificationSequence	SynchronizedLong  (id=444)	
	registry	BasicMBeanRegistry  (id=419)	
  • giving us
16:56:54,376 INFO  [STDOUT] [EL Finest]: 2010-06-22 16:56:54.376--Thread(Thread[http-127.0.0.1-8080-2,5,jboss])--Registered MBean: org.eclipse.persistence.services.jboss.MBeanJBossRuntimeServices[TopLink:Name=Session(vfszip_/C_/opt/jboss-eap-5.0b/jboss-as/server/default/deploy/org.eclipse.persistence.example.jpa.server.jboss.EnterpriseEAR.ear/org.eclipse.persistence.example.jpa.server.jboss.EnterpriseEJB.jar/_example)]

runtimeInstance	ServerObjectInstance  (id=519)	
	agentID	"xps435_1277239942304" (id=436)	
	className	"org.eclipse.persistence.services.jboss.MBeanJBossRuntimeServices" (id=521)	
	name	ObjectName  (id=501)	
		_ca_array	ObjectName$Property[1]  (id=523)	
		_canonicalName	"TopLink:Name=Session(vfszip_/C_/opt/jboss-eap-5.0b/jboss-as/server/default/deploy/org.eclipse.persistence.example.jpa.server.jboss.EnterpriseEAR.ear/org.eclipse.persistence.example.jpa.server.jboss.EnterpriseEJB.jar/_example)" (id=524)

Testing Data Model

Open Issues

References

Back to the top