Hi Sergey: I attached the src and due to I am working on the mvn project only sync to svn, so I will take some time and sync this to github.
And here is an update on the request: Self-defined demo inbound service: http://localhost:8080/services/greeter?wsdl http://localhost:8080/services/customerservice/customers http://localhost:8080/services/customerservice/customer/firstname/Lois http://localhost:8080/services/customerservice/customer/id/1 http://localhost:8080/services/userservice/users http://localhost:8080/services/userservice/user/1 /** * Specification: * Function 1: * Jmx Server: * sub-resource locator * http://localhost:8080/services/jmx/property/id/0 * http://localhost:8080/services/jmx/property/id/1 * ... * * * Function 2: * Note: search by bus.id, bus.id will be changed on every time server had been bounced. * http://localhost:8080/services/jmx/objectname/org.apache.cxf:* * http://localhost:8080/services/jmx/objectname/org.apache.cxf:bus.id=cxf28619341,* * ... * http://localhost:8080/services/jmx/objectname/org.apache.cxf:port=%22CustomerServiceImpl%22,* * http://localhost:8080/services/jmx/objectname/org.apache.cxf:bus.id=cxf28619341,port=%22SoapPort%22,type=Bus.Service.Endpoint,* * http://localhost:8080/services/jmx/objectname/org.apache.cxf:type=Bus.Service.Endpoint,* * http://localhost:8080/services/jmx/objectname/org.apache.cxf:bus.id=cxf28619341,service=%22%7Bhttp%3A%2F%2Fserver.gsoc.apache.org%2F%7DCustomerServiceImpl%22,type=Bus.Service.Endpoint,* * http://localhost:8080/services/jmx/objectname/org.apache.cxf:service=%22%7Bhttp%3A%2F%2Fserver.gsoc.apache.org%2F%7DCustomerServiceImpl%22,* * * Function 3: * Search by service: * http://localhost:8080/services/jmx/property/service/%7Bhttp:%2F%2Fserver.gsoc.apache.org%2F%7DCustomerServiceImpl * http://localhost:8080/services/jmx/property/service/%7Bhttp:%2F%2Fserver.gsoc.apache.org%2F%7DUserServiceImpl * * Note, above queries are searching these 2, but replace by url encoding from: * {http://server.gsoc.apache.org/}UserServiceImpl * {http://server.gsoc.apache.org/}CustomerServiceImpl * * Search by type: * http://localhost:8080/services/jmx/property/type/Bus.Service.Endpoint * * Search by port: * http://localhost:8080/services/jmx/property/port/UserServiceImpl * http://localhost:8080/services/jmx/property/port/CustomerServiceImpl * http://localhost:8080/services/jmx/property/port/SoapPort * * Function 4: * http://localhost:8080/services/jmx/list * * */ I will ping you tomorrow morning. Thank you. Regards: Shenglin Qiu > Date: Wed, 1 Jun 2011 15:32:30 +0100 > Subject: Re: Expose MBeans in CXF > From: sberyoz...@gmail.com > To: dev@cxf.apache.org > > Hi Shenglin > > It's a step in the right direction, thanks, but JMXServer still needs > to be cleaned up quite a bit. > - as I said earlier you have 4 big functions basically duplicating > each other. We can't have a method per every attribute a given MBean > may have. Have a single function only, max two (one capturing all the > attributes, another one - dedicated to objectname/{value}). > - Introduce MBeanResource subresource instead of overloading MBean, it > will be cleaner and easier to work with > - as suggested earlier, update the domain MBean and/or MBeanAttribute > such that you could drop a big chunk of code in JMXServer where > individual attribute values are set, currently in getMbeanMap (if > (attrName.equals("service") then/else)). That is because a number of > attributes is basically unlimited, even though we have some well-known > ones > > - getMBeanMap - this is so complex I can't understand what it does. I > do understand it returns a thread-safe Map - but I'm finding it > difficult to understand how the method achieves that. Please remove > all those synchronized blocks and have ConcurrentHashMap. Have atomic > integer counter, synchronized exlicitly (in a block) if you prefer, > and try to get a simple and effective function implemented. Don't make > the logic of that function dependent on a n > I don't understand why you use "list" for creating MBean hrefs; > > - there's no need for having Mbean.id and MBean.href because > MBean.href is identifying a given MBean uniquely and thus you could > use that calculated href as a key. > > Thanks, Sergey > > > On Tue, May 31, 2011 at 5:36 PM, Shenglin Qiu <dabaip...@hotmail.com> wrote: > > > > Hi Sergey: > > > > Project has been synced to Github: > > > > Browser: > > https://github.com/dabaipang/services > > > > > > Git address: > > https://dabaip...@github.com/dabaipang/services.git > > or > > g...@github.com:dabaipang/services.git > > > > > > Thank you. > > > > > > Regards: > > Shenglin Qiu > > > > > > > >> From: dabaip...@hotmail.com > >> To: sberyoz...@gmail.com > >> CC: dev@cxf.apache.org > >> Subject: RE: Expose MBeans in CXF > >> Date: Tue, 31 May 2011 11:23:38 -0400 > >> > >> > >> Hi Sergey: > >> > >> > > Function 1: (0 - 5 is continuous, no gap) > >> > > Jmx Server: > >> > > sub-resource locator > >> > > http://localhost:8080/services/jmx/mbean/0 > >> > > http://localhost:8080/services/jmx/mbean/1 > >> > > >> > The id allocation (0, 1, etc) has to be thread safe > >> > >> Done with: > >> private synchronized Map<String, MBean> getMBeansMap(){ > >> .... > >> } > >> My reason not using synchronized block but using synchronized method is: > >> this guarantees the order on mbeansMap's initialization, so when it's > >> called by a lot of requests, the followings will have to wait, unit the > >> first one finished, after that, following requests will see mbeansMap has > >> been initialized, and simply return mbeansMap without initializing it > >> again. > >> > >> > >> > http://localhost:8080/services/jmx/objectname/org.apache.cxf:* > >> > or > >> > http://localhost:8080/services/jmx/objectname/org.apache.cxf > >> > > >> > should also work > >> > > >> > > > >> > >> http://localhost:8080/services/jmx/objectname/org.apache.cxf:* > >> is working. > >> > >> > > Due to the URL duplication with /mbean/{id}, I can't put > >> > > {searchtype}/{query}, so I put things like: > >> > > >> > Personally I'd prefer to keep a URI as minimal as possible. > >> > > >> > /mbean/{id} > >> > and > >> > {searchtype}/{query} > >> > > >> > do not duplicate each other given that /mbean/{id} is more specific > >> > than {searchtype}/{query}. > >> > Likewise /objectname/{objectname} is more specific than > >> > {searchtype}/{query}, so consider dropping /search/ part, > >> > we may have a dedicated /search handler later on. > >> > >> Done by dedicating each request per method: > >> @GET > >> @POST > >> @Path("/list") > >> public MBeanCollection list() > >> > >> @Path("/mbean/") > >> public MBean locateMBean() > >> > >> > >> @GET > >> @POST > >> @Path("/type/{query}") > >> public MBeanCollection searchMBeansByType(@PathParam("query") String > >> query) > >> > >> > >> @GET > >> @POST > >> @Path("/port/{query}") > >> public MBeanCollection searchMBeansByPort(@PathParam("query") String > >> query) > >> > >> > >> @GET > >> @POST > >> @Path("/service/{query}") > >> public MBeanCollection searchMBeansByService(@PathParam("query") > >> String query) > >> > >> > >> @GET > >> @POST > >> @Path("/objectname/{objectname}") > >> public MBeanCollection getComponent(@PathParam("objectname") String > >> objectname) > >> > >> I remembered you mentioned to handle Exceptions once, currently I am still > >> 'throws' -ing them out, I will make the try catch block. > >> Should I also add a new object which display the error or simply return > >> empty? > >> > >> > >> Thank you very much. > >> > >> > >> Regards: > >> Shenglin Qiu > >> > >> > >> > Date: Tue, 31 May 2011 10:35:36 +0100 > >> > Subject: Re: Expose MBeans in CXF > >> > From: sberyoz...@gmail.com > >> > To: dev@cxf.apache.org > >> > > >> > Hi Shenglin > >> > > >> > Good progress, some comments below > >> > > > >> > > Function 1: (0 - 5 is continuous, no gap) > >> > > Jmx Server: > >> > > sub-resource locator > >> > > http://localhost:8080/services/jmx/mbean/0 > >> > > http://localhost:8080/services/jmx/mbean/1 > >> > > >> > The id allocation (0, 1, etc) has to be thread safe > >> > > >> > > > >> > > > >> > > Function 2: > >> > > Note: search by bus.id, bus.id will be changed on every time server > >> > > had been > >> > > bounced. > >> > > http://localhost:8080/services/jmx/objectname/org.apache.cxf:bus.id=cxf28619341,* > >> > > ... > >> > that is ok, a user does not have to specify them as you demonstrated > >> > with queries like > >> > > >> > > http://localhost:8080/services/jmx/objectname/org.apache.cxf:port=%22CustomerServiceImpl%22,* > >> > I guess > >> > > >> > http://localhost:8080/services/jmx/objectname/org.apache.cxf:* > >> > or > >> > http://localhost:8080/services/jmx/objectname/org.apache.cxf > >> > > >> > should also work > >> > > >> > > > >> > > > >> > > I am only now use 2 methods to fulfill: > >> > > 1 method for service/{serivce}, port/{port}, type/{type} > >> > > 1 method for objectname/{objectname} > >> > > >> > OK > >> > > >> > > > >> > > Due to the URL duplication with /mbean/{id}, I can't put > >> > > {searchtype}/{query}, so I put things like: > >> > > >> > Personally I'd prefer to keep a URI as minimal as possible. > >> > > >> > /mbean/{id} > >> > and > >> > {searchtype}/{query} > >> > > >> > do not duplicate each other given that /mbean/{id} is more specific > >> > than {searchtype}/{query}. > >> > Likewise /objectname/{objectname} is more specific than > >> > {searchtype}/{query}, so consider dropping /search/ part, > >> > we may have a dedicated /search handler later on. > >> > > >> > The other thing I forgot to mention, please remove all those > >> > System.out.println, ping me please if you need some help with setting > >> > up a remote debugging session > >> > > >> > Thanks, Sergey > >> > > >> > > > >> > > Thank you so much! > >> > > > >> > > Regards: > >> > > Shenglin Qiu > >> > > > >> > > > > > > -- > Sergey Beryozkin > > Application Integration Division of Talend > http://sberyozkin.blogspot.com