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 >