public Object invoke(String name, Object[] params, String[] signature)
        throws MBeanException,
               ReflectionException
    {
        if(log.isDebugEnabled())log.debug("invoke "+name);

        String methodKey=name+"(";
        if (signature!=null)
            for (int i=0;i<signature.length;i++)
                methodKey+=(i>0?",":"")+signature[i];
        methodKey+=")";

        try
        {
            Method method = (Method)_method.get(methodKey);
            if (method==null)
                throw new NoSuchMethodException(methodKey);

            Object o=_object;
            if (method.getDeclaringClass().isInstance(this))
                o=this;
            return method.invoke(o,params);
        }
        catch(NoSuchMethodException e)
        {
            log.warn(LogSupport.EXCEPTION,e);
            throw new ReflectionException(e);
        }
        catch(IllegalAccessException e)
        {
            log.warn(LogSupport.EXCEPTION,e);
            throw new MBeanException(e);
        }
        catch(InvocationTargetException e)
        {
            log.warn(LogSupport.EXCEPTION,e);
            throw new ReflectionException((Exception)e.getTargetException());
        }
        
    }