dev@glassfish.java.net

Re: MBean operation not supported

From: Amy Roh <Amelia.Roh_at_Sun.COM>
Date: Wed, 24 Jan 2007 21:25:59 -0800

kedar wrote:
>
>
> Amy Roh wrote:
>
>> kedar wrote:
>>
>>> Using proxy apart, I am not able to assess why this
>>> operation fails. I checked fisheye and the actual
>>> invocation code snippet is not available in WebContainer.java.
>>> Can you send me the exact MBean code and the code that
>>> calls the method?
>>
>>
>> I think the issue might be related to ClassLoader.
>
> Right. This is important piece of information.
>
>>
>> I've created a separate ClassLoader to load and start Tomcat in a
>> lifecycle listener module. Tomcat related MBeans are created using this
>> ClassLoader.
>
> And are you using the createMBean method on MBeanServer
> that takes the classloader as an object name?
> You've got to handle this rather carefully.
>
> If the MBean code is known to a special class loader, then
> it will be better to
> 1- either, use the registerMBean method where you create
> your MBean instance and register it.

> 2- or, use the createMBean method, but prior to that, register
> the class loader that knows about MBean as an MBean.
>
> Can you try out 1) and report back?

I already register the class loader as an MBean after creating it. Is
that what you mean?

I tried MBeanServer.instantiate(String className, ObjectName loaderName)
to make sure if the Object created is using the same class loader.

