dear antonio,

first of all, thx a lot for your answer. but i do not agree with your explanations. for sure tiles relies on the fact that the configuration is getting loaded during start up but in fact it is not realy getting loaded until the first request has been received. even not using the default servlet/listener/... that are part of the tiles release. the only thing that is getting done - as far as i can see - is reading in the configuration but not parsing it.

i took a look through the code and i did not see any synchronized work inside it ragarding the initialization of the framework at start. in generall the work done by the tiles configurere explained in the initial email is more or less exactly the same as the work done by, e.g. the TileListener, which is used by both, the TilesFilter and TilesServlet which are explained to be use to initialize tiles at the tile documentation.

therefore, in my opinion it is not a failure in using/initializing tiles but in tiles it self. this gets even more harden if you consider the fact that the hole initialization work in my case is done within the servlet container startup process, too. just like it is done by using the tiles default implementation of its listener/servlet/filter.

if i got it right, creating the real beans/instances/what ever from the configuration file(s) is not done before the first tile definition is requested/told to render. therefore i think tiles should care about synchronizing this work, not the application using tiles.

please correct me if i'm wrong.

greez,

dirk

----- Original Message ----- From: "Antonio Petrelli" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Monday, August 27, 2007 10:10 AM
Subject: Re: tiles2 crashes (digester)


Hi Dirk,
Your example is really pretty complicated :-)
Seriously, Tiles relies on the fact that the configuration is read at
startup only once. This is done by using the listener, the filter or
the servlet.
For some strange reason, I think that your Spring integration does not
load on startup, so I guess it is a bug in Spring, or in your code.
What I mean is that Tiles is not responsible for a misuse of the
startup procedure.
For example, I think that the container creation and its assignment to
TilesAccess should be done in a synchronized block.

Ciao
Antonio

2007/8/19, Schaefer, Dirk Alexander <[EMAIL PROTECTED]>:
hi all,

i'm new to tiles2 and currently trying hard to get it working within my spring enabled web application.
actually almost the hole thing is working proper with one exception.

tiles2 crashes while it reads the definitions from the definitionsFile(s) i told it to read from within the following circumstances:

    1. start the tomcat servlet container.
    2. no request sent to tomcat since startup.
3. sending multiple request using a web application test application simultaneously.

if i do this, a realy big number of exceptions occurre inside of tomcat. investigating those exceptions i figured out, that there is a problem when the definitions are getting read from the xml string held inside tiles. as far as i can see, those definitions are then getting read using digester. as i can see, reading the definitions is neither synchronized nor is it using independent instances (thread bounded) of the class it is using for this purpose.

the result is, that the different threads are messing with each other and the process of loading the definitions crashs.

if i use it the following way, everything works proper:

    1. start the tomcat servlet container.
    2. send one single request to it at least.
    3. send as many request simultanously as the server can handle.

interessting, isn't it?

---------------------------------------------------

how i use tiles2:

i do not use any of tiles' servlets, listeners, ... i initialize tiles the programmatical way by using the spring framework's TilesConfigurer introduced in its version 2.1 m4. in general it is first setting up servlet initial parameters that are defining the several factory, preparer, ... implementations to use by tiles.

after that it initializes the tiles framework the following way:
public void afterPropertiesSet() throws TilesException {

    TilesContainer container = createTilesContainer(this.servletContext);

    TilesAccess.setContainer(this.servletContext, container);

}

protected TilesContainer createTilesContainer(ServletContext context) throws TilesException {

ServletContextAdapter adaptedContext = new ServletContextAdapter(new DelegatingServletConfig());

TilesContainerFactory factory = TilesContainerFactory.getFactory(adaptedContext);

    return factory.createContainer(adaptedContext);

}

where afterPropertiesSet() is the method which needs to be invoked in order to initialize tiles. DelegatingServletConfig is a simple inner class of TilesConfigurer which makes the configurer's settings according to the factory/preparer/... implementations to use by tiles available as initial servlet property settings.

can anyone confirm that this is a bug within tiles2 or is it just me, who's using tiles the wrong way?

thx a lot, greez,

dirk


Reply via email to