Hi Sergey: I was pulling name list out and when I type 'se', the first one now is secret...@apache.org, my mistake. I pulled your comment out and made @Todo replies: > > Well, /soapdemo is confusing. > Have the context named as "/services" or "/application" and set the > address of SOAP endpoint as "/soap/greeter" or simply "/greeter" as > you do now. > Yes, it's done. I will use project name services
> I think you meant to say: > http://localhost:8080/soapdemo/jmx > which is the address of your JMX server endpoint which should be changed to > say"http://localhost:8080/services/jmx". Yes, I changed the project name as well as context path as you mentioned: Project name: services Context path: services > http://localhost:8080/soapdemo/jmx/service/{http://server.gsoc.apache.org/}* @Todo: I will get this done real quick. to make it like http://localhost:8080/services/jmx/service/{http://server.gsoc.apache.org/}* > OK. Please remove MBeanCollection wrapper, you have another wrapper, MBeans. > No need to have quotes around endpointName's value.How about having MBean > representation structured like this: > <MBean> > <domain>org.apache.cxf</domain> > <canonicalName> > org.apache.cxf:bus.id=cxf5663550, > port="CustomerServiceImpl", > service="{http://server.gsoc.apache.org/}CustomerServiceImpl", > type=Bus.Service.Endpoint > </canonicalName> > <!-- this is another representation of canonical's name > <attributes> > <type>Bus.Service.Endpoint</type> > <service>{http://server.gsoc.apache.org/}CustomerServiceImpl</service> > <endpoint>CustomerServiceImpl</endpoint> > <attributes> > <!--This can be ignored for now<properties/>--> > </MBean> @Todo: I will remove <MBeanCollection>, and put <attributes> in. > <MBean href="http://localhost:8080/soapdemo/jmx/mbean/1"> @Todo: I will add it real quick. > So please update MBean class to have "href" attribute (with@XmlAttribute). > Have a '@Context UriInfo uriinfo' field in JMXServerclass. > When you create a response for /list or /service/*, etc, > useUriInfo to get to the *base* UriBuilder which will represent a URIlike > "http://localhost:8080/soapdemo/jmx". > Next add "mbean" and then a number like 1/2/etc which identifies a particular > MBean, > may be ashort objectname instead of the compete canonical name, etc, > so and have UriBuilder to return > you'http://localhost:8080/soapdemo/jmx/mbean/1', etc: > String href = builder.path("mbean").path(someUniqueKey).build().toString() @Todo: I will have this unique key implemented in href="....", and: @Context UriInfo uriinfo > Your JMXServer should have a subresource locator, with @Path("mbean") and > without HttpMethod. > This locator will return something like MBeanResource and that class,at this > stage, > will have *only*a single @GET resource method with @Path("{key}") and > which will return the above MBean representaion only, without MBeans wrapper: > GET http://localhost:8080/soapdemo/jmx/mbean/1 @Todo: subresource locator, with @Path("mbean") and without HttpMethod: I will have this done. Thank you very much. Regards: Shenglin Qiu > Date: Wed, 18 May 2011 11:38:24 +0100 > Subject: Re: Expose MBeans in CXF > From: sberyoz...@gmail.com > To: dev@cxf.apache.org > > Hi Shenglin > > Well done, you are progressing well. > > Note that you don't have to start formatting the updates to the dev > list, it's just > the work as usual, keep it simple please :-). And don't CC to the secretary > :-) > > Some comments below. > > > I am fully upgrade it to 2.4.0, I have some testing phase exceptions > > ocurring even I don't have a test case in maven test src folder. I will > > figure this out later after this doc. > > > If you are seeing some unrelated test failures when building the trunk > then add '-Pfastinstall' > > > The RAR src is attached, hope this 'soap' won't confuse you, it actually has > > 1 soap inbound and 2 restful inbounds. I am always stuck at the naming, > > previous demoserver has been down when I was upgrading, that's another > > story, and I will fix it. > > > > Well, /soapdemo is confusing. > Have the context named as "/services" or "/application" and set the > address of SOAP endpoint as "/soap/greeter" or simply "/greeter" as > you do now. > > <snip/> > > > > Here are the 3 enabled inbound service, including 1 soap webservice and 2 > > Restful service:(They are up and running) > > > > http://localhost:8080/soapdemo/greeter?wsdl > > > > http://localhost:8080/soapdemo/customerservice/customers > > > > http://localhost:8080/soapdemo/customerservice/customer/firstname/Lois > > > > http://localhost:8080/soapdemo/customerservice/customer/id/1 > > > > http://localhost:8080/soapdemo/userservice/users > > > > http://localhost:8080/soapdemo/userservice/user/1 > > > > OK, lets have > http://localhost:8080/services/greeter > http://localhost:8080/services/customerservice > http://localhost:8080/services/userservice > > > > > > > And here is the demo inbound Restful service url which is holding the above > > 3 services MBeans: > > > > http://localhost:8080/soapdemo/jmx/service/%7Bhttp:%2F%2Fserver.gsoc.apache.org%2F%7DCustomerServiceImpl > > > > I think you meant to say: > > > http://localhost:8080/soapdemo/jmx > > which is the address of your JMX server endpoint which should be changed to > say > "http://localhost:8080/services/jmx". > > > which is: > > > > http://localhost:8080/soapdemo/jmx/service/{http://server.gsoc.apache.org/}CustomerServiceImpl > > > > http://localhost:8080/soapdemo/jmx/objectname/org.apache.cxf:type=Bus.Service.Endpoint,* > > > > http://localhost:8080/soapdemo/jmx/type/Bus.Service.Endpoint > > > > http://localhost:8080/soapdemo/jmx/list > > > > > > Ok, so what are you saying is that you can have a list of all MBeans > returned, using "/list" or a list of all MBeans which have a matching > objectname or attribute (such as type, service, port, etc) > > I like "http://localhost:8080/soapdemo/jmx/list and > http://localhost:8080/soapdemo/jmx/objectname/" though I think we can > simplify those, but right now make sure that you have something like > @Path("{attribute}/{value}") for a method which serves /service/*, and > /type/* requests. because 'service' and 'type' are attributes and we > can have many attributes. > > > > > Request: > > > > http://localhost:8080/soapdemo/jmx/service/%7Bhttp:%2F%2Fserver.gsoc.apache.org%2F%7DCustomerServiceImpl > > > > Note: this is actually an url encoded string which is from: > > > > http://localhost:8080/soapdemo/jmx/service/{http://server.gsoc.apache.org/}CustomerServiceImpl > > > OK, we should also be able to support > > http://localhost:8080/soapdemo/jmx/service/{http://server.gsoc.apache.org/}* > > which means get all MBeans which have a service attribute with > namespace equal to 'http://server.gsoc.apache.org' > > > > Response: > > > > <MBeanCollection> > > > > <MBeans> > > > > <MBean> > > > > > > <canonicalName>org.apache.cxf:bus.id=cxf5663550,port="CustomerServiceImpl",service="{http://server.gsoc.apache.org/}CustomerServiceImpl",type=Bus.Service.Endpoint</canonicalName> > > > > <domain>org.apache.cxf</domain> > > > > > > <endpointName>"{http://server.gsoc.apache.org/}CustomerServiceImpl"</endpointName> > > > > </MBean> > > > > </MBeans> > > > > </MBeanCollection> > > > OK. Please remove MBeanCollection wrapper, you have another wrapper, MBeans. > No need to have quotes around endpointName's value. > How about having MBean representation structured like this: > > <MBean> > <domain>org.apache.cxf</domain> > <canonicalName>org.apache.cxf:bus.id=cxf5663550,port="CustomerServiceImpl",service="{http://server.gsoc.apache.org/}CustomerServiceImpl",type=Bus.Service.Endpoint</canonicalName> > <!-- this is another representation of canonical's name > <attributes> > <type>Bus.Service.Endpoint</type> > <service>{http://server.gsoc.apache.org/}CustomerServiceImpl</service> > <endpoint>CustomerServiceImpl</endpoint> > <attributes> > <!-- > This can be ignored for now > <properties/> > --> > </MBean> > > This will make it simpler for consumers to understand - we may support > returning canonicalNames only or alternative, structured reps but for > now just have MBean representation updated as suggested. > > Now, there's one thing which is missing from the above representation > and it is a link to a resource which will deal with a particular MBean > (possible updates of properties, handling the notifications). We need > to put it all into a more practical surface so it should be something > like > > <MBeans> > <MBean href="http://localhost:8080/soapdemo/jmx/mbean/1"> > <domain>org.apache.cxf</domain> > <canonicalName>org.apache.cxf:bus.id=cxf5663550,port="CustomerServiceImpl",service="{http://server.gsoc.apache.org/}CustomerServiceImpl",type=Bus.Service.Endpoint</canonicalName> > <MBean> > <MBean href="http://localhost:8080/soapdemo/jmx/mbean/2"> > <domain>org.apache.cxf</domain> > <canonicalName>org.apache.cxf:bus.id=cxf5663551,port="UserServiceImpl",service="{http://server.gsoc.apache.org/}UserServiceImpl",type=Bus.Service.Endpoint</canonicalName> > <MBean> > </MBeans> > > where http://localhost:8080/soapdemo/jmx/mbean/1, > http://localhost:8080/soapdemo/jmx/mbean/2, etc, uniquely identify > those individual MBeans only. > > So please update MBean class to have "href" attribute (with > @XmlAttribute). Have a '@Context UriInfo uriinfo' field in JMXServer > class. When you create a response for /list or /service/*, etc, use > UriInfo to get to the *base* UriBuilder which will represent a URI > like "http://localhost:8080/soapdemo/jmx". Next add "mbean" and then a > number like 1/2/etc which identifies a particular MBean, may be a > short objectname instead of the compete canonical name, etc, so and > have UriBuilder to return you > 'http://localhost:8080/soapdemo/jmx/mbean/1', etc: > > String href = builder.path("mbean").path(someUniqueKey).build().toString() > > Now, the question is how to handle requests like > 'http://localhost:8080/soapdemo/jmx/mbean/1' > > Your JMXServer should have a subresource locator, with @Path("mbean") > and without HttpMethod. > This locator will return something like MBeanResource and that class, > at this stage, will have *only* > a single @GET resource method with @Path("{key}") and which will > return the above MBean representaion only, without MBeans wrapper: > > GET http://localhost:8080/soapdemo/jmx/mbean/1 > > returns > > <MBean href="http://localhost:8080/soapdemo/jmx/mbean/1"> > <domain>org.apache.cxf</domain> > <canonicalName>org.apache.cxf:bus.id=cxf5663550,port="CustomerServiceImpl",service="{http://server.gsoc.apache.org/}CustomerServiceImpl",type=Bus.Service.Endpoint</canonicalName> > </MBean> > > Having a subresource handly because at the next step we will start > working on dealing with notifications/updatiing properties or invoking > operations somehow when applicable. > > Does it make sense ? If you have any questions or suggestions - please > ask them here or ping me on #cxf > I guess we have two weeks or so and then I'd like to discuss how > LogBrowser can be extended to act as a consumer of your JMXServer > > I'm removing the rest of your message to make it shorter, everything > you posted there looked OK, those who are interested can check the > previous message if needed for more info. > > You are progressing very well. > > Thanks, Sergey > > > > > Thank you. > >ld > > Regards: > > Shenglin Qiu > >