Thanks,
Amy
>
> Kedar
>
>>
>> However, passing a StandardContext Object loaded from the Tomcat JAR to
>> invoke a method on Tomcat Deployer MBean doesn't seem to work.
>>
>> Class contextClass = catalinaLoader.loadClass(
>> "org.apache.catalina.core.StandardContext");
>> Object context = contextClass.newInstance();
>>
>> MBeanServer.invoke(deployer, "manageApp",
>> new Object[] {context},
>> new String[] {"org.apache.catalina.Context"});
>>
>> Since MBeanServer.invoke uses the same class loader as the one used for
>> loading the MBean on which the operation was invoked, I checked the
>> ClassLoader for deployer MBean and found that it is Tomcat's common
>> class loader rather than catalina class loader.
>>
>> I even tried instantiating context Object using MBeanServer.instantiate
>> to make sure the class is the same one but no luck.
>>
>> Thanks,
>> Amy
>>
>>>
>>> Lloyd L Chambers wrote:
>>>
>>>> Amy,
>>>>
>>>> You'll be happier using
>>>> MBeanServerInvocationHandler.newProxyInstance() to get type-safe,
>>>> compile-time invocation. That might not solve your issue, but it's
>>>> safer, since type errors are detected at compile time.
>>>>
>>>> You can write your own java interface for newProxyInstance () if one
>>>> is not available, including only the methods relevant to you.
>>>>
>>>> Lloyd
>>>>
>>>>
>>>> On Jan 19, 2007, at 1:57 PM, Amy Roh wrote:
>>>>
>>>>> kedar wrote:
>>>>>
>>>>>> Amy Roh wrote:
>>>>>>
>>>>>>> kedar wrote:
>>>>>>>
>>>>>>>> Oh that message is simply a classic
>>>>>>>> problem of not being able to provide
>>>>>>>> a "rich" java object like "Context" to
>>>>>>>> this method on HTML page, that's all.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Oh I Wish that was just the case. However, method invoke fails
>>>>>>> with ReflectionException although I can see the method and
>>>>>>> signature/param is correct. Perhaps it's related to passing a
>>>>>>> "rich" java object since methods that take String get invoked fine.
>>>>>>
>>>>>>
>>>>>> I think I am not explaining it right.
>>>>>> On HTML adaptor, primitive Java Objects can easily be sent as
>>>>>> params, by
>>>>>> entering their value in the text field. That's not true for the
>>>>>> non-primitive Java Objects and Arrays. So, if your method accepts
>>>>>> such an object, it is simply not "invokable" from HTML adaptor.
>>>>>> So, I guess I don't understand what you mean when you say, "method
>>>>>> invoke
>>>>>> fails ..". How do you invoke it? There is no "button" do so.
>>>>>
>>>>>
>>>>>
>>>>> Sorry for not being clear. No, I don't invoke it from HTML
>>>>> adaptor. The adaptor was just for me to view MBean information to
>>>>> check its availability.
>>>>>
>>>>> I invoke it in my code (added code is in
>>>>> com/sun/enterprise/web/WebContainer.java) like this -
>>>>>
>>>>> MBeanServer.invoke(deployer, "manageApp",
>>>>> new Object[] {context},
>>>>> new String[] {"org.apache.catalina.Context"});
>>>>>
>>>>> which fails with the exception although the method is available
>>>>> with right signature.
>>>>>
>>>>> Thanks,
>>>>> Amy
>>>>>
>>>>>> Kedar
>>>>>>
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Amy
>>>>>>>
>>>>>>>>
>>>>>>>> This unsupported method is basically
>>>>>>>> accepting Context object and simply
>>>>>>>> speaking there is no way to provide
>>>>>>>> that on the page!
>>>>>>>>
>>>>>>>> Actually, this brings up a good point and
>>>>>>>> I am copying Eamonn, the JMX spec lead about
>>>>>>>> MBean best practices. This MBean method is
>>>>>>>> not a good one because
>>>>>>>> 1- it does not use the Open types.
>>>>>>>> 2- it is not possible to invoke it from a
>>>>>>>> pure JMX client like JConsole.
>>>>>>>>
>>>>>>>> Note that MBeans are a little different beasts
>>>>>>>> from the Java objects :) No need to worry, just
>>>>>>>> a question of following best practices.
>>>>>>>>
>>>>>>>> If you use JConsole, see the MemoryMXBean and you'll
>>>>>>>> appreciate what open types are.
>>>>>>>>
>>>>>>>> Regards,
>>>>>>>> Kedar
>>>>>>>>
>>>>>>>>
>>>>>>>> Amy Roh wrote:
>>>>>>>>
>>>>>>>>> kedar wrote:
>>>>>>>>>
>>>>>>>>>> I agree with Lloyd, when it comes to the GlassFish
>>>>>>>>>> Platform MBeans. To be precise, the "amx:" MBeans
>>>>>>>>>> are the ones that the clients can "depend on" to
>>>>>>>>>> manage GlassFish. The "com.sun.appserv:" MBeans are
>>>>>>>>>> not supported. You are on your own, when you call
>>>>>>>>>> these MBeans. In that sense, this is a reserved MBean
>>>>>>>>>> domain that you should leave alone. In future, we will
>>>>>>>>>> try to hide those MBeans from our clients.
>>>>>>>>>>
>>>>>>>>>> This however, does not mean that you can't have your
>>>>>>>>>> own MBeans. Actually, your application code or explicit
>>>>>>>>>> admin operation does allow to deploy your own MBeans and
>>>>>>>>>> they will be in a domain called "user:". This relates
>>>>>>>>>> to our feature of "custom MBeans" and several folks have
>>>>>>>>>> used that feature. Look at Admin console or asadmin
>>>>>>>>>> commands like "create-mbean".
>>>>>>>>>>
>>>>>>>>>> Amy: What MBeans (object names) do you refer to, and why
>>>>>>>>>> do you want to invoke those MBean operations?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> I'm trying to invoke Catalina Deployer MBean method. The MBean
>>>>>>>>> is created after I embed Tomcat so you can think of it as my
>>>>>>>>> own MBean.
>>>>>>>>>
>>>>>>>>> Again, although the method is visible but "not operational".
>>>>>>>>> Trying to figure out why and where the MBeanServer is making
>>>>>>>>> the method "not operational".
>>>>>>>>>
>>>>>>>>> If you're on swan, you can access my mbean -
>>>>>>>>>
>>>>>>>>> http://asengsol1.sfbay.sun.com:8082/ViewObjectRes//Catalina%3Atype%3DDeployer%2Chost%3Dlocalhost
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Description of manageApp (Operation Not Supported)
>>>>>>>>> void manageApp (org.apache.catalina.Context)context
>>>>>>>>>
>>>>>>>>> manageApp operation is listed but says "Operation Not Supported".
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>> Amy
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Thanks,
>>>>>>>>>> Kedar
>>>>>>>>>>
>>>>>>>>>> Lloyd L Chambers wrote:
>>>>>>>>>>
>>>>>>>>>>> Amy,
>>>>>>>>>>>
>>>>>>>>>>> Most all MBeans that have a JMX domain other than "amx" are
>>>>>>>>>>> private and should not be used. AMX are the public ones, and
>>>>>>>>>>> there are no unsupported methods.
>>>>>>>>>>>
>>>>>>>>>>> The com.sun.appserv MBeans have a fair number of unsupported
>>>>>>>>>>> methods; the generic code makes no attempt to remove
>>>>>>>>>>> inappropriate methods from the MBeanInfo of subclasses.
>>>>>>>>>>>
>>>>>>>>>>> Lloyd Chambers
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Jan 19, 2007, at 10:50 AM, Amy Roh wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Hi guys,
>>>>>>>>>>>>
>>>>>>>>>>>> Do you know why some MBeans operations are "not supported"?
>>>>>>>>>>>>
>>>>>>>>>>>> I do see the method available in MBeanInfo and
>>>>>>>>>>>> MBeanOperationInfo and the method is public and available
>>>>>>>>>>>> through mbean descriptor.
>>>>>>>>>>>>
>>>>>>>>>>>> However, when I view the MBean through HTML Adaptor I do see
>>>>>>>>>>>> the method listed but it also says "(Operation Not Supported)"
>>>>>>>>>>>>
>>>>>>>>>>>> After looking at various MBeans, it seems that methods that
>>>>>>>>>>>> take any parameters other than Object or String says
>>>>>>>>>>>> "Operation Not Supported", perhaps serialization issue(?).
>>>>>>>>>>>>
>>>>>>>>>>>> Is there a way to use these "available" methods without
>>>>>>>>>>>> getting "ReflectionException" when invoked?
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks,
>>>>>>>>>>>> Amy
>>>>>>>>>>>>
>>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>>>
>>>>>>>>>>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>>>>>>>>>>>> For additional commands, e-mail:
>>>>>>>>>>>> dev-help_at_glassfish.dev.java.net
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>>
>>>>>>>>>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>>>>>>>>>>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>
>>>>>>>>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>>>>>>>>>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>
>>>>>>>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>>>>>>>>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>>>>>>>>
>>>>>>>>
>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>
>>>>>>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>>>>>>>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>>>>>>>
>>>>>>>
>>>>>>> ---------------------------------------------------------------------
>>>>>>>
>>>>>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>>>>>>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>>>>>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>>>>
>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>>>>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>>>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
>> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>