[ 
http://issues.apache.org/jira/browse/COCOON-1681?page=comments#action_12364075 
] 

Antonio Fiol commented on COCOON-1681:
--------------------------------------

I just attached three stack traces. However, only two of them are relevant for 
this bug, but I am not knowledgeable enough to know which one is not.
Why do I say that? We have a non-trivial sitemap, with 5 match sections implied 
in this situation.

Called URL is: /corresponsales/propuestas/deportes/inicio.html

"External" sitemap part gets called:
     <!-- Step 1 -->
     <map:match pattern="**.html">
        <map:act type="session">
          <map:parameter name="action" value="create"/>
          <map:act type="session-propagator">
            <map:parameter name="java:comp/env/skin" value="{&skin;}" />
            <map:generate src="cocoon:/interno/{../../1}"/><!-- This calls Step 
2 -->
            <map:call resource="xpage2html">
              <map:parameter name="hoja" value="pantalla"/>
              <map:parameter name="pagina" value="{../../1}"/>
            </map:call>
              <map:serialize status-code="200" />
          </map:act>
        </map:act>
      </map:match>


 Here is the relevant part of the "internal" sitemap, which is mounted on 
"/interno" and so its "Step 2" at the bottom is called from Step 1:
            <!-- Step 5 -->
            <map:match pattern="inclusion/**/lista-descendiente-*(*)">
                <map:generate type="directory" src="{&paginas;}/{1}">
                    <map:parameter name="include" value=".*\.html|^[^.]*$" 
/><!-- Directories that have no period and HTML files -->
                    <map:parameter name="exclude" value="historico" />
                    <map:parameter name="reverse" value="true" />
                    <map:parameter name="sort" value="{2}" />
                    <map:parameter name="depth" value="3" />
                </map:generate>
                <map:transform type="paginate" src="pagesheets/file6.xml"><!-- 
Gets the dir:file paged by groups of 6 -->
                    <map:parameter name="page" value="{3}" />
                </map:transform>
                <map:transform src="xsl/xdoc/directory.xsl">
                    <map:parameter name="path" value="{1}" />
                    <map:parameter name="orden" value="{2}" />
                </map:transform>
                <map:serialize/>
            </map:match>
            <!-- Step 4 -->
            <map:match pattern="inclusion/**/lista-descendiente-*">
                <map:redirect-to 
uri="cocoon:/inclusion/{1}/lista-descendiente-{2}(1)" /><!-- Calls Step 5 -->
            </map:match>
            <!-- Step 3 -->
            <map:match pattern="paginas/**">
                <map:select type="resource-exists">
                    <map:when test="{&paginas;}/{1}.xdoc"><!-- This file 
exists, so this is the one that gets called. See the file below -->
                        <map:generate src="{&paginas;}/{1}.xdoc"/>
                    </map:when>
                    <map:otherwise>
                        <map:generate type="html" src="{&paginas;}/{1}.html"/>
                        <map:transform src="xsl/xdoc/html.xsl"/>
                    </map:otherwise>
                </map:select>
                <map:transform type='xinclude' /><!-- This xincludes Step 4. 
See the file below for URL -->
                <map:serialize/>
            </map:match>

            <!-- Step 2 -->
            <map:match pattern="**">
                <map:aggregate element="page" >
                    <map:part label="contenido" src="cocoon:/paginas/{1}"/><!-- 
This will call Step 3, which will ultimately call directory generator, but 
calling isValid() twice -->
                    <map:part src="cocoon:/datos/version-pdf/{1}" /><!-- This 
uses directory generator, and isValid() only gets called once, so sitemap not 
posted. One of the stack traces comes from here. -->
                    <map:part src="cocoon:/navegacion/principal"/>
                    <map:part src="cocoon:/navegacion/secundaria/{1}"/>
                    <map:part src="cocoon:/datos/calendario/hoy/completo"/>
                    <map:part src="{&dinamico;}/xml/buscadores.xml"/>
                </map:aggregate>
                <map:serialize/>
            </map:match>

inicio.xdoc file contains (only relevant part shown):
<xdoc xmlns:xi="http://www.w3.org/2001/XInclude";>
  <head>
    <title>[...]</title>
  </head>
  <body>
    [...]
    <xi:include 
href="cocoon://interno/inclusion/corresponsales/propuestas/deportes/lista-descendiente-lastModified"/><!--
 Calls Step 4 -->
  </body>
</xdoc>

I hope it is not too difficult to follow. :-(


> Generator "directory": Caching too much
> ---------------------------------------
>
>          Key: COCOON-1681
>          URL: http://issues.apache.org/jira/browse/COCOON-1681
>      Project: Cocoon
>         Type: Bug
>   Components: * Cocoon Core
>     Versions: 2.1.8, 2.1.7
>     Reporter: Antonio Fiol
>     Assignee: Jean-Baptiste Quenot
>  Attachments: DirectoryGenerator.java.patch, stack1, stack2, stack3
>
> In some cases, an update to the directory is not detected by the 
> DirectoryGenerator.
> Debugging the issue, I discovered that isValid() is called twice on the same 
> DirValidity, but it returns different values (-1 the first time, 1 the second 
> time).
> Apparently, the reason for the inconsistency would be solved by removing the 
> first of the two lines that update the expiry time in the isValid() method in 
> DirValidity, but I am not sure whether this could cause problems in other 
> places.
> A possibility would be that a DirValidity stores the fact that it already 
> detected it is invalid, and is changed so that it always return -1. But... 
> Are DirValidity objects reused? Could this change cause problems? I have not 
> tested, so I don't know.

-- 
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