<?xml version="1.0" encoding="UTF-8"?>

<!-- $Id: jboss-service.xml 59448 2007-01-09 19:05:54Z dimitris@jboss.org $ -->
<server>

   <!-- The JRMP invoker proxy configuration for the InvokerAdaptorService -->
   <mbean code="org.jboss.invocation.jrmp.server.JRMPProxyFactory"
      name="jboss.jmx:type=adaptor,name=Invoker,protocol=jrmp,service=proxyFactory">
      <!-- Use the standard JRMPInvoker from conf/jboss-service.xxml -->
      <depends optional-attribute-name="InvokerName">jboss:service=invoker,type=jrmp</depends>
      <!-- The target MBean is the InvokerAdaptorService configured below -->
      <depends optional-attribute-name="TargetName">jboss.jmx:type=adaptor,name=Invoker</depends>
      <!-- Where to bind the RMIAdaptor proxy -->
      <attribute name="JndiName">jmx/invoker/RMIAdaptor</attribute>
      <!-- The RMI compabitle MBeanServer interface -->
      <attribute name="ExportedInterfaces">org.jboss.jmx.adaptor.rmi.RMIAdaptor,
         org.jboss.jmx.adaptor.rmi.RMIAdaptorExt
      </attribute>
      <attribute name="ClientInterceptors">
          <interceptors>
             <interceptor>org.jboss.proxy.ClientMethodInterceptor</interceptor>
             <interceptor>org.jboss.proxy.SecurityInterceptor</interceptor>
             <interceptor>org.jboss.jmx.connector.invoker.client.InvokerAdaptorClientInterceptor</interceptor>
             <interceptor>org.jboss.invocation.InvokerInterceptor</interceptor>
          </interceptors>
      </attribute>
      <depends>jboss:service=Naming</depends>
   </mbean>

   <!--
      Choose the remote proxy to expose mbean proxies over
   -->
   <mbean code="org.jboss.jmx.connector.invoker.MBeanProxyRemote"
          name="jboss.jmx:type=adaptor,name=MBeanProxyRemote,protocol=jrmp">
      <depends optional-attribute-name="MBeanServerConnection">jboss.jmx:type=adaptor,name=Invoker,protocol=jrmp,service=proxyFactory</depends>
   </mbean>

   <!-- Create a mapping from the legacy jmx-rmi-adaptor.sar binding to the
   jmx-invoker-adaptor-server.sar JndiName specified above for backwards
   portability.
   -->
   <mbean code="org.jboss.naming.NamingAlias" name="jboss.jmx:alias=jmx/rmi/RMIAdaptor">
      <attribute name="FromName">jmx/rmi/RMIAdaptor</attribute>
      <attribute name="ToName">jmx/invoker/RMIAdaptor</attribute>
      <depends>jboss:service=Naming</depends>
   </mbean>

   <!-- This is the service that handles the RMIAdaptor invocations by routing
   them to the MBeanServer the service is deployed under.  -->
   <mbean code="org.jboss.jmx.connector.invoker.InvokerAdaptorService"
          name="jboss.jmx:type=adaptor,name=Invoker"
      xmbean-dd="">
      <xmbean>
         <description>The JMX Detached Invoker Service</description>
         <class>org.jboss.jmx.connector.invoker.InvokerAdaptorService</class>

         <!-- Attributes -->
         <attribute access="read-only" getMethod="getName">
            <description>The class name of the MBean</description>
            <name>Name</name>
            <type>java.lang.String</type>
         </attribute>
         <attribute access="read-only" getMethod="getState">
            <description>The status of the MBean</description>
            <name>State</name>
            <type>int</type>
         </attribute>
         <attribute access="read-only" getMethod="getStateString">
         <description>The status of the MBean in text form</description>
            <name>StateString</name>
            <type>java.lang.String</type>
         </attribute>
         <attribute access="read-write" getMethod="getExportedInterfaces" setMethod="setExportedInterfaces">
            <description>The interfaces the invoker proxy supports</description>
            <name>ExportedInterfaces</name>
            <type>[Ljava.lang.Class;</type>
         </attribute>
         <attribute access="read-only" getMethod="getMethodMap">
            <description>Map(Long hash, Method) of the proxy interface methods</description>
            <name>MethodMap</name>
            <type>java.util.Map</type>
         </attribute>
         <!-- Operations -->
         <operation>
            <description>The start lifecycle operation</description>
            <name>start</name>
         </operation>
         <operation>
            <description>The stop lifecycle operation</description>
            <name>stop</name>
         </operation>
         <operation>
            <description>The detyped lifecycle operation (for internal use only)</description>
            <name>jbossInternalLifecycle</name>
            <parameter>
               <description>The lifecycle operation</description>
               <name>method</name>
               <type>java.lang.String</type>
            </parameter>
            <return-type>void</return-type>
         </operation>

         <operation>
            <description>The detached invoker entry point</description>
            <name>invoke</name>
            <parameter>
               <description>The method invocation context</description>
               <name>invocation</name>
               <type>org.jboss.invocation.Invocation</type>
            </parameter>
            <return-type>java.lang.Object</return-type>
            <descriptors>
               <interceptors>
                  <!-- Uncomment to require authenticated users
                  <interceptor code="org.jboss.jmx.connector.invoker.AuthenticationInterceptor"
                     securityDomain="java:/jaas/jmx-console"/>
                  -->               
                  <!-- Interceptor that deals with non-serializable results -->
                  <interceptor code="org.jboss.jmx.connector.invoker.SerializableInterceptor"
                     policyClass="StripModelMBeanInfoPolicy"/>
               </interceptors>
            </descriptors>            
         </operation>
      </xmbean>
      
      <attribute name="ExportedInterfaces">org.jboss.jmx.adaptor.rmi.RMIAdaptor,
         org.jboss.jmx.adaptor.rmi.RMIAdaptorExt
      </attribute>
   </mbean>

</server>
