Hi Gerard, this would mean an improvement for pax-web, cause to the date the OSGi spec has no equivalent of the context-path for servlets using the http-service Though there seems to be some thinking about it (see [1] last section) Therefore the contextpath always defaults to "/" right now. Maybe we can workaround this to make it the alias .... just thinking :)
regards, Achim [1] - http://wiki.osgi.org/wiki/WebExperience 2012/6/21 Gerard Maas <[email protected]> > Hi Achim, > > I did some further digging. > > On GWT, this is the relevant piece of code in charge of loading those > policy files: [1] > > protected SerializationPolicy doGetSerializationPolicy( > HttpServletRequest request, String moduleBaseURL, String strongName) > { > // The request can tell you the path of the web app relative to the > // container root. > String contextPath = request.getContextPath(); > > String modulePath = null; > if (moduleBaseURL != null) { > try { > modulePath = new URL(moduleBaseURL).getPath(); > } catch (MalformedURLException ex) { > // log the information, we will default > log("Malformed moduleBaseURL: " + moduleBaseURL, ex); > } > } > > I suspected the contextPath to be a potential candidate suspect in this > case. To test that theory, I deployed a simple servlet that dumps its > context. > I deployed it using WAB (MANIFEST: Webapp-Context + web.xml). In this > deployment, the servlet reports: > [getContextPath]->[/ctx] > > Then, changed the deployment to OSGi-ds with a programmatic activator > containing the resource mapping. > DefaultResourceMapping resourceMapping = new DefaultResourceMapping(); > resourceMapping.setAlias( "/ctx" ); > resourceMapping.setPath( "/war" ); > > In this case, the servlet reports: > [getContextPath]->[] > > Translated to the gwt issue --> when gwt is deployed with a WAB, it finds > its config in /ctx/app and when I use the programmatic resource mapping it > is looking into /app and therefore does not find its resources. > > Bottom line: > Webapp-Context is not equivalent to the alias. The alias does not > populate ContextPath the same way Webapp-Context does. > > Is there something we could do in this case? > > -greetz, Gerard. > > > [1] > http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/gwt/user/server/rpc/RemoteServiceServlet.java?spec=svn5045&r=5045 > > > > On Thu, Jun 21, 2012 at 1:26 PM, Achim Nierbeck > <[email protected]>wrote: > >> Hi Gerard, >> >> well the Webapp-Context is equivalent to the alias. >> So to my understanding you did this right. >> >> Now the tricky part, GWT does those specialties to the WAR where it >> places it's root stuff >> in that special directory /war, >> How do we transition this. Just one thing that just crossed my mind would >> be to set the >> alias to /ctx/war. But I haven't tested this right now. Just from the top >> of my head :) >> >> regards, Achim >> >> >> >> 2012/6/21 Gerard Maas <[email protected]> >> >>> Thanks Achim, >>> >>> After some thinking and code reading, I guess this issue can be boiled >>> down to the question: >>> >>> In PAX-WEB, what would be the programmatic equivalent of: >>> >>> MANIFEST.MF >>> ... >>> Webapp-Context: /ctx, >>> Webapp-Root: /war >>> ... >>> >>> ? >>> >>> GWT used to load its resources correctly when using the WAB model. >>> >>> (and the broader question: how to use GWT without a web.xml file?) >>> >>> >>> -kr, Gerard. >>> >>> >>> >>> >>> >>> On Thu, Jun 21, 2012 at 11:17 AM, Achim Nierbeck < >>> [email protected]> wrote: >>> >>>> hmm, this rather strange and right now I don't have much of an idea. >>>> Do you use std. gwt or vaadin? For vaadin I created a new Pax project >>>> to simplify the usage, >>>> though this is still a 0.1.0 :) >>>> >>>> regards, Achim >>>> >>>> 2012/6/20 Gerard Maas <[email protected]> >>>> >>>>> Hi!, >>>>> >>>>> Further to my previous messages, I continue with the effort of >>>>> migrating our app to an uniform OSGi/DS-centric system. The last >>>>> 'bastion' is our GWT web interface which -being a GWT app- has a >>>>> WAR-centric format. >>>>> I successfully refactored all servlets out from the war and converted >>>>> into declarative OSGi services (<provide >>>>> interface="javax.servlet.Servlet"/>). That way I got rid of all the messy >>>>> ServiceTracker code. >>>>> To further replicated the other WAR functionality to register a >>>>> filter, serve static content and welcome page using the info on [1] >>>>> (thanks to Achim for that link). >>>>> >>>>> Now, I'm having issues with PAX-WEB and the way GWT tries to load its >>>>> resources: >>>>> >>>>> While loading the serialization descriptors, GWT loads a local >>>>> resource using the HTTP context. >>>>> In my case it tries to resolve resources like >>>>> this: /ctx/ctx/62394587E47773FB1594FF.gwt.rpc >>>>> This resource is created by the GWT compiler and placed under : >>>>> <bundle>/war/ctx/ctx/resource... >>>>> >>>>> Before, using the standard wab mapping (Webapp-Context: >>>>> /ctx, Webapp-Root: /war) gwt would find its resources correctly. >>>>> Now that I'm using the programmatic resource mapping: >>>>> DefaultResourceMapping resourceMapping = new DefaultResourceMapping(); >>>>> resourceMapping.setAlias( "/ctx" ); >>>>> resourceMapping.setPath( "/war" ); >>>>> >>>>> GWT fails to load the resouce and produces the following error: >>>>> 2012-06-20 12:46:36.283:INFO:/:AbcProxy: ERROR: The serialization >>>>> policy file '/ctx/ctx/600000000000000773FB1594FF.gwt.rpc' was not found; >>>>> did you forget to include it in this deployment? >>>>> 2012-06-20 12:46:36.283:INFO:/:AbcProxy: WARNING: Failed to get the >>>>> SerializationPolicy '600000000000000773FB1594FF' for module ' >>>>> https://localhost:8443/ctx/ctx/'; a legacy, 1.3.3 compatible, >>>>> serialization policy will be used. You may experience >>>>> SerializationExceptions as a result. >>>>> >>>>> [N.B. The last sentence should read "you will experience a hell of >>>>> serialization issues as a result"] >>>>> >>>>> I've tracked the issue to the HttpServiceContext loading the resource >>>>> and intrepreting the path as a file and not as a relative url: >>>>> >>>>> getting resource: [/mx/mx/6ECAD5B3A6F908CE17E47773FB1594FF.gwt.rpc] >>>>> HttpServiceContext | not a URL or invalid URL: >>>>> [/ctx/ctx/600000000000000773FB1594FF.gwt.rpc], treating as a file path >>>>> DefaultHttpContext | Searching bundle [bundle] for resource >>>>> [/ctx/ctx/600000000000000773FB1594FF.gwt.rpc] >>>>> >>>>> This obviously fails, as this resource is located under /war/ctx/ctx/ >>>>> in bundle file system. >>>>> This seems to relate to bug PAXWEB-314 [2] which implementation is >>>>> to turn the relative path into a file path: >>>>> >>>>> >>>>> // IMPROVEMENT start PAXWEB-314 >>>>> >>>>> 257 >>>>> <http://grepcode.com/file/repo1.maven.org/maven2/org.ops4j.pax.web/pax-web-jetty/1.1.2/org/ops4j/pax/web/service/jetty/internal/HttpServiceContext.java?av=h#257> >>>>> >>>>> <http://grepcode.com/file/repo1.maven.org/maven2/org.ops4j.pax.web/pax-web-jetty/1.1.2/org/ops4j/pax/web/service/jetty/internal/HttpServiceContext.java?av=h#> >>>>> >>>>> try { >>>>> >>>>> 258 >>>>> <http://grepcode.com/file/repo1.maven.org/maven2/org.ops4j.pax.web/pax-web-jetty/1.1.2/org/ops4j/pax/web/service/jetty/internal/HttpServiceContext.java?av=h#258> >>>>> >>>>> <http://grepcode.com/file/repo1.maven.org/maven2/org.ops4j.pax.web/pax-web-jetty/1.1.2/org/ops4j/pax/web/service/jetty/internal/HttpServiceContext.java?av=h#> >>>>> >>>>> resource = new URL >>>>> <http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/net/URL.java#URL>(path); >>>>> >>>>> 259 >>>>> <http://grepcode.com/file/repo1.maven.org/maven2/org.ops4j.pax.web/pax-web-jetty/1.1.2/org/ops4j/pax/web/service/jetty/internal/HttpServiceContext.java?av=h#259> >>>>> >>>>> <http://grepcode.com/file/repo1.maven.org/maven2/org.ops4j.pax.web/pax-web-jetty/1.1.2/org/ops4j/pax/web/service/jetty/internal/HttpServiceContext.java?av=h#> >>>>> >>>>> LOG >>>>> <http://grepcode.com/file/repo1.maven.org/maven2/org.ops4j.pax.web/pax-web-jetty/1.1.2/org/ops4j/pax/web/service/jetty/internal/HttpServiceContext.java#HttpServiceContext.0LOG>.debug >>>>> >>>>> <http://grepcode.com/file/repo1.maven.org/maven2/org.slf4j/slf4j-api/1.6.1/org/slf4j/Logger.java#Logger.debug%28java.lang.String%29>( >>>>> "resource: [" + path + "] is already a URL, returning" ); >>>>> >>>>> 260 >>>>> <http://grepcode.com/file/repo1.maven.org/maven2/org.ops4j.pax.web/pax-web-jetty/1.1.2/org/ops4j/pax/web/service/jetty/internal/HttpServiceContext.java?av=h#260> >>>>> >>>>> <http://grepcode.com/file/repo1.maven.org/maven2/org.ops4j.pax.web/pax-web-jetty/1.1.2/org/ops4j/pax/web/service/jetty/internal/HttpServiceContext.java?av=h#> >>>>> >>>>> return resource; >>>>> >>>>> 261 >>>>> <http://grepcode.com/file/repo1.maven.org/maven2/org.ops4j.pax.web/pax-web-jetty/1.1.2/org/ops4j/pax/web/service/jetty/internal/HttpServiceContext.java?av=h#261> >>>>> >>>>> <http://grepcode.com/file/repo1.maven.org/maven2/org.ops4j.pax.web/pax-web-jetty/1.1.2/org/ops4j/pax/web/service/jetty/internal/HttpServiceContext.java?av=h#> >>>>> >>>>> } >>>>> >>>>> 262 >>>>> <http://grepcode.com/file/repo1.maven.org/maven2/org.ops4j.pax.web/pax-web-jetty/1.1.2/org/ops4j/pax/web/service/jetty/internal/HttpServiceContext.java?av=h#262> >>>>> >>>>> <http://grepcode.com/file/repo1.maven.org/maven2/org.ops4j.pax.web/pax-web-jetty/1.1.2/org/ops4j/pax/web/service/jetty/internal/HttpServiceContext.java?av=h#> >>>>> >>>>> catch (MalformedURLException >>>>> <http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/net/MalformedURLException.java#MalformedURLException> >>>>> e) { >>>>> >>>>> 263 >>>>> <http://grepcode.com/file/repo1.maven.org/maven2/org.ops4j.pax.web/pax-web-jetty/1.1.2/org/ops4j/pax/web/service/jetty/internal/HttpServiceContext.java?av=h#263> >>>>> >>>>> <http://grepcode.com/file/repo1.maven.org/maven2/org.ops4j.pax.web/pax-web-jetty/1.1.2/org/ops4j/pax/web/service/jetty/internal/HttpServiceContext.java?av=h#> >>>>> >>>>> // do nothing, simply log >>>>> >>>>> 264 >>>>> <http://grepcode.com/file/repo1.maven.org/maven2/org.ops4j.pax.web/pax-web-jetty/1.1.2/org/ops4j/pax/web/service/jetty/internal/HttpServiceContext.java?av=h#264> >>>>> >>>>> <http://grepcode.com/file/repo1.maven.org/maven2/org.ops4j.pax.web/pax-web-jetty/1.1.2/org/ops4j/pax/web/service/jetty/internal/HttpServiceContext.java?av=h#> >>>>> >>>>> LOG >>>>> <http://grepcode.com/file/repo1.maven.org/maven2/org.ops4j.pax.web/pax-web-jetty/1.1.2/org/ops4j/pax/web/service/jetty/internal/HttpServiceContext.java#HttpServiceContext.0LOG>.debug >>>>> >>>>> <http://grepcode.com/file/repo1.maven.org/maven2/org.slf4j/slf4j-api/1.6.1/org/slf4j/Logger.java#Logger.debug%28java.lang.String%29>( >>>>> "not a URL or invalid URL: [" + path + "], treating as a file path" ); >>>>> >>>>> 265 >>>>> <http://grepcode.com/file/repo1.maven.org/maven2/org.ops4j.pax.web/pax-web-jetty/1.1.2/org/ops4j/pax/web/service/jetty/internal/HttpServiceContext.java?av=h#265> >>>>> >>>>> <http://grepcode.com/file/repo1.maven.org/maven2/org.ops4j.pax.web/pax-web-jetty/1.1.2/org/ops4j/pax/web/service/jetty/internal/HttpServiceContext.java?av=h#> >>>>> >>>>> } >>>>> >>>>> 266 >>>>> <http://grepcode.com/file/repo1.maven.org/maven2/org.ops4j.pax.web/pax-web-jetty/1.1.2/org/ops4j/pax/web/service/jetty/internal/HttpServiceContext.java?av=h#266> >>>>> >>>>> <http://grepcode.com/file/repo1.maven.org/maven2/org.ops4j.pax.web/pax-web-jetty/1.1.2/org/ops4j/pax/web/service/jetty/internal/HttpServiceContext.java?av=h#> >>>>> >>>>> // IMPROVEMENT end PAXWEB-314 >>>>> >>>>> >>>>> Is there a way to work around this issue? Is somebody using GWT and >>>>> PAX-WEB using OSGi services instead of a WAB? >>>>> One possible way is to copy the /war/ctx produced by the GWT compiler >>>>> back to /ctx, but I'd like to find a decent solution before going into the >>>>> hack direction. >>>>> >>>>> Any pointers? >>>>> >>>>> -kr, Gerard. >>>>> >>>>> [1] - >>>>> https://github.com/ops4j/org.ops4j.pax.web/blob/master/samples/whiteboard/src/main/java/org/ops4j/pax/web/extender/samples/whiteboard/internal/Activator.java >>>>> [2] - http://team.ops4j.org/browse/PAXWEB-314 >>>>> >>>>> >>>>> >>>>> _______________________________________________ >>>>> general mailing list >>>>> [email protected] >>>>> http://lists.ops4j.org/mailman/listinfo/general >>>>> >>>>> >>>> >>>> >>>> -- >>>> >>>> Apache Karaf <http://karaf.apache.org/> Committer & PMC >>>> OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/> >>>> Committer & Project Lead >>>> OPS4J Pax for Vaadin <http://team.ops4j.org/wiki/display/PAXVAADIN/Home> >>>> Commiter & Project Lead >>>> blog <http://notizblog.nierbeck.de/> >>>> >>>> _______________________________________________ >>>> general mailing list >>>> [email protected] >>>> http://lists.ops4j.org/mailman/listinfo/general >>>> >>>> >>> >>> _______________________________________________ >>> general mailing list >>> [email protected] >>> http://lists.ops4j.org/mailman/listinfo/general >>> >>> >> >> >> -- >> >> Apache Karaf <http://karaf.apache.org/> Committer & PMC >> OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/> Committer >> & Project Lead >> OPS4J Pax for Vaadin <http://team.ops4j.org/wiki/display/PAXVAADIN/Home> >> Commiter & Project Lead >> blog <http://notizblog.nierbeck.de/> >> >> _______________________________________________ >> general mailing list >> [email protected] >> http://lists.ops4j.org/mailman/listinfo/general >> >> > > _______________________________________________ > general mailing list > [email protected] > http://lists.ops4j.org/mailman/listinfo/general > > -- Apache Karaf <http://karaf.apache.org/> Committer & PMC OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/> Committer & Project Lead OPS4J Pax for Vaadin <http://team.ops4j.org/wiki/display/PAXVAADIN/Home> Commiter & Project Lead blog <http://notizblog.nierbeck.de/>
_______________________________________________ general mailing list [email protected] http://lists.ops4j.org/mailman/listinfo/general
