Giacomo Pati wrote:
Reinhard Poetz wrote:
Giacomo Pati wrote:
Reinhard Poetz wrote:
Giacomo Pati wrote:
Now this seems to me that some changes with the RCL prevents third
party servlet filters to access
the ApplicationContext, or am I wrong?
no, that's my interpretation of the stacktrace too

Any pointers?
The problem is that when the app context gets reloaded, there is a time
frame, when the context is not available. At the moment I only have a
vague idea how we can prevent e.g. the acegi filter from accessing a
(temporarily) non-existing context.
Maybe we can provide some kind of wrapper for the app context that locks
the access to the app context in question for the time of
reinitializiation.
Sounds kinda complicated. Where is would such a thing be located in
the code?
I've had some more thoughts about this and I believe that we don't need
to go that far. We only have to make sure that all servlets, filters and
listeners that we inject are being rewritten so that they get wrapped by
their "Reloading*" equivalents, e.g. see the dispatcher servlet:

      <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <display-name>DispatcherServlet</display-name>
        <description>Cocoon blocks dispatcher</description>

<servlet-class>org.apache.cocoon.tools.rcl.wrapper.servlet.ReloadingServlet</servlet-class>

        <init-param>
          <param-name>servlet-class</param-name>

<param-value>org.apache.cocoon.servletservice.DispatcherServlet</param-value>

        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>


Carsten added the code that rewrites a web.xml in order to use the
shielding stuff, see
org.apache.cocoon.maven.deployer.WebApplicationRewriter.shieldWebapp.
 It shouldn't be too difficult to use it for our purpose too.

To be honest, I don't get most of what you're saying. Do you propose to write a 
wrapper for each and
every Filter one intend to use?

No, we already have those wrappers and we need only _one_ of them per type (servlet, filters, listeners). See the example above: The DispatcherServlet isn't loaded directly. Instead, org.apache.cocoon.tools.rcl.wrapper.servlet.ReloadingServlet gets the parameter servlet-class with the value of the "wrapped" servlet passed. This way the classloader is injected.

I *believe* (though I'm not 100% sure) that the problem you are facing now is that your acegi filter isn't wrapped and bypasses the reloading stuff.

--
Reinhard Pötz Independent Consultant, Trainer & (IT)-Coach
{Software Engineering, Open Source, Web Applications, Apache Cocoon}

                                       web(log): http://www.poetz.cc
--------------------------------------------------------------------

Reply via email to