JBoss.org Community Documentation
JBoss manages the deployment of its MBean services via a custom MBean that loads an XML variation of the standard JMX MLet configuration file. This custom MBean is implemented in the org.jboss.deployment.SARDeployer
class. The SARDeployer
MBean is loaded when JBoss starts up as part of the bootstrap process. The SAR acronym stands for
service archive
.
The SARDeployer
handles services archives. A service archive can be either a jar that ends with a .sar
suffix and contains a META-INF/jboss-service.xml
descriptor, or a standalone XML descriptor with a naming pattern that matches *-service.xml
. The DTD for the service descriptor is jboss-service_5.0.dtd
and is shown in Figure 3.15, “The DTD for the MBean service descriptor parsed by the SARDeployer”.
The elements of the DTD are:
loader-repository
: This element specifies the name of the UnifiedLoaderRepository
MBean to use for the SAR to provide SAR level scoping of classes deployed in the sar. It is a unique JMX ObjectName
string. It may also specify an arbitrary configuration by including a loader-repository-config
element. The optional loaderRepositoryClass
attribute specifies the fully qualified name of the loader repository implementation class. It defaults to org.jboss.mx.loading.HeirachicalLoaderRepository3
.
loader-repository-config
: This optional element specifies an arbitrary configuration that may be used to configure the loadRepositoryClass
. The optional configParserClass
attribute gives the fully qualified name of the org.jboss.mx.loading.LoaderRepositoryFactory.LoaderRepositoryConfigParser
implementation to use to parse the loader-repository-config
content.
local-directory
: This element specifies a path within the deployment archive that should be copied to the server/<config>/db
directory for use by the MBean. The path attribute is the name of an entry within the deployment archive.
classpath
: This element specifies one or more external JARs that should be deployed with the MBean(s). The optional archives attribute specifies a comma separated list of the JAR names to load, or the *
wild card to signify that all jars should be loaded. The wild card only works with file URLs, and http URLs if the web server supports the WEBDAV protocol. The codebase attribute specifies the URL from which the JARs specified in the archive attribute should be loaded. If the codebase is a path rather than a URL string, the full URL is built by treating the codebase value as a path relative to the JBoss distribution server/<config>
directory. The order of JARs specified in the archives as well as the ordering across multiple classpath element is used as the classpath ordering of the JARs. Therefore, if you have patches or inconsistent versions of classes that require a certain ordering, use this feature to ensure the correct ordering.
mbean
: This element specifies an MBean service. The required code attribute gives the fully qualified name of the MBean implementation class. The required name attribute gives the JMX ObjectName
of the MBean. The optional xmbean-dd
attribute specifies the path to the XMBean resource if this MBean service uses the JBoss XMBean descriptor to define a Model MBean management interface.
constructor
: The constructor
element defines a non-default constructor to use when instantiating the MBean The arg
element specify the constructor arguments in the order of the constructor signature. Each arg
has a type
and value
attribute.
attribute
: Each attribute element specifies a name/value pair of the attribute of the MBean. The name of the attribute is given by the name attribute, and the attribute element body gives the value. The body may be a text representation of the value, or an arbitrary element and child elements if the type of the MBean attribute is org.w3c.dom.Element
. For text values, the text is converted to the attribute type using the JavaBean java.beans.PropertyEditor
mechanism.
server/mbean/depends
and
server/mbean/depends-list
: these elements specify a dependency from the MBean using the element to the MBean(s) named by the depends
or depends-list
elements. Section 3.4.2.4, “Specifying Service Dependencies”. Note that the dependency value can be another mbean element which defines a nested mbean.
MBean attribute values don't need to be hardcoded literal strings. Service files may contain references to system properties using the ${name}
notation, where name
is the name of a Java system property. The value of this system property, as would be returned from the call System.getProperty("name")
. Multiple properties can be specified separated by commas like ${name1,name2,name3}
. If there is no system property named name1
, name2
will be tried and then name3
. This allows multiple levels of substitution to be used. Finally, a default value can be added using a colon separator. The substitution ${name:default value}
would substitute the the text "default value
" if the system property name
didn't exist. If none of the listed properties exist and no default value is given, no substitution will occur.
When the SARDeployer
is asked to deploy a service performs several steps. Figure 3.16, “A sequence diagram highlighting the main activities performed by the SARDeployer to start a JBoss MBean service” is a sequence diagram that shows the init through start phases of a service.
Figure 3.16. A sequence diagram highlighting the main activities performed by the SARDeployer to start a JBoss MBean service
In Figure 3.16, “A sequence diagram highlighting the main activities performed by the SARDeployer to start a JBoss MBean service” the following is illustrated:
Methods prefixed with 1.1 correspond to the load and parse of the XML service descriptor.
Methods prefixed with 1.2 correspond to processing each classpath element in the service descriptor to create an independent deployment that makes the jar or directory available through a UnifiedClassLoader
registered with the unified loader repository.
Methods prefixed with 1.3 correspond to processing each local-directory
element in the service descriptor. This does a copy of the SAR elements specified in the path attribute to the server/<config>/db
directory.
Method 1.4. Process each deployable unit nested in the service a child deployment is created and added to the service deployment info subdeployment list.
Method 2.1. The UnifiedClassLoader
of the SAR deployment unit is registered with the MBean Server so that is can be used for loading of the SAR MBeans.
Method 2.2. For each MBean element in the descriptor, create an instance and initialize its attributes with the values given in the service descriptor. This is done by calling the ServiceController.install
method.
Method 2.4.1. For each MBean instance created, obtain its JMX ObjectName
and ask the ServiceController to handle the create step of the service life cycle. The ServiceController
handles the dependencies of the MBean service. Only if the service's dependencies are satisfied is the service create method invoked.
Methods prefixed with 3.1 correspond to the start of each MBean service defined in the service descriptor. For each MBean instance created, obtain its JMX ObjectName and ask the ServiceController
to handle the start step of the service life cycle. The ServiceController
handles the dependencies of the MBean service. Only if the service's dependencies are satisfied is the service start method invoked.