+1 Carsten
Alexander Klimetschek wrote: > +1 > > Regards, > Alex > > On Sat, Oct 25, 2008 at 11:08 AM, Felix Meschberger <[EMAIL PROTECTED]> wrote: >> Hi all, >> >> Currently the Sling Web Application (launchpad/webapp) has one serious >> drawback: Unless you unpack the war file and configure the sling.home >> init-parameter, the Sling Web Application can only be deployed once into >> a single servlet container. The reason for this is, that the default >> value assumed by the Sling class is the "sling" folder in the current >> working directory. >> >> To fix this issue, I propose to enhance the SlingServlet which bridges >> the Servlet container, in which the Sling Web Application is deployed, >> to the SlingMainServlet in the sling/engine bundle as follows: >> >> * add a new method to the SlingServlet : >> >> protected String getSlingHome(ServletRequest request) >> >> The getSlingHome first checks whether the sling.home init-param is set >> in the servlet configuration. Next it checks the sling.home init-param >> of the servlet context. Next if checks calls the >> ServletContext.getContextPath() method. This call may fail since the >> method is only defined in Servlet API 2.5. If getContextPatch is not >> supported in the servlet container and request is not null, the >> request.getContextPath() method is called to retreived the context paht. >> If the context path can be retrieved it is converted into the path used >> as sling.home by just replacing all "/" by "_", thus the context path >> "/sling" would become "_sling. Otherwise (if no init-param is set, >> ServletContext.getContextPath is not supported and request is null), >> getSlingHome returns null. >> >> * SlingServlet.init() is modified to call getSlingHome(null) and only >> continue with Sling startup if the value returned is not null. If >> getSlingHome() returns null, the SlingServlet.init() method does not >> initialize Sling. >> >> * SlingServlet.service() is enhanced to check whether the init() method >> started Sling. If not, it calls getSlingHome() with the current request >> object and starts Sling. This may take some time, so the >> SlingServlet.service method sends back a quick response telling the >> caller, that Sling is about to start. As soon as Sling has started up >> the request will be processed. >> >> This mechanism should allow the same Sling Web Application war file to >> be deployed multiple times in the same servlet container and should also >> account for Servlet API 2.4 containers, which do not support the >> ServletContext.getContextPath() method yet. >> >> WDYT ? >> >> Regards >> Felix >> > > > -- Carsten Ziegeler [EMAIL PROTECTED]
