User: starksm Date: 01/04/02 16:30:37 Modified: src/docs basicconfiguration.xml howtombeans.xml Log: First complete draft of the custom services integration via mbeans howto. Revision Changes Path 1.8 +1 -1 manual/src/docs/basicconfiguration.xml Index: basicconfiguration.xml =================================================================== RCS file: /cvsroot/jboss/manual/src/docs/basicconfiguration.xml,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- basicconfiguration.xml 2001/04/02 21:33:24 1.7 +++ basicconfiguration.xml 2001/04/02 23:30:37 1.8 @@ -215,7 +215,7 @@ </para> - <para>The jboss.jcml file is loaded by the org.jboss.configuration.ConfigurationService MBean. This service acts much like the standard JMX MLet class in that it loads and configures MBeans. The dependencies between MBeans are managed by the org.jboss.util.ServiceControl MBean. The ServiceControl MBean listens for REGISTRATION_NOTIFICATION and UNREGISTRATION_NOTIFICATION JMX events to determine which MBeans are available. The order of rgistration determines the order of initialization and startup. The ServiceControl expects that MBeans which require depdendency management to conform to the org.jboss.util.Service interface. This interface allows for the ordered initialization, starting, stopping and destorying of MBeans. The ordering is based on the order in which MBeans are specified in the jboss.jcml file. See <xref linkend = "howto.mbeans"/> for the details of creating an MBean with depedencies on other MBeans.</para> + <para>The jboss.jcml file is loaded by the org.jboss.configuration.ConfigurationService MBean. This service acts much like the standard JMX MLet class in that it loads and configures MBeans. The dependencies between MBeans are managed by the org.jboss.util.ServiceControl MBean. The ServiceControl MBean listens for REGISTRATION_NOTIFICATION and UNREGISTRATION_NOTIFICATION JMX events to determine which MBeans are available. The order of registration determines the order of initialization and startup. The ServiceControl expects that MBeans which require depdendency management to conform to the org.jboss.util.Service interface. This interface allows for the ordered initialization, starting, stopping and destorying of MBeans. The ordering is based on the order in which MBeans are specified in the jboss.jcml file. See <xref linkend = "howto.mbeans"/> for the details of creating an MBean with depedencies on other MBeans.</para> </listitem> <listitem> <para id = "jboss.dependencies-file">jboss.dependencies</para> 1.3 +39 -6 manual/src/docs/howtombeans.xml Index: howtombeans.xml =================================================================== RCS file: /cvsroot/jboss/manual/src/docs/howtombeans.xml,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- howtombeans.xml 2001/04/02 21:33:24 1.2 +++ howtombeans.xml 2001/04/02 23:30:37 1.3 @@ -1,7 +1,7 @@ <?xml version = "1.0" encoding = "UTF-8"?> <section id = "howto.mbeans"> - <title>How to Integrate Custom MBeans</title> - <para> + <title>How to Integrate Custom Services via MBeans</title> + <para>Author: <author> <firstname>Scott</firstname> <surname>Stark</surname> @@ -11,18 +11,19 @@ <section> <title>Introduction</title> <para>The best way to add services to the JBoss server is to write your own JMX MBeans. An MBean is a Java object which implement resources and their instrumentation interfaces as defined in the Java Management Extensions(JMX) specification. Once written they are added to JBoss using the jboss.jcml which is used to configure the core JBoss MBeans. The best way for your EJBs to access your new services is to make them accessible via JNDI.</para> - <para>There are two classes of MBeans; those that are independent of JBoss services and those that are dependent on JBoss services. MBeans that are independent of JBoss services are the trival case and can be written per the JMX specification and added to a JBoss server by adding their MLET tag to the jboss.conf file. Writing an MBean that relieas on a JBoss service like naming requires one to follow the JBoss service pattern.</para> + <para>There are two classes of MBeans; those that are independent of JBoss services and those that are dependent on JBoss services. MBeans that are independent of JBoss services are the trival case and can be written per the JMX specification and added to a JBoss server by adding their MLET tag to the jboss.conf file. Writing an MBean that relies on a JBoss service like naming requires one to follow the JBoss service pattern. Before describing how to write such an MBean, let's go over the two JBoss services that manage the configuration and depdendencies of MBean services; ConfigurationService and ServiceControl.</para> <section> <title>The ConfigurationService MBean</title> - <para>JBoss manages dependencies between its MBeans via a custom MBean that loads an xml variation of the standard MLet configuration file. This custom MBean is implemented in the org.jboss.configuration.ConfigurationService class. The ConfigurationService MBean is loaded when JBoss starts up by the JMX MLet due to its entry in the jboss.conf file. The jboss.jcml configuration is then loaded by invoking loadConfiguration() on the ConfigurationService MBean. The loadConfiguratoin method performs the following steps:</para> + <para>JBoss manages configuration its MBean services via a custom MBean that loads an xml variation of the standard MLet configuration file. This custom MBean is implemented in the org.jboss.configuration.ConfigurationService class. The ConfigurationService MBean is loaded when JBoss starts up by the JMX MLet due to its entry in the jboss.conf file. The jboss.jcml configuration is then loaded by invoking loadConfiguration() on the ConfigurationService MBean. The loadConfiguratoin method performs the following steps:</para> <procedure> <step> <para>Parse the jboss.jcml file and instantiate all MBeans</para> </step> <step> + <para>Parse the optional jboss-auth.jcml</para> <substeps> <step> - <para>Parse the optional jboss-auth.jcml file and instantiate any MBeans that were not created by the parser of the jboss.jcml file.</para> + <para>If jboss-auth.jcml exists, parse the file and instantiate any MBeans that were not created by the parse of the jboss.jcml file.</para> </step> <step> <para>Apply the MBean attribute settings from the jboss-auto.jcml file.</para> @@ -34,9 +35,41 @@ </step> </procedure> </section> + <section> + <title>The ServiceControl MBean</title> + <para>JBoss manages dependencies between MBeans via the org.jboss.util.ServiceControl custom MBean. . The ServiceControl MBean is also loaded by the JMX MLet on JBoss startup. It implements the javax.management.NotificationListener interface to receive AttributeChangeNotification, MBeanServerNotification.REGISTRATION_NOTIFICATION and MBeanServerNotification.UNREGISTRATION_NOTIFICATION JMX events. AttributeChangeNotification are simply logged to the JBoss server log. The REGISTRATION_NOTIFICATION and UNREGISTRATION_NOTIFICATION are used to determine which MBeans are candidate JBoss service MBeans. The order of MBean registration is used as the order of service initialization and startup. The ServiceControl MBean has four key methods: init, start, stop and destroy.</para> + <section> + <title>The init Method</title> + <para>The ServiceControl <function>init</function> method is called by the JBoss server main entry point after the jboss.jcml configuration has been loaded. The process of loading the jboss.jcml file will have caused the names of all loaded MBeans to have been registered with the ServiceControl MBean due to the registration events posted by the MBeanServer. The <function>init</function> method makes a copy of curent list of MBean names and then proceeds to invoke the <function>init</function> method on each MBean. If successful, the ServiceControl MBean then registers as an NotificationListener on the MBean's name to receive AttributeChangeNotification from the MBean. The order of initialization is the order of registration which is the same as the ordering of mbean entries in the jboss.jcml file.</para> + </section> + <section> + <title>The start Method</title> + <para>The ServiceControl <function>start</function> method is called by the JBoss server main entry point after the <function>init</function> method. The <function>start</function> method makes a copy of curent list of MBean names and then proceeds to invoke the <function>start</function> method on each MBean.</para> + </section> + <section> + <title>The stop Method</title> + <para>The <function>stop</function> method is invoked by the by the JBoss server shutdown process which is managed by the org.jboss.util.Shutdown MBean. The <function>stop</function> method makes a copy of the current list of MBean names and then invokes the <function>stop</function> method on each MBean in reverse order.</para> + </section> + <section> + <title>The destroy Method</title> + <para>The <function>destroy</function> method is invoked by the by the JBoss server shutdown process after the <function>stop</function> method. The <function>destroy</function> method makes a copy of the current list of MBean names and then invokes the <function>destroy</function> method on each MBean in reverse order.</para> + </section> + </section> </section> <section> <title>Writing JBoss MBean Services</title> - <para/> + <para>Writing a custom service that integrates into the JBoss server requires the use of the org.jboss.util.Service interface pattern if the custom service is depdendent on other JBoss services. This means that you cannot perform any JBoss service dependent intialization in any of the javax.management.MBeanRegistration interface methods. Instead, you must do this in the Service interface <function>init</function> and/or <function>start</function> methods. You need to do one of the following:</para> + <itemizedlist> + <listitem> + <para>Add any of the Service methods that you want called on your MBean to your MBean interface.</para> + </listitem> + <listitem> + <para>Have your MBean interface extend the org.jboss.util.Service interface.</para> + </listitem> + <listitem> + <para>Have your MBean interface extend the org.jboss.util.ServiceMBean interface. This is a subinterface of org.jboss.util.Service that adds <function>String getName()</function>, <function>int getState()</function>, and <function>String getStateString()</function> methods.</para> + </listitem> + </itemizedlist> + <para>Which approach you choose depends on whether or not you want to be associated with JBoss specific code. If you don't, then you would use the first approach. If you don't mind, then the simplest approach is to have your MBean interface extend from org.jboss.util.ServiceMBean and your MBean implementation class extend from the abstract org.jboss.util.ServiceMBeanSupport class. This class implements the org.jboss.util.ServiceMBean interface except for the <function>String getName()</function> method. ServiceMBeanSupport provides implementations of the init, start, stop and destroy methods that integrate logging and JBoss service state management. Each method delegates any subclass specific work to initService, startService, stopService, and destroyService methods respectively. When subclassing ServiceMBeanSupport you would override one or more of the initService, startService, stopService, and destroyService methods in addition to getName as required.</para> </section> </section> _______________________________________________ Jboss-development mailing list [EMAIL PROTECTED] http://lists.sourceforge.net/lists/listinfo/jboss-development