Hi Marcin, Thanks for providing. I have taken a look and commented on your patch in the issue.
Ragards Felix Marcin Wilkos schrieb: > Hi, > I've just attached patch to https://issues.apache.org/jira/browse/FELIX-1015 > I hope it works like you wanted. Could you check it? > Greetings, > Marcin Wilkos > > 2009/6/10 Felix Meschberger <fmesc...@gmail.com> > >> Hi, >> >> Gert Vanthienen schrieb: >>> Felix, >>> >>> Like I said, I really do get your point about the dependencies. Not >>> sure I follow with the argument that it would lock the console into a >>> single presentation technology, because you can plugin different view >>> technologies into jersey and at this point in time, the only view >>> technology that's available for the web console plugins is using a >>> plain Servlet. >> Sure, but I my application does not care about Jersey, you are back to >> field one. >> >>> My suggestion would be to put the JAX-RS bean in the OSGi Service >>> Registry, just like we to with the Servlet right now. >> Ok, that would be good. Though.... >> >>> However, I do >>> like your suggestion for somehow building a bridge and hide the entire >>> view technology behind the Servlet (which is what almost all view >>> technologies eventually boil down to anyway). >> Great. So lets stay on the Servlet track for now ;-) >> >>> This would require us >>> to get the brandability issue solved, so we no longer need to work >>> with the AbstractConsolePlugin to draw the headers. So I guess it >>> would make sense to make that the next task item on Marcin's list. >> Absolutely ! >> >> I see a two-step approach here: >> >> (1) We keep the AbstractConsolePlugin but add support for branding to >> it. This helps all existing AbstractConsolePlugin extensions since they >> don't have to be modified. This is part of FELIX-1015 [1] for which >> Thomas Diesler already proposed a solution. >> >> (2) Add support for plain servlets. When the console encounters a >> Servlet not extending the AbstractWebConsolePlugin, it would create a >> proxy internally, which extends the AbstractWebConsolePlugin and >> forwards to the registered servlet. This would be part of FELIX-1043 >> [2]. I have attached a patch implementing this proposal. >> >> Regards >> Felix >> >> >> [1] https://issues.apache.org/jira/browse/FELIX-1015 >> [2] https://issues.apache.org/jira/browse/FELIX-1043 >> >>> Regards, >>> >>> Gert Vanthienen >>> ------------------------ >>> Open Source SOA: http://fusesource.com >>> Blog: http://gertvanthienen.blogspot.com/ >>> >>> >>> >>> 2009/6/10 Felix Meschberger <fmesc...@gmail.com>: >>>> Hi Gert >>>> >>>> Gert Vanthienen schrieb: >>>>> Felix, >>>>> >>>>> You're right about the dependencies obviously: the plugin bundle would >>>>> need to depend on the JAXRS API but the web console itself would >>>>> depend on the API and some implementation like Jersey. That would be >>>>> the biggest disadvantage in my mind, because at this point in time the >>>>> felix web console is a very lightweight solution that doesn't need any >>>>> dependencies. >>>> That is exactly one of my biggest issues ... In addition it would "lock" >>>> the console into a single presentation technology. There are others like >>>> JSF, Apache Sling, Wicket, etc. These would all be left out of the door. >>>> >>>> Honestly, I don't like the idea of adding Jersey to an OSGi framework >>>> just for the sake of the Web Console. This does not sound right. >>>> >>>>> On the other hand, this solution would give us some benefits as well. >>>>> The JAXRS bean I mentioned is just a POJO with methods and >>>>> annotations. This will map the methods to URIs, allowing us to easily >>>>> provide multiple uris from a single plugin. So we can have methods >>>>> there for serving the main page content but others could handle POSTs >>>>> or serve JSON or XML. >>>> I understand and agree. But you said "*register* a JAX-RS bean". Where >>>> would that bean be registered ? >>>> >>>>> As for rendering the reponse, you can still do that using a plain >>>>> PrintWriter as we do in the Servlets now if we want a lightweight >>>>> plugin, but it would also become possible use another kind of view >>>>> technology (e.g. JSP or Lift templates) if people prefer that or to >>>>> serve other kinds of resources (images, css style sheets, ...) >>>> Sure, I completely agree, that supporting other rendering technology (I, >>>> of course have a slight bias towards Apache Sling ;-) ) would be nice. >>>> But this should IMHO be possible without tying the Web Console to all >>>> these technologies. >>>> >>>> I opt for keeping the Web Console lightweight defining a simple API for >>>> extensions. To connect with other rendering technology, bridges could be >>>> defined. For example a Jersey bridge, which proxies JAX-RS beans into >>>> the Web Console registering proxy Servlets on behalf of the JAX-RS >> beans. >>>> Regards >>>> Felix >>>> >>>>> Regards, >>>>> >>>>> Gert Vanthienen >>>>> ------------------------ >>>>> Open Source SOA: http://fusesource.com >>>>> Blog: http://gertvanthienen.blogspot.com/ >>>>> >>>>> >>>>> >>>>> 2009/6/9 Felix Meschberger <fmesc...@gmail.com>: >>>>>> Hi, >>>>>> >>>>>> Gert Vanthienen schrieb: >>>>>>> L.S., >>>>>>> >>>>>>> How about adding support for using JAX-RS resource beans for >> extending >>>>>>> the felix web console? So instead of registering a servlet, you can >>>>>>> register a JAX-RS bean. One of the methods on the bean can be used >> to >>>>>>> render the 'main' contents of the web console plugin page, but you >> can >>>>>>> also add other methods and annotate them with GET/POST for providing >>>>>>> JSON resources or handling form submits. >>>>>>> >>>>>>> This will also remove the dependency on the felix web console bundle >>>>>>> for the extension bundle while making it easier to implement multiple >>>>>>> uris/actions without having to override the doGet/doPost methods and >>>>>>> allow us to use some other template engine/language (JSP, Lift, ...) >>>>>>> in the extension bundle without the need for the felix web console to >>>>>>> be aware of those. >>>>>>> >>>>>>> The only real drawback I see is the fact that the Felix Web Console >>>>>>> bundle itself would get another dependency, it would need the JAX-RS >>>>>>> API. >>>>>>> >>>>>>> Wdyt? >>>>>> What else would be required ? >>>>>> Wouldn't we need an implementation of the API to glue this all >> together? >>>>>> What do you mean by "register a JAX-RS bean" ? >>>>>> >>>>>> IMHO registering a javax.servlet.Service is very appropriate in the >> OSGi >>>>>> context. >>>>>> >>>>>> Regards >>>>>> Felix >>>>>> >>>>>>> Gert Vanthienen >>>>>>> ------------------------ >>>>>>> Open Source SOA: http://fusesource.com >>>>>>> Blog: http://gertvanthienen.blogspot.com/ >>>>>>> >>>>>>> >>>>>>> >>>>>>> 2009/6/9 Felix Meschberger <fmesc...@gmail.com>: >>>>>>>> Hi, >>>>>>>> >>>>>>>> Moloney, Tim M schrieb: >>>>>>>>> I quickly discovered that things are not what they appeared. I >> didn't >>>>>>>>> investigate how the core plugins are loaded but the features plugin >>>>>>>>> appears to be loaded via Spring. Loading plugins this way doesn't >> use >>>>>>>>> AbstractWebConsolePlugin as it is "advertised" and many things just >>>>>>>>> don't work (activate() and deactivate() are never called, >>>>>>>>> getBundleContext() returns null, etc). It looks like a lot of the >>>>>>>>> webconsole infrastructure is hidden in >>>>>>>>> org.apache.felix.webconsole.internal so to get a plugin working >> with any >>>>>>>>> reasonable functionality would require duplicating a lot of those >>>>>>>>> classes. >>>>>>>> That *is* a problem currently -- and lacking documentation on how to >>>>>>>> extend the web console. >>>>>>>> >>>>>>>> Currently you have to basically extend the AbstractWebConsolePlugin >>>>>>>> abstract class and implement the renderContent, getLabel, and >> getTitle >>>>>>>> methods. This method is called to render the "inner contents" of a >> page. >>>>>>>> The navigation, header and footer are rendered by the >>>>>>>> AbstractWebConsolePlugin itself. >>>>>>>> >>>>>>>> The class you so created must be registered as a OSGi service with >> the >>>>>>>> interface javax.servlet.Servlet. For the web console to pick up this >>>>>>>> Servlet service as service property named "felix.webconsole.label" >> must >>>>>>>> be set to a single, non-empty string providing the URL path segment >> of >>>>>>>> the plugin page. >>>>>>>> >>>>>>>> That's all. >>>>>>>> >>>>>>>> If you want to handle updates (POST requests, that is), you >> implement >>>>>>>> the doPost method. You may also overwrite the doGet method if you >> want >>>>>>>> to add to or replace the standard GET method handling. >>>>>>>> >>>>>>>> Plugin Initialization: You have to initialize the plugin yourself by >>>>>>>> calling the activate(BundleContext) method before registering the >> plugin >>>>>>>> as a service. At the end you should call the deactivate() method to >>>>>>>> cleanup the plugin. >>>>>>>> >>>>>>>> For example, if you use Declarative services just call the >>>>>>>> activate(BundleContext) from your component's >> activate(ComponentContext) >>>>>>>> method and likewise the deactivate from the component's >>>>>>>> deactivate(ComponentContext) method. >>>>>>>> >>>>>>>> This way of extending the console is not super-great (though it >> works >>>>>>>> great once you get around the corners). For instance it creates a >>>>>>>> dependency on the Web Console bundle importing the o.a.f.webconsole >>>>>>>> package. Also the initialization is not properly defined. So I am >>>>>>>> thinking along the lines of supporting plain servlets (anyhting >>>>>>>> implementing javax.servlet.Servlet) and providing easier integraiton >> points. >>>>>>>> I am going to update the web console documentation page [1] with >> some >>>>>>>> more information here .... >>>>>>>> >>>>>>>>> Perhaps I missed the proper way to initialize a webconsole plugin >> and >>>>>>>>> get at the utility methods. If not, I would suggest refactoring >> the >>>>>>>>> infrastructure of webconsole so that extending >> AbstractWebConsolePlugin >>>>>>>>> does work as expected. >>>>>>>> How do you define "work as expected" ? >>>>>>>> >>>>>>>> Regards >>>>>>>> Felix >>>>>>>> >>>>>>>> [1] http://felix.apache.org/site/apache-felix-web-console.html >>>>>>>> >>>>>>>>> Tim Moloney The reasonable man adapts himself to >>>>>>>>> MRSL the world; the unreasonable one persists >>>>>>>>> 2015 Cattlemen Road in trying to adapt the world to himself. >>>>>>>>> Sarasota, FL 34232 Therefore all progress depends on the >>>>>>>>> (941) 377-6775 x208 unreasonable man. George Bernard Shaw >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>>> -----Original Message----- >>>>>>>>>> From: Marcin Wilkos [mailto:marcin.wil...@gmail.com] >>>>>>>>>> Sent: Monday, June 08, 2009 17:32 >>>>>>>>>> To: dev@felix.apache.org >>>>>>>>>> Subject: Google Summer of Code >>>>>>>>>> >>>>>>>>>> Hi, >>>>>>>>>> I'm Marcin Wilkos. Like Gert Vanthienen wrote before I'm working >> on >>>>>>>>>> webconsole for Karaf and ServiceMix as GSoC project. I'll be >>>>>>>>>> sending weekly >>>>>>>>>> reports to this list. >>>>>>>>>> In last week I focused on first extension for felix web >>>>>>>>>> console, which lists >>>>>>>>>> Karaf features. I created JIRA issue for this and uploaded a >>>>>>>>>> patch. Gert >>>>>>>>>> checked it and uploaded to svn. >>>>>>>>>> Regards, >>>>>>>>>> Marcin Wilkos >>>>>>>>>> >