Hi All, as there is no so many interest on supporting OSGi in the GWT community (the related issue has only 5 votes: https://code.google.com/p/google-web-toolkit/issues/detail?id=8424 and I know all of those who have starred it :-D ), I wonder if it is more appropriate to make OSGi release under org.apache.servicemix.bundles.
It has been done in the past (for "org.apache.servicemix.bundles/org.apache.servicemix.bundles.gwt-user/2.4.0_1" and "org.apache.servicemix.bundles/org.apache.servicemix.bundles.gwt-dev/2.4.0_1"). Now it is going to be released GWT version 2.6.0 and I believe it should be released only gwt-servlet artifact with OSGi headers (so "org.apache.servicemix.bundles/org.apache.servicemix.bundles.gwt-servlet/2.6.0_1"). Could someone point me to the right process (where is the source code of org.apache.servicemix.bundles.*, where to open related issues, where to discuss them, who to involve in the approval process) so I can try to push and support for this proposal? Thank you!!! Cristiano 2013/11/19 Cristiano Costantini <[email protected]> > Hi all! > Just an update about my ongoing effort to OSGIfy GWT. > > I did proposed a patch to GWT community and to validate it I've adapted 5 > significant examples from the GWT distribution to run on Apache Karaf, > (more precisely I used ServiceMix 4.5.3 but I'm not using neither Camel, > CXF or ActiveMQ). > > You can find the examples here: > https://github.com/cristcost/gwt-karaf-examples > > They require GWT compiled using this patch of mine > https://gwt-review.googlesource.com/#/c/5351/ > If someone want to try them out, I will be glad to help and give more > detailed instructions. > > Actually there is no so much interest from GWT community, so I would like > you all supporting me by starring the related issue: > https://code.google.com/p/google-web-toolkit/issues/detail?id=8424 > and if you are interested, apply to https://gwt-review.googlesource.com/and > perform a (non binding) review of > https://gwt-review.googlesource.com/#/c/5351/ so that the patch can be > noticed more. > > > The patch is not yet ideal, as the .bnd file contains some "workaround" to > address complex dependencies in the GWT jar, but I hope these can be > addressed by a refactoring in GWT package structure in next release. Also, > there is a rare issue when two applications are deployed together and use > "com.google.web.bindery.requestfactory.server.RequestFactoryServlet". > Anyhow I would like it to be approved for the upcoming final release of > GWT 2.6.0 which is expected beginning of december, so that community can > start developing first prototype applications using this architecture. > > To go back to the examples, they actually don't make full use of OSGi > capabilities (no OSGi service is used for this) but me and some friends are > working on a *full* demo application that make use of the full ServiceMix > stack and have a GWT front-end deployed on ServiceMix. For this demo, stay > tuned on this other github project https://github.com/cristcost/sensormix > We would like to have it working on next version of GWT (2.6.0) and also > next version of ServiceMix (4.6.0). We would like to finish it before mid > december, and we will present it at next "GDG Firenze Happy Hour" meeting > that should be next 11th of December (you are welcome to join if you make a > stop in Italy). > > I hope this topic interests you and if you like it I will be glad to have > feedback about this so to encourage me and my friends ;-) > Finally, we are open to any suggestion. > > Thank you > > Cristiano > > > > > 2013/11/8 Cristiano Costantini <[email protected]> > >> Hi all, >> I have followed Gert suggestion and I have a small patch that integrate >> osgi-fication of GWT-Servlet in the GWT ant build. >> >> I have one question before submitting the patch. The bnd property files >> looks like this: >> >> Bundle-Name: Google Web Toolkit :: Servlet >> Bundle-SymbolicName: gwt-servlet >> Bundle-Version: @version@ >> Export-Package: *;version=@version@ >> Import-Package: javax.servlet.*, !com.google.gwt.*, *;resolution:=optional >> >> the instruction !com.google.gwt.* generates the header "Ignore-Package:", >> and I have never seen it header before, >> but if I leave the configuration with just "Import-Package: >> *;resolution:=optional", I get a manifest with a huge list of optional >> package imports. >> >> I'm confident that the bundle really don't need to import packages inside >> com.google.gwt.* so excluding them seems more optimized. >> But I was not expecting the Ignore-Package header, and I don't know how >> to interpret it. >> >> So, which one of the two configuration should I use? >> Import-Package: *;resolution:=optional ==> more conservative solution >> Import-Package: javax.servlet.*, !com.google.gwt.*, >> *;resolution:=optional ==> probably more optimized >> >> both options works on my test (but it is a simple one). >> >> Thank you again. >> Cristiano >> >> >> >> >> 2013/11/6 Gert Vanthienen <[email protected]> >> >>> Hi Cristiano, >>> >>> >>> For the Import-Package, you should be able to append the resolution >>> directive with a ;, just like you do with the maven-bundle-plugin >>> instructions. Something like *;resolution:=optional should work fine, >>> I think. >>> >>> For the properties, my first suggestion would be to just use plain Ant >>> to copy the file into a working directory and filter those property >>> values first and then point <bnd> to the filtered file, but it looks >>> like there's a <bndexpand> task as well that might be helpful, cfr. >>> >>> https://github.com/bndtools/bnd/wiki/%5Bant%5D-Loading-and-Expanding-Shared-Headers-or-Properties >>> >>> >>> Regards, >>> >>> Gert Vanthienen >>> >>> >>> On Wed, Nov 6, 2013 at 10:14 AM, Cristiano Costantini >>> <[email protected]> wrote: >>> > Hi all >>> > >>> > Short story: >>> > - Using "Import-Package: *" generates mandatory imports, >>> > do you know how to instruct bnd tool in the .bnd property file to scan >>> > imports and set them as with "resolution:=optional"? >>> > >>> > - "Bundle-Version: 2.6.0.rc1" is hard coded, >>> > do you know how to use external Ant variables in a .bnd property file >>> when >>> > using Ant tasks? >>> > >>> > >>> > Long story: >>> > I have made a GWT demo project that works into Servicemix 4.5.3 (I will >>> > publish it as soon as I have some more time), >>> > by now it resolves the dependency with gwt-servlet by installing the >>> > following bundle: >>> > install -s >>> > >>> wrap:mvn:com.google.gwt/gwt-servlet/${gwt.version}$Bundle-SymbolicName=gwt-servlet >>> > >>> > It creates a huge manifest for the GWT-Servlet, it heavily make use of >>> > optional imports, the demo is just a simple example with 1 server side >>> GWT >>> > Rpc Service (-> a servlet), but it works. >>> > >>> > I then tried to automate the generation of OSGi Manifest into the build >>> > lifecycle of GWT so that the original Jar in the GWT distribution is >>> ready >>> > for deployment to OSGi without wrapping it, but here things get a >>> little >>> > harder. >>> > >>> > The "bnd" ant task is hard to fit GWT lifecycle as the GWT-Servlet Jar >>> is a >>> > subset of classes extracted from GWT-User and GWT-Dev. >>> > I think using "bndwrap" ant task and post process GWT-Servlet is >>> > preferable. >>> > >>> > I tried first by wrapping the Jar on the command line and I made a >>> simple >>> > .bnd file with the following options contents: >>> > Bundle-Name: Google Web Toolkit :: Servlet >>> > Bundle-SymbolicName: gwt-servlet >>> > Bundle-Version: 2.6.0.rc1 >>> > Export-Package: * >>> > Import-Package: * >>> > >>> > I got an osgi-fied bundle, I deployed it replacing the one created with >>> > wrap: deployer but this new one does not get resolved: >>> > the difference is that the made with wrap deployer sets all Imports as >>> > optional. >>> > It sound reasonable to me, as the classes in the GWT-Servlet have been >>> > accurately selected by GWT committers (remember GWT-Servlet comes from >>> a >>> > subset of GWT-Dev and GWT-User) and may have many java imports of >>> classes >>> > not required on the server but are still referenced in the bytecode. >>> > >>> > Ideally, we should create a .bnd file that only specify the right >>> Package >>> > Imports and Exports, but I don't have ideas on how to make it simple. >>> > >>> > I guess the best would be to make a first step and achieve having an >>> > initial bundle with imports as optional but I don't know how to specify >>> > this to bnd for Import-Packages... (see initial question). >>> > Anyone can suggest me how to do it? >>> > >>> > >>> > Here, if someone is interested, are the headers of the two bundles: >>> > This one works >>> > >>> > >>> https://gist.github.com/cristcost/7332635#file-gwt-servlet-osgi-headers-with-wrap >>> > >>> > This one don't >>> > >>> > >>> https://gist.github.com/cristcost/7332635#file-gwt-servlet-osgi-headers-from-command-line-bnd >>> > >>> > I'll keep you updated as I try to progress further. >>> > ;-) >>> > >>> > Cristiano >>> > >>> > >>> > PS. Here are the Ant rules for selecting what to put inside the >>> GWT-Servlet >>> > JAR. Any Idea on how to create more fine tuned .bnd files from these >>> rules? >>> > >>> > <fileset dir="${gwt.dev.bin}"> >>> > <include name="com/google/gwt/dev/asm/**" /> >>> > <include name="com/google/gwt/dev/util/Name*.class" /> >>> > <include name="com/google/gwt/dev/util/StringKey.class" /> >>> > <include name="com/google/gwt/util/tools/shared/**" /> >>> > <include name="com/google/gwt/core/shared/**" /> >>> > </fileset> >>> > <fileset dir="${gwt.user.bin}"> >>> > <exclude name="**/rebind/**" /> >>> > <exclude name="**/tools/**" /> >>> > <exclude name="**/super/**" /> >>> > <exclude name="com/google/gwt/json/**" /> >>> > <exclude name="com/google/gwt/junit/*" /> >>> > <exclude name="com/google/gwt/junit/client/GWTTestCase.*" /> >>> > <exclude name="com/google/gwt/junit/remote/**" /> >>> > <exclude name="com/google/gwt/junit/server/**" /> >>> > <exclude name="com/google/gwt/benchmarks/*" /> >>> > <exclude name="**/*.gwtar" /> >>> > </fileset> >>> >> >> >
