Hi Shenglin

Please don't copy all the response collection, copy only relevant fragments.

>
> Because there are 2 unrelated MBean filtered out,
>
> http://localhost:8080/services/jmx/list/mbean/0 -> CXF BUS

CXF Bus is definitely relevant, as it is in the org.apache.cxf domain.
Please include it whenever suitable, ex, when listing all MBeans, when
a /type/* query matches it, etc


> therefore,  now href is somehow not continuous as followed, is it ok just
> for a unique identifier for the MBean we want?
>
> http://localhost:8080/services/jmx/list/mbean/0/mbean/1
> -> restful UserService
> http://localhost:8080/services/jmx/list/mbean/0/mbean/1/mbean/2/mbean/3
> -> restful CustomerService
> http://localhost:8080/services/jmx/list/mbean/0/mbean/1/mbean/2/mbean/3/mbean/4
> -> soap Greeter

All MBeans, irrespectively of whether you used /list or /service/*,
etc query, should have this format:

http://localhost:8080/services/jmx/mbean/1
or
http://localhost:8080/services/jmx/mbean/23
or
http://localhost:8080/services/jmx/mbean/99
or
http://localhost:8080/services/jmx/mbean/bus.service.id.1

Note, no 'list' is there. And the key is a simple value like 1 or 23, etc.

Do you see what I mean ?

Cheers, Sergey

>
> Thank you.
>
>
> Regards:
> Shenglin Qiu
>
>
>
>> Date: Thu, 19 May 2011 10:20:19 +0100
>> Subject: Re: Expose MBeans in CXF
>> From: sberyoz...@gmail.com
>> To: dabaip...@hotmail.com
>> CC: dev@cxf.apache.org
>>
>> HI Shenglin
>>
>> >>
>> >> String href =
>> >> builder.path("mbean").path(someUniqueKey).build().toString()
>> >
>> >
>> > Here is my progress, I use  UriBuilder uriBuilder =
>> > uriInfo.getAbsolutePathBuilder().path(this.getClass(), "list"); and
>> >             String uniqueKey = Integer.toString(index++);
>> >              String href =
>> > uriBuilder.path(uniqueKey).build().toString();
>> > in each MBean.
>> >
>> >
>> > (Actually, the result is something I never studied before. This is a
>> > very
>> > interesting topic. I will spend more time on it.)
>>
>> Indeed, it's interesting.
>>
>> You actually need to use uriInfo.getBaseUriBuilder() instead and add
>> "mbean" segment followed by some
>> unikey key. Using uriInfo.getBaseUriBuilder() will make sure that
>> irrespectively of whether you have a /list or /service/* or /type/*
>> query, you will alway get the same result for MBean href.
>>
>> More comments below.
>>
>> >
>> > My current response on this url: http://localhost:8080/services/jmx/
>>
>> > <MBeans>
>>
>> >    <MBean href="http://localhost:8080/services/jmx/list/0/1/2/3/4/5";>
>> >       <attribute>
>> >          <type>MBeanServerDelegate</type>
>> >       </attribute>
>> >
>> > <canonicalName>JMImplementation:type=MBeanServerDelegate</canonicalName>
>> >       <domain>JMImplementation</domain>
>> >    </MBean>
>>
>>
>> MBeans which are not in the org.apace.cxf domain have to be dropped.
>> We can have the name of the domain injected as a property in the
>> future. At the moment have a 'final String DOMAIN_NAME' constant and
>> use it to filter out non-CXF MBeans
>>
>> The other note is that it should always be
>> "http://localhost:8080/services/jmx/mbean/{someuniquekey}";
>> with the key being 1, 2, or something more descriptive which can
>> uniquely identify a given MBean. You probably need to keep a
>> ConcurrentHashMap, where keys are 1, 2, and values are canonical
>> names, something like that, so that when you get a request like
>> "http://localhost:8080/services/jmx/mbean/1"; you can retrieve the
>> corresponding Object name and do something with it
>>
>> >    <MBean href="http://localhost:8080/services/jmx/list/0/1";>
>> >       <attribute>
>> >          <busId>cxf33425430</busId>
>> >          <port>"JMXServer"</port>
>> >          <service>"{http://server.gsoc.apache.org/}JMXServer";</service>
>> >          <type>Bus.Service.Endpoint</type>
>> >       </attribute>
>> >
>> >
>> > <canonicalName>org.apache.cxf:bus.id=cxf33425430,port="JMXServer",service="{http://server.gsoc.apache.org/}JMXServer",type=Bus.Service.Endpoint</canonicalName>
>> >       <domain>org.apache.cxf</domain>
>> >    </MBean>
>>
>> This bean has to be excluded as well, at least by default.
>> What you can do in the short term is to qualify the jmx server
>> endpoint like this:
>> <jaxrs:server xmlns:s="http://cxf.apache.org/jmx";
>> serviceName="s:JMXServer" address="/jmx">
>> <property name="serviceName"
>> value="{http://cxf.apache.org/jmx}JMXServer"/>
>> </jaxrs:server>
>>
>> This will give you enough info for checking MBeans which have
>> 'service' attribute and blocking the one which matches this
>> serviceName. Another solution is use jaxrs:property or jaxws:property
>> to indicate that a given endpoint should not be JMX-exposed and update
>> InstrumnetationManager to check such a property - perhaps we can do it
>> later
>>
>> >
>> > Of course, as you required, I format the output.
>>
>> Sorry, I may've confused you, please don't format,
>>
>> thanks, Sergey
>>
>> >
>> > Regards:
>> > Shenglin Qiu
>> >
>> >
>



-- 
Sergey Beryozkin

Application Integration Division of Talend
http://sberyozkin.blogspot.com

Reply via email to