Save This Page
Home » jboss-5.0.0.CR1-src » org.jboss.mx » server » [javadoc | source]
    1   /*
    2   * JBoss, Home of Professional Open Source
    3   * Copyright 2005, JBoss Inc., and individual contributors as indicated
    4   * by the @authors tag. See the copyright.txt in the distribution for a
    5   * full listing of individual contributors.
    6   *
    7   * This is free software; you can redistribute it and/or modify it
    8   * under the terms of the GNU Lesser General Public License as
    9   * published by the Free Software Foundation; either version 2.1 of
   10   * the License, or (at your option) any later version.
   11   *
   12   * This software is distributed in the hope that it will be useful,
   13   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   14   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
   15   * Lesser General Public License for more details.
   16   *
   17   * You should have received a copy of the GNU Lesser General Public
   18   * License along with this software; if not, write to the Free
   19   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
   20   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
   21   */
   22   package org.jboss.mx.server;
   23   
   24   import javax.management.Attribute;
   25   import javax.management.AttributeList;
   26   import javax.management.AttributeNotFoundException;
   27   import javax.management.DynamicMBean;
   28   import javax.management.InvalidAttributeValueException;
   29   import javax.management.MBeanException;
   30   import javax.management.MBeanInfo;
   31   import javax.management.MBeanRegistration;
   32   import javax.management.MBeanServer;
   33   import javax.management.NotCompliantMBeanException;
   34   import javax.management.ObjectName;
   35   import javax.management.ReflectionException;
   36   
   37   
   38   /**
   39    * @author  <a href="mailto:juha@jboss.org">Juha Lindfors</a>.
   40    * @version $Revision: 37459 $
   41    *   
   42    */
   43   public class RawDynamicInvoker
   44      extends AbstractMBeanInvoker
   45   {
   46      
   47      private DynamicMBean typedRes = null;
   48      
   49      public RawDynamicInvoker(DynamicMBean resource)
   50      {
   51         super(resource);
   52         this.typedRes = resource;
   53      }
   54      
   55      // DynamicMBean overrides ----------------------------------------
   56      
   57      public void setAttribute(Attribute attribute) throws AttributeNotFoundException,
   58         InvalidAttributeValueException, MBeanException, ReflectionException
   59      {
   60         ClassLoader mbeanTCL = resourceEntry.getClassLoader();
   61         final ClassLoader ccl = TCLAction.UTIL.getContextClassLoader();
   62         boolean setCl = ccl != mbeanTCL && mbeanTCL != null;
   63         if(setCl)
   64         {
   65            TCLAction.UTIL.setContextClassLoader(mbeanTCL);
   66         }
   67   
   68         try
   69         {
   70            typedRes.setAttribute(attribute);
   71         }
   72         finally
   73         {
   74            if(setCl)
   75            {
   76               TCLAction.UTIL.setContextClassLoader(ccl);
   77            }
   78         }
   79      }
   80      
   81      public AttributeList setAttributes(AttributeList attributes)
   82      {
   83         ClassLoader mbeanTCL = resourceEntry.getClassLoader();
   84         final ClassLoader ccl = TCLAction.UTIL.getContextClassLoader();
   85         boolean setCl = ccl != mbeanTCL && mbeanTCL != null;
   86         if(setCl)
   87         {
   88            TCLAction.UTIL.setContextClassLoader(mbeanTCL);
   89         }
   90   
   91         try
   92         {
   93            return typedRes.setAttributes(attributes);
   94         }
   95         finally
   96         {
   97            if(setCl)
   98            {
   99               TCLAction.UTIL.setContextClassLoader(ccl);
  100            }
  101         }
  102      }
  103      
  104      public Object getAttribute(String name) throws AttributeNotFoundException,
  105            MBeanException, ReflectionException
  106      {
  107         ClassLoader mbeanTCL = resourceEntry.getClassLoader();
  108         final ClassLoader ccl = TCLAction.UTIL.getContextClassLoader();
  109         boolean setCl = ccl != mbeanTCL && mbeanTCL != null;
  110         if(setCl)
  111         {
  112            TCLAction.UTIL.setContextClassLoader(mbeanTCL);
  113         }
  114   
  115         try
  116         {
  117            return typedRes.getAttribute(name);
  118         }
  119         finally
  120         {
  121            if(setCl)
  122            {
  123               TCLAction.UTIL.setContextClassLoader(ccl);
  124            }
  125         }
  126      }
  127      
  128      public AttributeList getAttributes(String[] attributes)
  129      {
  130         ClassLoader mbeanTCL = resourceEntry.getClassLoader();
  131         final ClassLoader ccl = TCLAction.UTIL.getContextClassLoader();
  132         boolean setCl = ccl != mbeanTCL && mbeanTCL != null;
  133         if(setCl)
  134         {
  135            TCLAction.UTIL.setContextClassLoader(mbeanTCL);
  136         }
  137   
  138         try
  139         {
  140            return typedRes.getAttributes(attributes);
  141         }
  142         finally
  143         {
  144            if(setCl)
  145            {
  146               TCLAction.UTIL.setContextClassLoader(ccl);
  147            }
  148         }
  149      }
  150      
  151      public Object invoke(String name, Object[] args, String[] signature) throws
  152            MBeanException, ReflectionException
  153      {
  154         ClassLoader mbeanTCL = resourceEntry.getClassLoader();
  155         final ClassLoader ccl = TCLAction.UTIL.getContextClassLoader();
  156         boolean setCl = ccl != mbeanTCL && mbeanTCL != null;
  157         if(setCl)
  158         {
  159            TCLAction.UTIL.setContextClassLoader(mbeanTCL);
  160         }
  161   
  162         try
  163         {
  164            return typedRes.invoke(name, args, signature);   
  165         }
  166         finally
  167         {
  168            if(setCl)
  169            {
  170               TCLAction.UTIL.setContextClassLoader(ccl);
  171            }
  172         }
  173      }
  174      
  175      public MBeanInfo getMBeanInfo()
  176      {
  177         ClassLoader mbeanTCL = resourceEntry.getClassLoader();
  178         final ClassLoader ccl = TCLAction.UTIL.getContextClassLoader();
  179         boolean setCl = ccl != mbeanTCL && mbeanTCL != null;
  180         if(setCl)
  181         {
  182            TCLAction.UTIL.setContextClassLoader(mbeanTCL);
  183         }
  184   
  185         try
  186         {
  187            return typedRes.getMBeanInfo();
  188         }
  189         finally
  190         {
  191            if(setCl)
  192            {
  193               TCLAction.UTIL.setContextClassLoader(ccl);
  194            }
  195         }
  196      }
  197      
  198      // MBeanRegistration overrides -----------------------------------
  199      public ObjectName preRegister(MBeanServer server, ObjectName oname) throws Exception
  200      {
  201         this.resourceEntry = AbstractMBeanInvoker.getMBeanEntry();
  202   
  203         try
  204         {
  205            this.info = getMBeanInfo();
  206         }
  207         catch (Exception e)
  208         {
  209            throw new NotCompliantMBeanException("Cannot obtain MBeanInfo, for: " + oname);
  210         }
  211   
  212         ClassLoader mbeanTCL = resourceEntry.getClassLoader();
  213         final ClassLoader ccl = TCLAction.UTIL.getContextClassLoader();
  214         boolean setCl = ccl != mbeanTCL && mbeanTCL != null;
  215         if(setCl)
  216         {
  217            TCLAction.UTIL.setContextClassLoader(mbeanTCL);
  218         }
  219   
  220         try
  221         {
  222            if (getResource() instanceof MBeanRegistration)
  223               return ((MBeanRegistration)getResource()).preRegister(server, oname);
  224            else
  225               return oname;
  226         }
  227         finally
  228         {
  229            if(setCl)
  230            {
  231               TCLAction.UTIL.setContextClassLoader(ccl);
  232            }
  233         }
  234      }
  235      
  236      public void postRegister(Boolean b)
  237      {
  238         ClassLoader mbeanTCL = resourceEntry.getClassLoader();
  239         final ClassLoader ccl = TCLAction.UTIL.getContextClassLoader();
  240         boolean setCl = ccl != mbeanTCL && mbeanTCL != null;
  241         if(setCl)
  242         {
  243            TCLAction.UTIL.setContextClassLoader(mbeanTCL);
  244         }
  245   
  246         try
  247         {
  248            if (getResource() instanceof MBeanRegistration)
  249               ((MBeanRegistration)getResource()).postRegister(b);
  250         }
  251         finally
  252         {
  253            TCLAction.UTIL.setContextClassLoader(ccl);
  254         }
  255      }
  256      
  257      public void preDeregister() throws Exception
  258      {
  259         ClassLoader mbeanTCL = resourceEntry.getClassLoader();
  260         final ClassLoader ccl = TCLAction.UTIL.getContextClassLoader();
  261         boolean setCl = ccl != mbeanTCL && mbeanTCL != null;
  262         if(setCl)
  263         {
  264            TCLAction.UTIL.setContextClassLoader(mbeanTCL);
  265         }
  266   
  267         try
  268         {
  269            if (getResource() instanceof MBeanRegistration)
  270               ((MBeanRegistration)getResource()).preDeregister();
  271         }
  272         finally
  273         {
  274            if(setCl)
  275            {
  276               TCLAction.UTIL.setContextClassLoader(ccl);
  277            }
  278         }
  279      }
  280      
  281      public void postDeregister()
  282      {
  283         ClassLoader mbeanTCL = resourceEntry.getClassLoader();
  284         final ClassLoader ccl = TCLAction.UTIL.getContextClassLoader();
  285         boolean setCl = ccl != mbeanTCL && mbeanTCL != null;
  286         if(setCl)
  287         {
  288            TCLAction.UTIL.setContextClassLoader(mbeanTCL);
  289         }
  290   
  291         try
  292         {
  293            if (getResource() instanceof MBeanRegistration)
  294               ((MBeanRegistration)getResource()).postDeregister();
  295         }
  296         finally
  297         {
  298            if(setCl)
  299            {
  300               TCLAction.UTIL.setContextClassLoader(ccl);
  301            }
  302         }
  303      }
  304   }

Save This Page
Home » jboss-5.0.0.CR1-src » org.jboss.mx » server » [javadoc | source]