<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body link="#355491" alink="#4262a1" vlink="#355491" style="background: #e2e2e2; margin: 0; padding: 20px;">
<div>
        <table cellpadding="0" bgcolor="#FFFFFF" border="0" cellspacing="0" style="border: 1px solid #dadada; margin-bottom: 30px; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                <tbody>
                        <tr>
                                <td>
                                        <table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="border: solid 2px #ccc; background: #dadada; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                                                <tbody>
                                                        <tr>
                                                                <td bgcolor="#000000" valign="middle" height="58px" style="border-bottom: 1px solid #ccc; padding: 20px; -moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 5px; -webkit-border-top-left-radius: 5px;">
                                                                        <h1 style="color: #333333; font: bold 22px Arial, Helvetica, sans-serif; margin: 0; display: block !important;">
                                                                        <!-- To have a header image/logo replace the name below with your img tag -->
                                                                        <!-- Email clients will render the images when the message is read so any image -->
                                                                        <!-- must be made available on a public server, so that all recipients can load the image. -->
                                                                        <a href="http://community.jboss.org/index.jspa" style="text-decoration: none; color: #E1E1E1">JBoss Community</a></h1>
                                                                </td>
                                                        </tr>
                                                        <tr>
                                                                <td bgcolor="#FFFFFF" style="font: normal 12px Arial, Helvetica, sans-serif; color:#333333; padding: 20px; -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 5px; -webkit-border-bottom-left-radius: 5px;"><h3 style="margin: 10px 0 5px; font-size: 17px; font-weight: normal;">
