Return-Path: Delivered-To: apmail-cocoon-dev-archive@www.apache.org Received: (qmail 68315 invoked from network); 23 Nov 2006 10:50:28 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 23 Nov 2006 10:50:28 -0000 Received: (qmail 17246 invoked by uid 500); 23 Nov 2006 10:50:35 -0000 Delivered-To: apmail-cocoon-dev-archive@cocoon.apache.org Received: (qmail 17202 invoked by uid 500); 23 Nov 2006 10:50:35 -0000 Mailing-List: contact dev-help@cocoon.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: dev@cocoon.apache.org List-Id: Delivered-To: mailing list dev@cocoon.apache.org Received: (qmail 17191 invoked by uid 99); 23 Nov 2006 10:50:35 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 23 Nov 2006 02:50:35 -0800 X-ASF-Spam-Status: No, hits=0.0 required=10.0 tests= X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO brutus.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 23 Nov 2006 02:50:24 -0800 Received: from brutus (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id 7677671429F for ; Thu, 23 Nov 2006 02:50:04 -0800 (PST) Message-ID: <32464391.1164279004482.JavaMail.jira@brutus> Date: Thu, 23 Nov 2006 02:50:04 -0800 (PST) From: "Alexander Klimetschek (JIRA)" To: dev@cocoon.apache.org Subject: [jira] Commented: (COCOON-1955) [Patch] Allow shielded class loading for a single block In-Reply-To: <29891702.1163783377165.JavaMail.jira@brutus> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org [ http://issues.apache.org/jira/browse/COCOON-1955?page=comments#action_12452197 ] Alexander Klimetschek commented on COCOON-1955: ----------------------------------------------- I think it is also necessary to set the context classloader when newInstance() aka the constructor of the embedded servlet class is called, e.g. for static class imports. > [Patch] Allow shielded class loading for a single block > ------------------------------------------------------- > > Key: COCOON-1955 > URL: http://issues.apache.org/jira/browse/COCOON-1955 > Project: Cocoon > Issue Type: New Feature > Components: * Cocoon Core, - Blocks Framework > Affects Versions: 2.2-dev (Current SVN) > Reporter: Alexander Klimetschek > Attachments: cocoon-aop-shieldingblockservlet.patch, cocoon-enable-shielded-block-libs.patch, cocoon-new-shieldingblockservlet.patch > > > == Problem == > When trying to integrate Apache Solr in our Cocoon webapplication, we got a problem with conflicting versions of jars. Our jackrabbit block needs an old lucene, whereas Solr wants a fresh new lucene nightly build. > == Solution == > Since we integrate the SolrServlet (and the other servlets from solar) inside a BlockServlet to have them all inside our cocoon webapp with consistent URLs, we considered adding a ShieldingServlet. Thus the BlockServlet wraps the ShieldingServlet which in turn wraps the SolrServlet. The configuration for the BlockServlet bean looks like this: > class="org.apache.cocoon.blocks.BlockServlet"> > > value="org.apache.cocoon.bootstrap.servlet.ShieldingServlet" /> > value="blockcontext:/mindquarry-solr-block/" /> > > > value="org.apache.solr.servlet.SolrServlet" /> > value="/paranoid-classpath.txt" /> > > value="org.apache.cocoon.classloader.DefaultClassLoaderFactory" /> > > > > The directory structure of the solr-block: > src/main/resources/ > COB-INF/ > paranoid-classpath.txt > paranoid-lib/ > .jar > (including the jar which contains the solr servlet) > META-INF/ > cocoon/ > spring/ > solr-blockservlet.xml > The paranoid-classpath.txt contains the following single line: > lib-dir: context:paranoid-lib > == The Patch == > To get the ShieldingServlet work with the blocks-fw and the basic shielding that is done in the Cocoon webapp anyway (via a ShieldingListener in the web.xml), two things must be done: > a) The BootstrapClassLoaderManager in cocoon-bootstrap must not store the classloader it creates in a static variable so that in each call of getClassLoader() a new ClassLoader is created. That method is exactly called 2 times in our situation: first by the cocoon webapp shielding listener and then by the ShieldingServlet in our block. > b) The method BlockContext.getResourcePaths() must be implemented to list the resources in that block context (stuff under COB-INF of that block). > Lots of the work was done by my colleague Alexander Saar. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira