cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alexander Klimetschek (JIRA)" <>
Subject [jira] Commented: (COCOON-2044) servlet: protocol URIs have to be globally unique for use as cache-keys
Date Thu, 19 Apr 2007 12:56:16 GMT


Alexander Klimetschek commented on COCOON-2044:

The servlet source works in other places used in XSL sheets, so it is registered. I think
the problem is that the ids/mount-paths I tried are not valid, only ids of configured connections
work. I say think because I cannot debug the xerces code, because the damn jar does not contain
line numbers.... So my theory is:

a) Xerces handles the URL
b) it sees servlet: and passes it to cocoon's sourceresolver (don't know where this is done)
c) the servlet source cannot resolve servlet:12345:/bla or servlet:/my/mountpath:/something
and throws an exception or returns a null value
d) the URL handler sees this problem, but only gives a MalformedURLException (unknown protocol:

If this is the case, we need a globally unique servlet:servlet-bean-id:/foo/bar URL that can
be resolved by the ServletSourceFactory. Currently it can only handle connections defined
in the servlet bean xml. IMHO these are shortcuts (using servlet:myblock: is much shorter
than serlvet:com.mycompany.mypackage.foobar-servlet). But they also work as a contract for
the block or servlet, showing which other blocks are needed at runtime, although this is not
used by any tool, its only an information for the developer looking at the xml file.

> servlet: protocol URIs have to be globally unique for use as cache-keys
> -----------------------------------------------------------------------
>                 Key: COCOON-2044
>                 URL:
>             Project: Cocoon
>          Issue Type: Bug
>          Components: - Servlet service framework
>    Affects Versions: 2.2-dev (Current SVN)
>            Reporter: Alexander Klimetschek
>         Assigned To: Grzegorz Kossakowski
>            Priority: Critical
> All servlet protocol URIs like servlet:/some/thing or servlet:super:/foo/bar or servlet:myblock:/another/path
have to be globally unique because they are used in the cache, of which there is only one
global with globally acting keys.
> There are two caches in standard Cocoon configuration (the only ones I know of ;-), both
with a different key generation. Here are ideas how to make the keys global:
> a) EHDefaultStore for caching resources of caching pipelines: they use the uriPrefix
of the Enviroment in the key, so providing a uriPrefix (eg. the mount path of the servlet)
works here.
> b) DefaultTransientStore which caches XSLT and JX generator sources (don't know why this
is different from a)): they do not use the uriPrefix and much worse, they need correct URIs
because they are read by the XSLT processor, who does not like things like servlet:uniqueID34:/xsl/stylesheet.xsl
containing arbitrary schemes at the beginning. Appending an ID via a query parameter seems
the only working solution (tried it already): servlet:/xsl/stylesheet.xsl?servlet-services-id=12345
> Another solution would be to have one cache per sitemap, so that the keys don't have
to be unique anymore. But I don't know how to configure that and if this is feasible.

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message