Detyped Description of the AS 7 Management Model
</h3>
<span style="margin-bottom: 10px;">
modified by <a href="http://community.jboss.org/people/brian.stansberry">Brian Stansberry</a> in <i>JBoss AS7 Development</i> - <a href="http://community.jboss.org/docs/DOC-16317">View the full document</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">
<div class="jive-rendered-content"><p>AS 7's management API will naturally include the ability for clients to query the management system to discover meta-information about the management model; i.e. what resources are available and what attributes and operations they expose. These details will be returned in a detyped form, either using the <a class="jive-link-external-small" href="https://github.com/jbossas/jboss-dmr">jboss-dmr library</a> or JSON. (A JMX interface based on open mbeans will also be provided; most concepts in this article map naturally to JMX.) The purpose of this article is to describe the detyped representation of the API.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>Readers are encouraged to look at the example detyped descriptions of parts of the management API at the bottom before reading the details.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>Before getting into the details of the meta-information, first a couple quick examples on how to access it.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><h5>Reading Management Model Descriptions via the raw Management API</h5><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>The client must have maven artifact org.jboss.as:jboss-as-controller-client and its dependencies on the classpath.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>1) Create a management client that can connect to your target process's native management socket (which can be an individual standalone mode server, or, in a domain mode environment, the Domain Controller or any Host Controller:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><pre class="jive-pre"><code class="jive-code jive-java">ModelControllerClient client = ModelControllerClient.Factory.create(InetAddress.getByName(<font color="red">"localhost"</font>), 9999);
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>The address and port are what is configured in the target process' <management-apis><native-api.../> element.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>2) Create an operation request object using the org.jboss.dmr.ModelNode class:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><pre class="jive-pre"><code class="jive-code jive-java">ModelNode op = <font color="navy"><b>new</b></font> ModelNode();
op.get(<font color="red">"operation"</font>).set(<font color="red">"read-resource-description"</font>);
op.get(<font color="red">"recursive"</font>).set(<font color="navy"><b>true</b></font>);
op.get(<font color="red">"operations"</font>).set(<font color="navy"><b>true</b></font>);
ModelNode address = op.get(<font color="red">"address"</font>);
address.add(<font color="red">"subsystem"</font>, <font color="red">"web"</font>);
address.add(<font color="red">"connector"</font>, <font color="red">"http"</font>);
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>See  <a class="jive-link-wiki-small" href="http://community.jboss.org/docs/DOC-16336">http://community.jboss.org/docs/DOC-16336</a> for basic background on the format of an operation request. The key thing here is we are executing the "read-resource-description" operation. That operation can be targetted at any address in the management model; here we are targetting it at the resource for the web subsystem's http connector.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>The request includes two optional parameters:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><ul><li><span style="font-family: courier new,courier;">recursive</span> -- true means you want the description of child resources under this resource. Default is false</li><li><span style="font-family: courier new,courier;">operations</span> -- true means you want the description of operations exposed by the resource to be included. Default is false.</li></ul><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>3) Execute the operation and manipulate the result:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><pre class="jive-pre"><code class="jive-code jive-java">ModelNode returnVal = client.execute(op);
System.out.println(returnVal.get(<font color="red">"result"</font>).toString());
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>See <a class="jive-link-wiki-small" href="http://community.jboss.org/docs/DOC-16354">http://community.jboss.org/docs/DOC-16354</a> for general details on the structure of the "returnVal" ModelNode.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><h5>Reading Management Model Descriptions via the CLI</h5><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>See <a class="jive-link-wiki-small" href="http://community.jboss.org/docs/DOC-16581">http://community.jboss.org/docs/DOC-16581</a> for basics on using the CLI.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>Once you've launched the CLI the syntax for the command shown above would be:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><pre class="jive-pre"><code class="jive-code">[localhost:9999 /] /subsystem=web/connector=http:read-resource-description(recursive=true,operations=true)</code></pre><h3></h3><h3>Description of addressable portions of the management model</h3><p>All portions of the management model exposed by AS 7 are addressable via an ordered list of key/value pairs. For each addressable portion of the model, the following descriptive information will be available:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><ul><li><span style="font-family: courier new,courier;">description</span> -- String -- text description of this portion of the model</li><li><span style="font-family: courier new,courier;">head-comment-allowed</span> -- boolean -- indicates whether this portion of the model can store an XML comment that would be written in the persistent form of the model (e.g. domain.xml) before the start of the XML element that represents this portion of the model. This item is optional, and if not present defaults to <span style="font-family: courier new,courier;">true</span>. <em><strong>(Note: storing XML comments in the in-memory model is not currently supported and likely will not be supported in AS 7.1. This description key is for future use.)</strong></em></li><li><span style="font-family: courier new,courier;">tail-comment-allowed</span> -- boolean -- similar to <span style="font-family: courier new,courier;">head-comment-allowed, <span style="font-family: arial,helvetica,sans-serif;">but indicates whether a comment just before the close of the XML element is supported. A tail comment can only be supported if the element has child elements, in which case a comment can be inserted between the final child element and the element's closing tag.</span></span> This item is optional, and if not present defaults to <span style="font-family: courier new,courier;">true</span>. <em><strong>(Note: storing XML comments in the in-memory model is not currently supported and likely will not be supported in AS 7.1. This description key is for future use.)</strong></em></li><li><span style="font-family: courier new,courier;">attributes <span style="font-family: arial,helvetica,sans-serif;">-- Map of String (the attribute name) to complex structure -- the configuration attributes available in this portion of the model. See below for the representation of each attribute.</span></span></li><li><span style="font-family: arial,helvetica,sans-serif;"><span style="font-family: courier new,courier;">operations</span> -- </span><span style="font-family: arial,helvetica,sans-serif;">Map of String (the operation name) to complex structure -- the operations that can be targetted at this address. See below for the representation of each operation.</span></li><li><span style="font-family: arial,helvetica,sans-serif;"><span style="font-family: courier new,courier;">children</span> -- Map of String (the type of child) to complex structure -- the relationship of this portion of the model to other addressable portions of the model. See below for the representation of each child relationship.<br/></span></li></ul><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><pre class="jive-pre"><code class="jive-code">{
     "description => "A managable resource",
     "tail-comment-allowed" => false,
     "attributes" => {
          "foo" => {
               .... details of attribute foo
          }
      },
     "operations" => {
          "start" => {
               .... details of the start operation
          }
      },
     "children" => {
          "bar" => {
               .... details of the relationship with children of type "bar"
          }
      }
}
</code></pre><h4>Description of an Attribute</h4><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>An attribute is a portion of the management model that is not directly addressable. Instead, it is conceptually a property of an addressable part of the model. For each attribute portion of the model, the following descriptive information will be available:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><ul><li><span style="font-family: courier new,courier;">description</span> -- String -- text description of the attribute</li><li><span style="font-family: courier new,courier;">type</span> -- org.jboss.dmr.ModelType -- the type of the attribute value. One of the enum values BIG_DECIMAL, BIG_INTEGER, BOOLEAN, BYTES, DOUBLE, INT, LIST, LONG, OBJECT, PROPERTY, STRING. Most of these are self-explanatory. An OBJECT will be represented in the detyped model as a map of string keys to values of some other legal type, conceptually similar to a javax.management.openmbean.CompositeData. A PROPERTY is a single key/value pair, where the key is a string, and the value is of some other legal type.</li><li><span style="font-family: courier new,courier;">value-type</span> -- ModelType or complex structure -- Only present if <span style="font-family: courier new,courier;">type<span style="font-family: arial,helvetica,sans-serif;"> is </span>LIST</span> or <span style="font-family: courier new,courier;">OBJECT<span style="font-family: arial,helvetica,sans-serif;">. If </span></span><span style="font-family: courier new,courier;">type<span style="font-family: arial,helvetica,sans-serif;"> is </span>LIST</span> or all the values of the <span style="font-family: courier new,courier;">OBJECT </span>type are of the same type<span style="font-family: arial,helvetica,sans-serif;">, t</span><span style="font-family: arial,helvetica,sans-serif;">his will be one of the ModelType enums  </span>BIG_DECIMAL, BIG_INTEGER, BOOLEAN, BYTES, DOUBLE, INT,  LONG, STRING. Otherwise, <span style="font-family: courier new,courier;">value-type <span style="font-family: arial,helvetica,sans-serif;">will detail the structure of the attribute value, enumerating the value's fields and the type of their value.</span></span></li><li><span style="font-family: arial,helvetica,sans-serif;"><span style="font-family: courier new,courier;">expressions-allowed</span> -- boolean -- indicates whether the value of the attribute may be of type ModelType.EXPRESSION, instead of its standard type (see <span style="font-family: courier new,courier;">type</span> and <span style="font-family: courier new,courier;">value-type</span> above for discussion of an attribute's standard type.) A value of ModelType.EXPRESSION contains a system-property substitution expression that the server will resolve against the <em>server-side</em> system property map before using the value. For example, an attribute named <span style="font-family: courier new,courier;">max-threads</span> may have an expression value of <span style="font-family: courier new,courier;">${example.pool.max-threads:10}</span> instead of just <span style="font-family: courier new,courier;">10</span>. </span><span style="font-family: arial,helvetica,sans-serif;">Default value if not present is <span style="font-family: courier new,courier;">false</span>.</span></li><li><span style="font-family: arial,helvetica,sans-serif;"><span style="font-family: courier new,courier;">required</span> -- boolean -- <span style="font-family: courier new,courier;">true</span> if the attribute will always exist in a representation of its portion of the model; <span style="font-family: courier new,courier;">false</span> if it may not (implying a null value.) If not present, <span style="font-family: courier new,courier;">true</span> is the default.</span></li><li><span style="font-family: arial,helvetica,sans-serif;"><span style="font-family: courier new,courier;">storage</span> -- String -- Either "<span style="font-family: courier new,courier;">configuration</span>" or "<span style="font-family: courier new,courier;">runtime</span>". If </span><span style="font-family: arial,helvetica,sans-serif;">"<span style="font-family: courier new,courier;">configuration</span>" it means the attribute's value is stored as part of the persistent configuration (e.g. in domain.xml, host.xml or standalone.xml.) If </span><span style="font-family: arial,helvetica,sans-serif;">"<span style="font-family: courier new,courier;">runtime</span>" the attribute's value is not stored in the persistent configuration; the value only exists as long as the resource is running.</span></li><li><span style="font-family: courier new,courier;">access-type</span> -- String -- One of "<span style="font-family: courier new,courier;">read-only</span>", "<span style="font-family: courier new,courier;">read-write</span>" or "<span style="font-family: courier new,courier;">metric</span>". Whether an attribute value can be written, or can only read. A "<span style="font-family: courier new,courier;">metric</span>" is a read-only attribute whose value is not stored in the persistent configuration, and whose value may change due to activity on the server. If an attribute is "<span style="font-family: courier new,courier;">read-write</span>", the resource will expose an operation named "<span style="font-family: courier new,courier;">write-attribute</span>" whose "<span style="font-family: courier new,courier;">name</span>" parameter will accept this attribute's name and whose "<span style="font-family: courier new,courier;">value</span>" parameter will accept a valid value for this attribute. That operation will be the standard means of updating this attribute's value.</li><li><span style="font-family: courier new,courier;">restart-required</span> -- String -- One of "<span style="font-family: courier new,courier;">no-services</span>", "<span style="font-family: courier new,courier;">all-services</span>", "<span style="font-family: courier new,courier;">resource-services</span>" or "<span style="font-family: courier new,courier;">jvm</span>". Only relevant to attributes whose access-type is read-write. Indicates whether execution of a <span style="font-family: courier new,courier;">write-attribute</span> operation whose <span style="font-family: courier new,courier;">name</span> parameter specifies this attribute requires a restart of services (or an entire JVM) in order for the change to take effect in the runtime . See discussion of "Applying Updates to Runtime Services" below.  Default value is "<span style="font-family: courier new,courier;">no-services</span>".</li><li><span style="font-family: courier new,courier;">alternatives</span> -- List of string -- Indicates an exclusive relationship between attributes. If this attribute is defined, the other attributes listed in this descriptor's value should be undefined (even if their <span style="font-family: courier new,courier;">required</span> descriptor says <span style="font-family: courier new,courier;">true</span>; i.e. the presence of this attribute satisfies the requirement.) Default is undefined; i.e. this does not apply to most attributes.</li><li><span style="font-family: courier new,courier;">requires</span> -- List of string -- Indicates that if this attribute has a value (other than undefined), the other attributes listed in this descriptor's value must also have a value, even if their <span style="font-family: courier new,courier;">required</span> descriptor says <span style="font-family: courier new,courier;">false</span>. This would typically be used in conjunction with <span style="font-family: courier new,courier;">alternatives<span style="font-family: arial,helvetica,sans-serif;">. For example,</span></span><span style="font-family: arial,helvetica,sans-serif;"> </span>attributes "a" and "b" are required, but are alternatives to each other; "c" and "d" are optional. But "b" requires "c" and "d", so if "b" is used, "c" and "d" must also be defined. Default is undefined; i.e. this does not apply to most attributes.</li><li><span style="font-family: courier new,courier;">head-comment-allowed</span> -- boolean -- indicates whether the model can store an XML comment that would be written in the persistent form of the model (e.g. domain.xml) before the start of the XML element that represents this attribute. This item is optional, and if not present defaults to <span style="font-family: courier new,courier;"><strong>false</strong></span>. (This is a different default from is used for an addressable portion of the model, since model attributes often map to XML attributes, which don't allow comments.) <em><strong>(Note: storing XML comments in the in-memory model is not currently supported and likely will not be supported in AS 7.1. This description key is for future use.)</strong></em></li><li><span style="font-family: courier new,courier;">tail-comment-allowed</span> -- boolean -- similar to <span style="font-family: courier new,courier;">head-comment-allowed, <span style="font-family: arial,helvetica,sans-serif;">but indicates whether a comment just before the close of the XML element is supported. A tail comment can only be supported if the element has child elements, in which case a comment can be inserted between the final child element and the element's closing tag.</span></span> This item is optional, and if not present defaults to <span style="font-family: courier new,courier;"><strong>false</strong></span>. (This is a different default from is used for an addressable portion of the model, since model attributes often map to XML attributes, which don't allow comments.) <em><strong>(Note: storing XML comments in the in-memory model is not currently supported and likely will not be supported in AS 7.1. This description key is for future use.)</strong></em></li><li><span style="font-family: arial,helvetica,sans-serif;">arbitrary key/value pairs that further describe the attribute value, e.g. <span style="font-family: courier new,courier;">"max" => 2</span></span><span style="font-family: arial,helvetica,sans-serif;"><span style="font-family: arial,helvetica,sans-serif;">. </span>See "Arbitrary Descriptors" below. </span><span style="font-family: courier new,courier;"> </span></li></ul><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><pre class="jive-pre"><code class="jive-code">"foo" => {
     "description" => "The foo",
     "type" => INT,
     "max" => 2
}
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><pre class="jive-pre"><code class="jive-code">"bar" => {
     "description" => "The bar",
     "type" => OBJECT,
     "value-type" => {
          "size" => INT,
          "color" => STRING
     }
}
</code></pre><h3>Description of an Operation</h3><p>An addressable portion of the model may have operations associated with it. The description of an operation will include the following information:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><ul><li><span style="font-family: courier new,courier;">operation-name</span> -- String -- the name of the operation</li><li><span style="font-family: courier new,courier;">description</span> -- String -- text description of the operation</li><li><span style="font-family: courier new,courier;">request-properties</span> -- Map of String to complex structure -- description of the parameters of the operation. Keys are the names of the parameters, values are descriptions of the parameter value types. See below for details on the description of parameter value types.</li><li><span style="font-family: courier new,courier;">reply-properties</span> -- complex structure, or empty -- description of the return value of the operation, with an empty node meaning void.</li><li><span style="font-family: courier new,courier;">restart-required</span> -- String -- One of "<span style="font-family: courier new,courier;">no-services</span>", "<span style="font-family: courier new,courier;">all-services</span>", "<span style="font-family: courier new,courier;">resource-services</span>" or "<span style="font-family: courier new,courier;">jvm</span>". Indicates whether the operation makes a configuration change that requires a restart of services (or an entire JVM) in order for the change to take effect in the runtime. See discussion of "Applying Updates to Runtime Services" below.  Default value is "<span style="font-family: courier new,courier;">no-services</span>".</li></ul><h4>Description of an Operation Parameter or Return Value</h4><ul><li><span style="font-family: courier new,courier;">description</span> -- String -- text description of the parameter or return value</li><li><span style="font-family: courier new,courier;">type</span> -- org.jboss.dmr.ModelType -- the type of the parameter or return value. One of the enum values BIG_DECIMAL, BIG_INTEGER, BOOLEAN, BYTES, DOUBLE, INT, LIST, LONG, OBJECT, PROPERTY, STRING.</li><li><span style="font-family: courier new,courier;">value-type</span> -- ModelType or complex structure -- Only present if <span style="font-family: courier new,courier;">type<span style="font-family: arial,helvetica,sans-serif;"> is </span>LIST</span> or <span style="font-family: courier new,courier;">OBJECT<span style="font-family: arial,helvetica,sans-serif;">. If </span></span><span style="font-family: courier new,courier;">type<span style="font-family: arial,helvetica,sans-serif;"> is </span>LIST</span> or all the values of the <span style="font-family: courier new,courier;">OBJECT </span>type are of the same type<span style="font-family: arial,helvetica,sans-serif;">, t</span><span style="font-family: arial,helvetica,sans-serif;">his will be one of the ModelType enums  </span>BIG_DECIMAL, BIG_INTEGER, BOOLEAN, BYTES, DOUBLE, INT, LIST, LONG, PROPERTY, STRING. Otherwise, <span style="font-family: courier new,courier;">value-type <span style="font-family: arial,helvetica,sans-serif;">will detail the structure of the attribute value, enumerating the value's fields and the type of their value.</span></span></li><li><span style="font-family: courier new,courier;">value-type</span> -- ModelType or complex structure -- Only present if <span style="font-family: courier new,courier;">type<span style="font-family: arial,helvetica,sans-serif;"> is </span>LIST</span> or <span style="font-family: courier new,courier;">OBJECT<span style="font-family: arial,helvetica,sans-serif;">. If </span></span><span style="font-family: courier new,courier;">type<span style="font-family: arial,helvetica,sans-serif;"> is </span>LIST</span> or all the values of the <span style="font-family: courier new,courier;">OBJECT </span>type are of the same type<span style="font-family: arial,helvetica,sans-serif;">, t</span><span style="font-family: arial,helvetica,sans-serif;">his will be one of the ModelType enums  </span>BIG_DECIMAL, BIG_INTEGER, BOOLEAN, BYTES, DOUBLE, INT,  LONG, STRING. Otherwise, <span style="font-family: courier new,courier;">value-type <span style="font-family: arial,helvetica,sans-serif;">will detail the structure of the attribute value, enumerating the value's fields and the type of their value.</span></span></li><li><span style="font-family: arial,helvetica,sans-serif;"><span style="font-family: courier new,courier;">expressions-allowed</span> -- boolean -- indicates whether the value of the </span>the parameter or return value<span style="font-family: arial,helvetica,sans-serif;"> may be of type ModelType.EXPRESSION, instead its standard type (see <span style="font-family: courier new,courier;">type</span> and <span style="font-family: courier new,courier;">value-type</span> above for discussion of the standard type.) A value of ModelType.EXPRESSION contains a system-property substitution expression that the server will resolve against the <em>server-side</em> system property map before using the value. For example, a parameter named <span style="font-family: courier new,courier;">max-threads</span> may have an expression value of <span style="font-family: courier new,courier;">${example.pool.max-threads:10}</span> instead of just <span style="font-family: courier new,courier;">10</span>. Default value if not present is <span style="font-family: courier new,courier;">false</span>.</span></li><li><span style="font-family: arial,helvetica,sans-serif;"><span style="font-family: courier new,courier;">required</span> -- boolean -- Only relevant to parameters. <span style="font-family: courier new,courier;">true</span> if the parameter must be present in the request object used to invoke the operation; <span style="font-family: courier new,courier;">false</span> if it can omitted. If not present, <span style="font-family: courier new,courier;">true</span> is the default.</span></li><li><span style="font-family: arial,helvetica,sans-serif;"><span style="font-family: courier new,courier;">nillable</span> -- boolean -- </span><span style="font-family: arial,helvetica,sans-serif;"><span style="font-family: courier new,courier;">true</span> if null is a valid value.  </span><span style="font-family: arial,helvetica,sans-serif;">If not present, <span style="font-family: courier new,courier;">false</span> is the default.</span></li><li><span style="font-family: courier new,courier;">restart-required</span> -- String -- One of "<span style="font-family: courier new,courier;">no-services</span>", "<span style="font-family: courier new,courier;">all-services</span>", "<span style="font-family: courier new,courier;">resource-services</span>" or "<span style="font-family: courier new,courier;">jvm</span>". Only relevant to attributes whose access-type is read-write. Indicates whether execution of a <span style="font-family: courier new,courier;">write-attribute</span> operation whose <span style="font-family: courier new,courier;">name</span> parameter specifies this attribute requires a restart of services (or an entire JVM) in order for the change to take effect in the runtime . See discussion of "Applying Updates to Runtime Services" below.  Default value is "<span style="font-family: courier new,courier;">no-services</span>".</li><li><span style="font-family: courier new,courier;">alternatives</span> -- List of string -- Indicates an exclusive relationship between parameters. If this attribute is defined, the other parameters listed in this descriptor's value should be undefined (even if their <span style="font-family: courier new,courier;">required</span> descriptor says <span style="font-family: courier new,courier;">true</span>; i.e. the presence of this parameter satisfies the requirement.) Default is undefined; i.e. this does not apply to most parameters.</li><li><span style="font-family: courier new,courier;">requires</span> -- List of string -- Indicates that if this parameter has a value (other than undefined), the other parameters listed in this descriptor's value must also have a value, even if their <span style="font-family: courier new,courier;">required</span> descriptor says <span style="font-family: courier new,courier;">false</span>. This would typically be used in conjunction with <span style="font-family: courier new,courier;">alternatives<span style="font-family: arial,helvetica,sans-serif;">. For example,</span></span><span style="font-family: arial,helvetica,sans-serif;"> </span>parameters "a" and "b" are required, but are alternatives to each other; "c" and "d" are optional. But "b" requires "c" and "d", so if "b" is used, "c" and "d" must also be defined. Default is undefined; i.e. this does not apply to most parameters.</li><li><span style="font-family: arial,helvetica,sans-serif;">arbitrary key/value pairs that further describe the attribute value, e.g. <span style="font-family: courier new,courier;">"max" =>2<span style="font-family: arial,helvetica,sans-serif;">. </span></span>See "Arbitrary Descriptors" below. </span></li></ul><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><pre class="jive-pre"><code class="jive-code">{
     "operation-name" => "incrementFoo",
     "description" => "Increase the value of the 'foo' attribute by the given amount",
     "request-properties" => {
          "increment" => {
               "type" => INT,
               "description" => "The amount to increment",
               "required" => true
     }},
     "reply-properties" => {
               "type" => INT,
               "description" => "The new value",
     }
}
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><pre class="jive-pre"><code class="jive-code">{
     "operation-name" => "start",
     "description" => "Starts the thing",
     "request-properties" => {},
     "reply-properties" => {}
}
</code></pre><h2>Arbitrary Descriptors</h2><p>The description of an attribute, operation parameter or operation return value type can include arbitrary key/value pairs that provide extra information. Whether a particular key/value pair is present depends on the context, e.g. a pair with key "max" would probably only occur as part of the description of some numeric type.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>Following are standard keys and their expected value type. If descriptor authors want to add an arbitrary key/value pair to some descriptor and the semantic matches the meaning of one of the following items, the standard key/value type must be used.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><ul><li><span style="font-family: courier new,courier;">min</span> -- int -- the minimum value of some numeric type. The absence of this item implies there is no minimum value.</li><li><span style="font-family: courier new,courier;">max</span> -- int -- the maximum value of some numeric type. The absence of this item implies there is no maximum value.</li><li><span style="font-family: courier new,courier;">min-length</span> -- int -- the minimum length of some string, list or byte[] type. The absence of this item implies a minimum length of zero.</li><li><span style="font-family: courier new,courier;">max-length</span> -- int -- the maximum length of some string, list or byte[]. The absence of this item implies there is no maximum value.</li><li><span style="font-family: courier new,courier;">nillable</span> -- boolean -- whether null is a legal value. The absence of this item implies false; i.e. null is not a legal value.</li><li><span style="font-family: courier new,courier;">allowed</span> -- List -- a list of legal values. The type of the elements in the list should match the type of the attribute.</li><li><span style="font-family: courier new,courier;">default</span> -- the default value for the attribute if not present in the model</li><li><span style="font-family: courier new,courier;">unit</span> - The unit of the value - e.g. ns, ms, s, m, h, KB, MB, TB. See <strong>Measurement Units</strong> below.</li></ul><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><h4>Measurement Units</h4><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>Wherever possible, the description of an attribute, operation parameter or operation return value should include the unit arbitrary descriptor. Valid values for this descriptor are:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>// Simple Unit Types </p><p>NONE</p><p>PERCENTAGE</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>// Absolute Sizes in Bytes (utilization)</p><p>BYTES</p><p>KILOBYTES</p><p>MEGABYTES</p><p>GIGABYTES</p><p>TERABYTES</p><p>PETABYTES</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>// Absolute Sizes in Bits (throughput)</p><p>BITS</p><p>KILOBITS</p><p>MEGABITS</p><p>GIGABITS</p><p>TERABITS</p><p>PETABITS</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>// Absolute Time - no display, only hints to the UI how to display</p><p>EPOCH_MILLISECONDS</p><p>EPOCH_SECONDS</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>// Relative Time</p><p>JIFFYS</p><p>NANOSECONDS</p><p>MICROSECONDS</p><p>MILLISECONDS</p><p>SECONDS</p><p>MINUTES</p><p>HOURS</p><p>DAYS</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>// Rate</p><p>PER_JIFFY</p><p>PER_NANOSECOND</p><p>PER_MICROSECOND</p><p>PER_MILLISECOND</p><p>PER_SECOND</p><p>PER_MINUTE</p><p>PER_HOUR</p><p>PER_DAY</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>// Temperature</p><p>CELSIUS</p><p>KELVIN</p><p>FAHRENHEIGHT</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>Legal values are listed in the <a class="jive-link-external-small" href="https://github.com/jbossas/jboss-as/blob/master/controller-client/src/main/java/org/jboss/as/controller/client/helpers/MeasurementUnit.java">MeasurementUnit enum</a>. This enum is in the controller-client package, and is thus usable by java-based management clients.</p><h2>Description of Parent/Child Relationships</h2><p>The address used to target an addressable portion of the model must be an ordered list of key value pairs. The effect of this requirement is the addressable portions of the model naturally form a tree structure, with parent nodes in the tree defining what the valid keys are and the children defining what the valid values are. The parent node also defines the cardinality of the relationship. The description of the parent node includes a children element that describes these relationships:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><pre class="jive-pre"><code class="jive-code">{
     ....
     "children" => {
          "connector" => {
               .... description of the relationship with children of type "connector"
          },
          "virtual-host" => {
               .... description of the relationship with children of type "virtual-host"
          }
}
</code></pre><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>The description of each relationship will include the following elements:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><ul><li><span style="font-family: courier new,courier;">description</span> -- String -- text description of the relationship</li><li><span style="font-family: courier new,courier;">min-occurs</span> -- int, either 0 or 1 -- Minimum number of children of this type that must exist in a valid model. If not present, the default value is 0.</li><li><span style="font-family: courier new,courier;">max-occurs</span> -- int -- Maximum number of children of this type that may exist in a valid model. If not present, the default value is Integer.MAX_VALUE, i.e. there is no limit.</li><li><span style="font-family: courier new,courier;">allowed</span> -- List of strings -- legal values for children names. If not present, there is no restriction on children names.</li><li><span style="font-family: courier new,courier;">model-description</span> -- either "undefined" or a complex structure -- This is the full description of the child resource (its text description, attributes, operations, children) as detailed above. This may also be "undefined", i.e. a null value, if the query that asked for the parent node's description did not include the "<span style="font-family: courier new,courier;">recursive</span>" param set to <span style="font-family: courier new,courier;">true</span>.</li></ul><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>Example with if the <span style="font-family: courier new,courier;">recursive</span> flag was set to <span style="font-family: courier new,courier;">true</span>:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p><span style="font-family: courier new,courier;">{</span></p><p><span style="font-family: courier new,courier;">     "description" => "The connectors used to handle client connections",</span></p><p><span style="font-family: courier new,courier;">     "min-occurs" > 1,</span></p><p><span style="font-family: courier new,courier;">     "model-description" => {</span></p><p><span style="font-family: courier new,courier;">          "description" => "Handles client connections",</span></p><p><span style="font-family: courier new,courier;">          "attributes => {</span></p><p><span style="font-family: courier new,courier;">               ... details of children as documented above</span></p><p><span style="font-family: courier new,courier;">          },</span></p><p><span style="font-family: courier new,courier;">          "operations" => {</span></p><p><span style="font-family: courier new,courier;">               .... details of operations as documented above</span></p><p><span style="font-family: courier new,courier;">          },</span></p><p><span style="font-family: courier new,courier;">          "children" => {</span></p><p><span style="font-family: courier new,courier;">               .... details of the children's children</span></p><p><span style="font-family: courier new,courier;">          }</span></p><p><span style="font-family: courier new,courier;">     }</span></p><p><span style="font-family: courier new,courier;">}</span></p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>If the <span style="font-family: courier new,courier;">recursive</span> flag was <span style="font-family: courier new,courier;">false</span>:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p><span style="font-family: courier new,courier;">{</span></p><p><span style="font-family: courier new,courier;">     "description" => "The connectors used to handle client connections",</span></p><p><span style="font-family: courier new,courier;">     "min-occurs" > 1,</span></p><p><span style="font-family: courier new,courier;">     "model-description" => undefined</span></p><p><span style="font-family: courier new,courier;">}</span></p><h2>Applying Updates to Runtime Services</h2><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>An attribute or operation description may include a "<span style="font-family: courier new,courier;">restart-required</span>" descriptor; this section is an explanation of the meaning of that descriptor.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>An operation that changes a management resource's persistent configuration usually can also also affect a runtime service associated with the resource. For example, there is a runtime service associated with any host.xml or standalone.xml <span style="font-family: courier new,courier;"><interface></span> element; other services in the runtime depend on that service to provide the InetAddress associated with the interface. In many cases, an update to a resource's persistent configuration can be immediately applied to the associated runtime service. The runtime service's state is updated to reflect the new value(s).</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>However, in many cases the runtime service's state cannot be updated without restarting the service. Restarting a service can have broad effects. A restart of a service A will trigger a restart of other services B, C and D that depend A, triggering a restart of services that depend on B, C and D, etc. Those service restarts may very well disrupt handling of end-user requests.</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><p>Because restarting a service can be disruptive to end-user request handling, the handlers for management operations will not restart any service without some form of explicit instruction from the end user indicating a service restart is desired. In a few cases, simply executing the operation is an indication the user wants services to restart (e.g. a <span style="font-family: courier new,courier;">/host=master/server-config=server-one:restart</span> operation in a managed domain, or a <span style="font-family: courier new,courier;">/:reload</span> operation on a standalone server.) For al other cases, if an operation (or attribute write) cannot be performed without restarting a service, the metadata describing the operation or attribute will include a "<span style="font-family: courier new,courier;">restart-required</span>" descriptor whose value indicates what is necessary for the operation to affect the runtime:</p><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><ul><li style="text-align: start;"><span style="font-family: courier new,courier;">no-services</span> -- Applying the operation to the runtime does not require the restart of any services. This value is the default if the <span style="font-family: courier new,courier;">restart-required</span> descriptor is not present.</li><li style="text-align: start;"><span style="font-family: courier new,courier;">all-services</span> -- The operation can only immediately update the persistent configuration; applying the operation to the runtime will require a subsequent restart of all services in the affected VM. Executing the operation will put the server into a "reload-required" state. Until a restart of all services is performed the response to this operation and to any subsequent operation will include a response header <span style="font-family: courier new,courier;">"process-state" => "reload-required"</span>. For a standalone server, a restart of all services can be accomplished by executing the <span style="font-family: courier new,courier;">/:reload</span> CLI command. For a server in a managed domain, restarting all services currently requires a full restart of the affected server VM (e.g. <span style="font-family: courier new,courier;">/host=master/server-config=server-one:restart).</span></li><li style="text-align: start;"><span style="font-family: courier new,courier;">jvm</span> --The operation can only immediately update the persistent configuration; applying the operation to the runtime will require a full process restart (i.e. stop the JVM and launch a new JVM). Executing the operation will put the server into a "restart-required" state. Until a restart is performed the response to this operation and to any subsequent operation will include a response header <span style="font-family: courier new,courier;">"process-state" => "restart-required"</span>. For a standalone server, a full process restart requires first stopping the server via OS-level operations (Ctrl-C, kill) or via the <span style="font-family: courier new,courier;">/:shutdown</span> CLI command, and then starting the server again from the command line. For a server in a managed domain, restarting a server requires executing the <span style="font-family: courier new,courier;">/host=<host>/server-config=<server>:restart operation.</span></li><li style="text-align: start;"><span style="font-family: courier new,courier;">resource-services</span> -- The operation can only immediately update the persistent configuration; applying the operation to the runtime will require a subsequent restart of some services associated with the resource. If the operation includes the request header "allow-resource-service-restart" => true, the handler for the operation will go ahead and restart the runtime service. Otherwise executing the operation will put the server into a "reload-required" state. (See the discussion of "<span style="font-family: courier new,courier;">all-services</span>" above for more on the "reload-required" state<span style="font-family: courier new,courier;">.) </span></li></ul><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><h2>Example Representation of a Portion of the Domain Controller API</h2><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><pre class="jive-pre"><code class="jive-code">{
    "description" => "The root node of the domain-level management model.",
    "attributes" => {
        "namespaces" => {
            "type" => OBJECT,
            "value-type" => STRING,
            "description" => "Map of namespaces used in the configuration XML document, where keys are namespace prefixes and values are schema URIs.",
            "required" => false
        },
        "schema-locations" => {
            "type" => OBJECT,
            "value-type" => STRING,
            "description" => "Map of locations of XML schemas used in the configuration XML document, where keys are schema URIs and values are locations where the schema can be found.",
            "required" => false
        }
    },
    "operations" => "TODO",
    "children" => {
        "extension" => {
            "description" => "A list of extension modules.",
            "model-description" => "TODO"
        },
        "path" => {
            "description" => "A list of named filesystem paths. The paths may or may not be fully specified (i.e. include the actual paths.)",
            "model-description" => {
                "description" => "A named filesystem path, but without a requirement to specify the actual path. If no actual path is specified, acts as a placeholder in the model (e.g. at the domain level) until a fully specified path definition is applied at a lower level (e.g. at the host level, where available addresses are known.)",
                "tail-comment-allowed" => false,
                "attributes" => {
                    "name" => {
                        "type" => STRING,
                        "description" => "The name of the path. Cannot be one of the standard fixed paths provided by the system: <ul><li>jboss.home - the root directory of the JBoss AS distribution</li><li>user.home - user's home directory</li><li>user.dir - user's current working directory</li><li>java.home - java installation directory</li><li>jboss.server.base.dir - root directory for an individual server instance</li></ul> Note that the system provides other standard paths that can be overridden by declaring them in the configuration file. See the 'relative-to' attribute documentation for a complete list of standard paths.",
                        "required" => true
                    },
                    "path" => {
                        "type" => STRING,
                        "description" => "The actual filesystem path. Treated as an absolute path, unless the 'relative-to' attribute is specified, in which case the value is treated as relative to that path. <p>If treated as an absolute path, the actual runtime pathname specified by the value of this attribute will be determined as follows: </p>If this value is already absolute, then the value is directly used.  Otherwise the runtime pathname is resolved in a system-dependent way.  On UNIX systems, a relative pathname is made absolute by resolving it against the current user directory. On Microsoft Windows systems, a relative pathname is made absolute by resolving it against the current directory of the drive named by the pathname, if any; if not, it is resolved against the current user directory.",
                        "required" => false,
                        "min-length" => 1
                    },
                    "relative-to" => {
                        "type" => STRING,
                        "description" => "The name of another previously named path, or of one of the standard paths provided by the system. If 'relative-to' is provided, the value of the 'path' attribute is treated as relative to the path specified by this attribute. The standard paths provided by the system include:<ul><li>jboss.home - the root directory of the JBoss AS distribution</li><li>user.home - user's home directory</li><li>user.dir - user's current working directory</li><li>java.home - java installation directory</li><li>jboss.server.base.dir - root directory for an individual server instance</li><li>jboss.server.data.dir - directory the server will use for persistent data file storage</li><li>jboss.server.log.dir - directory the server will use for log file storage</li><li>jboss.server.tmp.dir - directory the server will use for temporary file storage</li><li>jboss.domain.servers.dir - directory under which a host controller will create the working area for individual server instances</li></ul>",
                        "required" => false
                    }
                },
                "operations" => {
                    "add" => {
                        "operation-name" => "add",
                        "description" => "Add a new 'path' child",
                        "request-properties" => {
                            "name" => {
                                "type" => STRING,
                                "description" => "The value of the path's 'name' attribute",
                                "required" => true,
                                "min-length" => 1,
                                "nillable" => false
                            },
                            "path" => {
                                "type" => STRING,
                                "description" => "The value of the path's 'path' attribute",
                                "required" => false,
                                "min-length" => 1,
                                "nillable" => true
                            },
                            "relative-to" => {
                                "type" => STRING,
                                "description" => "The value of the path's 'relative-to' attribute",
                                "required" => false,
                                "min-length" => 1,
                                "nillable" => true
                            }
                        },
                        "reply-properties" => {}
                    },
                    "remove" => {
                        "operation-name" => "remove",
                        "description" => "Remove a 'path' child",
                        "request-properties" => {"name" => {
                                "type" => STRING,
                                "description" => "The value of the path's 'name' attribute",
                                "required" => true,
                                "min-length" => 1,
                                "nillable" => false
                            }},
                        "reply-properties" => {}
                    },
                    "setPath" => {
                        "operation-name" => "setPath",
                        "description" => "Set the value of the 'path' attribute",
                        "request-properties" => {"path" => {
                                "type" => STRING,
                                "description" => "The new value of the 'path' attribute",
                                "required" => true,
                                "min-length" => 1,
                                "nillable" => true
                            }},
                        "reply-properties" => {}
                    },
                    "setRelativeTo" => {
                        "operation-name" => "setRelativeTo",
                        "description" => "Set the value of the 'relative-to' attribute",
                        "request-properties" => {"relative-to" => {
                                "type" => STRING,
                                "description" => "The new value of the 'relative-to' attribute",
                                "required" => true,
                                "nillable" => true
                            }},
                        "reply-properties" => {}
                    }
                }
            }
        },
        "profile" => {
            "description" => "A list of profiles available for use in the domain",
            "min-occurs" => 1,
            "model-description" => {
                "description" => "A named set of subsystem configurations.",
                "attributes" => {"name" => {
                        "type" => STRING,
                        "description" => "The name of the profile",
                        "required" => true,
                        "min-length" => 1
                    }},
                "operations" => {},
                "children" => {
                    "subsystem" => {
                        "description" => "The subsystems that make up the profile.",
                        "min-occurs" => 1,
                        "model-description" => {}
                    },
                    "include" => {"model-description" => {
                            "description" => "Specifies that a contents of a named profile are to be included in the profile whose definition includes this item.",
                            "head-comment-allowed" => true,
                            "tail-comment-allowed" => false,
                            "attributes" => {"profile" => {
                                    "type" => LIST,
                                    "description" => "The name of the included profile",
                                    "required" => true,
                                    "value-type" => STRING
                                }},
                            "operations" => "TODO"
                        }}
                }
            }
        },
        "interface" => {
            "description" => "A list of named network interfaces available for use in the domain. The interfaces may or may not be fully specified (i.e. include criteria on how to determine their IP address.",
            "min-occurs" => 0,
            "model-description" => "TODO"
        },
        "socket-binding-group" => {
            "description" => "A list of socket binding groups available for use in the domain",
            "min-occurs" => 0,
            "model-description" => "TODO"
        },
        "system-property" => {
            "description" => "A list of system properties to set on all servers in the domain.",
            "min-occurs" => 0,
            "model-description" => "TODO"
        },
        "deployment" => {
            "description" => "A list of deployments available for use in the domain",
            "min-occurs" => 0,
            "model-description" => "TODO"
        },
        "server-group" => {
            "description" => "A list of server groups available for use in the domain",
            "min-occurs" => 0,
            "model-description" => "TODO"
        },
        "host" => {
            "description" => "Host controllers currently running in the domain",
            "min-occurs" => 0,
            "model-description" => "TODO"
        }
    }
}
</code></pre><h2>Example Representation of a Portion of the Host Controller API</h2><p style="min-height: 8pt; height: 8pt; padding: 0px;"> </p><pre class="jive-pre"><code class="jive-code">{
    "description" => "The root node of the host-level management model.",
    "attributes" => {
        "namespaces" => {
            "type" => OBJECT,
            "value-type" => STRING,
            "description" => "Map of namespaces used in the configuration XML document, where keys are namespace prefixes and values are schema URIs.",
            "required" => false
        },
        "schema-locations" => {
            "type" => OBJECT,
            "value-type" => STRING,
            "description" => "Map of locations of XML schemas used in the configuration XML document, where keys are schema URIs and values are locations where the schema can be found.",
            "required" => false
        },
        "management" => {
            "description" => "Configuration of the host's management system.",
            "type" => OBJECT,
            "value-type" => {
                "interface" => {
                    "type" => STRING,
                    "description" => "Interface on which the host's socket for intra-domain management communication should be opened.",
                    "required" => false
                },
                "port" => {
                    "type" => STRING,
                    "description" => "Port on which the host's socket for intra-domain management communication should be opened.",
                    "required" => false
                }
            },
            "required" => true,
            "head-comment-allowed" => true
        },
        "domain-controller" => {
            "description" => "Configuration of how the host should interact with the Domain Controller",
            "type" => OBJECT,
            "value-type" => "TODO",
            "required" => true,
            "head-comment-allowed" => true,
            "tail-comment-allowed" => true
        }
    },
    "operations" => {
        "start-server" => {
            "operation-name" => "start-server",
            "description" => "Start a server.",
            "request-properties" => {"server" => {
                    "type" => STRING,
                    "description" => "The name of the server.",
                    "required" => true,
                    "min-length" => 1
                }},
            "reply-properties" => {
                "type" => STRING,
                "description" => "The status of the server following execution of this operation."
            }
        },
        "restart-server" => {
            "operation-name" => "restart-server",
            "description" => "Restart a currently running server.",
            "request-properties" => {"server" => {
                    "type" => STRING,
                    "description" => "The name of the server.",
                    "required" => true,
                    "min-length" => 1
                }},
            "reply-properties" => {
                "type" => STRING,
                "description" => "The status of the server following execution of this operation."
            }
        },
        "stop-server" => {
            "operation-name" => "stop-server",
            "description" => "Stop a currently running server.",
            "request-properties" => {"server" => {
                    "type" => STRING,
                    "description" => "The name of the server.",
                    "required" => true,
                    "min-length" => 1
                }},
            "reply-properties" => {
                "type" => STRING,
                "description" => "The status of the server following execution of this operation."
            }
        }
    },
    "children" => {
        "extension" => {
            "description" => "A list of extension modules.",
            "min-occurs" => 0,
            "model-description" => "TODO"
        },
        "path" => {
            "description" => "A list of named filesystem paths.",
            "min-occurs" => 0,
            "model-description" => {
                "description" => "A named filesystem path, but without a requirement to specify the actual path. If no actual path is specified, acts as a placeholder in the model (e.g. at the domain level) until a fully specified path definition is applied at a lower level (e.g. at the host level, where available addresses are known.)",
                "tail-comment-allowed" => false,
                "attributes" => {
                    "name" => {
                        "type" => STRING,
                        "description" => "The name of the path. Cannot be one of the standard fixed paths provided by the system: <ul><li>jboss.home - the root directory of the JBoss AS distribution</li><li>user.home - user's home directory</li><li>user.dir - user's current working directory</li><li>java.home - java installation directory</li><li>jboss.server.base.dir - root directory for an individual server instance</li></ul> Note that the system provides other standard paths that can be overridden by declaring them in the configuration file. See the 'relative-to' attribute documentation for a complete list of standard paths.",
                        "required" => true
                    },
                    "path" => {
                        "type" => STRING,
                        "description" => "The actual filesystem path. Treated as an absolute path, unless the 'relative-to' attribute is specified, in which case the value is treated as relative to that path. <p>If treated as an absolute path, the actual runtime pathname specified by the value of this attribute will be determined as follows: </p>If this value is already absolute, then the value is directly used.  Otherwise the runtime pathname is resolved in a system-dependent way.  On UNIX systems, a relative pathname is made absolute by resolving it against the current user directory. On Microsoft Windows systems, a relative pathname is made absolute by resolving it against the current directory of the drive named by the pathname, if any; if not, it is resolved against the current user directory.",
                        "required" => true,
                        "min-length" => 1
                    },
                    "relative-to" => {
                        "type" => STRING,
                        "description" => "The name of another previously named path, or of one of the standard paths provided by the system. If 'relative-to' is provided, the value of the 'path' attribute is treated as relative to the path specified by this attribute. The standard paths provided by the system include:<ul><li>jboss.home - the root directory of the JBoss AS distribution</li><li>user.home - user's home directory</li><li>user.dir - user's current working directory</li><li>java.home - java installation directory</li><li>jboss.server.base.dir - root directory for an individual server instance</li><li>jboss.server.data.dir - directory the server will use for persistent data file storage</li><li>jboss.server.log.dir - directory the server will use for log file storage</li><li>jboss.server.tmp.dir - directory the server will use for temporary file storage</li><li>jboss.domain.servers.dir - directory under which a host controller will create the working area for individual server instances</li></ul>",
                        "required" => false
                    }
                },
                "operations" => {
                    "add" => {
                        "operation-name" => "add",
                        "description" => "Add a new 'path' child",
                        "request-properties" => {
                            "name" => {
                                "type" => STRING,
                                "description" => "The value of the path's 'name' attribute",
                                "required" => true,
                                "min-length" => 1
                            },
                            "path" => {
                                "type" => STRING,
                                "description" => "The value of the path's 'path' attribute",
                                "required" => true,
                                "min-length" => 1
                            },
                            "relative-to" => {
                                "type" => STRING,
                                "description" => "The value of the path's 'relative-to' attribute",
                                "required" => false,
                                "min-length" => 1,
                                "nillable" => true
                            }
                        },
                        "reply-properties" => {}
                    },
                    "remove" => {
                        "operation-name" => "remove",
                        "description" => "Remove a 'path' child",
                        "request-properties" => {"name" => {
                                "type" => STRING,
                                "description" => "The value of the path's 'name' attribute",
                                "required" => true,
                                "min-length" => 1
                            }},
                        "reply-properties" => {}
                    },
                    "setPath" => {
                        "operation-name" => "setPath",
                        "description" => "Set the value of the 'path' attribute",
                        "request-properties" => {"path" => {
                                "type" => STRING,
                                "description" => "The new value of the 'path' attribute",
                                "required" => true,
                                "min-length" => 1
                            }},
                        "reply-properties" => {}
                    },
                    "setRelativeTo" => {
                        "operation-name" => "setRelativeTo",
                        "description" => "Set the value of the 'relative-to' attribute",
                        "request-properties" => {"relative-to" => {
                                "type" => STRING,
                                "description" => "The new value of the 'relative-to' attribute",
                                "required" => true,
                                "nillable" => true
                            }},
                        "reply-properties" => {}
                    }
                }
            }
        },
        "system-property" => {
            "description" => "A list of system properties to set on all servers on the host.",
            "min-occurs" => 0
            "model-description" => "TODO"
        },
        "interface" => {
            "description" => "A list of fully specified named network interfaces available for use on the host.",
            "min-occurs" => 0
            "model-description" => "TODO"
        },
        "jvm" => {
            "description" => "A list of Java Virtual Machine configurations that can be applied ot servers on the host.",
            "min-occurs" => 0
            "model-description" => "TODO"
        },
        "server-config" => {
            "description" => "Host-level configurations for the servers that can run on this host.",
            "min-occurs" => 0
            "model-description" => {}
        },
        "server" => {
            "description" => "Servers currently running on the host",
            "min-occurs" => 0
            "model-description" => "TODO"
        }
    }
}
</code></pre></div>
<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
<p style="margin: 0;">Comment by <a href="http://community.jboss.org/docs/DOC-16317">going to Community</a></p>
        <p style="margin: 0;">Create a new document in JBoss AS7 Development at <a href="http://community.jboss.org/choose-container!input.jspa?contentType=102&containerType=14&container=2225">Community</a></p>
</div></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>