<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE server
    PUBLIC "-//JBoss//DTD MBean Service 3.2//EN"
    "http://www.jboss.org/j2ee/dtd/jboss-service_3_2.dtd">

<!-- 
     Hand generated service descriptor that allows the GossipRouter to be
     deployed as a JBoss MBean. See also jboss-service target from build.xml.
-->

<server>

   <mbean code="org.jgroups.stack.GossipRouter"
          name="jgroups:service=GossipRouter"
          xmbean-dd="">

      <xmbean>

         <description>JGroups GossipRouter</description>

         <class>org.jgroups.stack.GossipRouter</class>
         <!--
         <descriptors>
             <persistPolicy value="OnUpdate"/>
             <persistLocation value="/tmp"/>
             <persistName value="gs.test"/>
         </descriptors>
         -->

         <!-- Constructors -->

         <constructor>
            <description>The default constructor</description>
            <name>GossipRouter</name>
         </constructor>

         <!-- Attributes -->

         <attribute access="read-write" 
                    getMethod="getPort" 
                    setMethod="setPort">
            <description>The local TCP port.</description>
            <name>Port</name>
            <type>int</type>

            <!-- the ModelMBean descriptors -->
            <descriptors>
               <currencyTimeLimit value="-1" />
               <!-- <value value="0" /> -->
               <!-- <persistPolicy value="OnUpdate"/> -->
            </descriptors>
         </attribute>

         <attribute access="read-write" 
                    getMethod="getBindAddress" 
                    setMethod="setBindAddress">
            <description>The local address the server will bind to.</description>
            <name>BindAddress</name>
            <type>java.lang.String</type>
         </attribute>

         <attribute access="read-write" 
                    getMethod="getExpiryTime"
                    setMethod="setExpiryTime">
            <description>Time (msec) until a cached gossip member entry expires.</description>
            <name>ExpiryTime</name>
            <type>long</type>
         </attribute>

         <attribute access="read-write" 
                    getMethod="getGossipRequestTimeout"
                    setMethod="setGossipRequestTimeout">
            <description>Number of millisecs the main thread waits to receive a gossip request after connection was established; upon expiration, the router initiates the routing protocol on the connection. Don't set the interval too big, otherwise the router will appear slow in answering routing requests.</description>
            <name>GossipRequestTimeout</name>
            <type>long</type>
         </attribute>


         <attribute access="read-write" 
                    getMethod="getRoutingClientReplyTimeout"
                    setMethod="setRoutingClientReplyTimeout">
            <description>Time (in ms) main thread waits for a router client to send the routing request type and the group afiliation before it declares the request failed.</description>
            <name>RoutingClientReplyTimeout</name>
            <type>long</type>
         </attribute>


         <attribute access="read-only" 
                    getMethod="isStarted">
            <description>Returns true if the router is operational.</description>
            <name>Started</name>
            <type>boolean</type>
         </attribute>


         <!-- JBoss MBean Life Cycle Operations -->

         <operation>
            <description>Not used</description>
            <name>create</name>
         </operation>


         <operation>
            <description>The start lifecycle operation. Brings the Router in fully functional state.</description>
            <name>start</name>
         </operation>

         <operation>
            <description>The stop lifecycle operation. Close connections and frees resources.</description>
            <name>stop</name>
         </operation>

         <operation>
            <description>Not used</description>
            <name>destroy</name>
         </operation>

         <!-- Ordinary Operations -->

         <operation>
            <description>Dumps the routing table.</description>
            <name>dumpRoutingTable</name>
            <return-type>java.lang.String</return-type>
         </operation>

         <operation>
            <description>Dumps the gossip table.</description>
            <name>dumpGossipTable</name>
            <return-type>java.lang.String</return-type>
         </operation>

      </xmbean>


      <!-- TO_DO: synchronize these values with the ones declared as defaults
                  in GossipRouter.
      -->
      <attribute name="Port">12000</attribute>
      <attribute name="ExpiryTime">30000</attribute>
      <attribute name="GossipRequestTimeout">1000</attribute>
      <attribute name="RoutingClientReplyTimeout">120000</attribute>

   </mbean>

</server>
