You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by "Alexander Klimetschek (JIRA)" <ji...@apache.org> on 2006/11/17 18:11:40 UTC
[jira] Updated: (COCOON-1955) [Patch] Allow shielded class loading
for a single block
[ http://issues.apache.org/jira/browse/COCOON-1955?page=all ]
Alexander Klimetschek updated COCOON-1955:
------------------------------------------
Attachment: cocoon-enable-shielded-block-libs.patch
To be applied in root of cocoon trunk. Affects both cocoon-bootstrap and cocoon-blocks-fw-impl modules.
> [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-enable-shielded-block-libs.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:
> <bean id="com.mindquarry.search.solr.solr-select-block"
> class="org.apache.cocoon.blocks.BlockServlet">
> <property name="mountPath" value="/solr-select" />
> <property name="servletClass"
> value="org.apache.cocoon.bootstrap.servlet.ShieldingServlet" />
> <property name="blockContextURL"
> value="blockcontext:/mindquarry-solr-block/" />
> <property name="properties">
> <map>
> <entry key="servlet-class"
> value="org.apache.solr.servlet.SolrServlet" />
> <entry key="bootstrap-classpath-file"
> value="/paranoid-classpath.txt" />
> <entry key="bootstrap-classloader-debug" value="true" />
> <entry key="bootstrap-classloader-factory"
> value="org.apache.cocoon.classloader.DefaultClassLoaderFactory" />
> </map>
> </property>
> </bean>
> The directory structure of the solr-block:
> src/main/resources/
> COB-INF/
> paranoid-classpath.txt
> paranoid-lib/
> <shielded-jars>.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