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

Reply via email to