Hi, sorry for replying so late, I have been experiencing mail problems and had to dig this one up from the archives.
> I think the alternative constructor would do it definitely. Although I > would miss all the functionality that CocoonBean provides for creating > and initializing Cocoon. <uv> So what functionality are you referring to here? Surely you don't want to go configuring the Cocoon instance if it has already been configured elsewhere (by its containing servlet). </uv> <uh> No, but I could use it wherever I do create and configure it. Be that in a servlet or in an Avalon embedded component. Although it wouldn't be a problem to do that without the help of a utility class and I am doing exactly that right now, my suggestion was that it might be useful. </uh> <uv> Are you suggesting that we might want the bean to be able to generate a page from a webapp that isn't being served by the servlet? </uv> <uh> I'm saying that I see two separate areas of concern that CocoonBean could be useful for me. One is to help create and configure Cocoon, the other is to help run Cocoon and gather information about these runs. The former would be useful for me in a thread safe type component where I create and manage a shared cocoon instance, the latter I'd like to use in the per-thread situation of a publication request. </uh> > > > I also noticed that there is some state associated with CocoonBean > > > that prevents it from being shared among clients. So > > although there is > > > a lot of functionality there I'm not sure how to use it in this > > > multi-threaded multi-client situation. > > > > The bean started as (and still pretty much is) a simple > > separation of the CLI Main.java class into two parts. So it > > doesn't think at all in terms of multi-threaded environments. > > However, I don't see why it couldn't be improved. > > > > What 'state' are you referring to? > > I mean state that controls the way processing is done such as > followLinks flag and state that holds information about a single > processing run such as the brokenLinks List for instance. > > I'm wondering whether we should split up CocoonBean into a class for > creating and setting up Cocoon and one that holds all the code related > to a single run. The former would follow a singleton lifestyle and the > latter a transient one. What do you think? <uv> So, what do you mean by 'shared between clients'? </uv> <uh> I mean that the same Cocoon instance be accessible from different locations in the system. One client of this "Cocoon service" would the HttpServlet that handles regular http calls. Another a mail system that publishes pages over smtp, and yet another that receives commands to push pages onto a remote server as part of a publication action. Actually that was what I started out from, because the publication system I have now follows this exact approach. It accesses the same Cocoon instance that is used to handle http requests as well. Since it is separated from the http servlet I needed to put the Cocoon instance somewhere from where I could access it from both locations. But it isn't necessarily required for me to keep these two clients separated. It's just the way it works for me now, and divorcing Cocoon management from the code using it, is something that would be generally useful I think. </uh> <uv> Would you have the same bean running in multiple threads? </uv> <uh> No, the bean can be single threaded, but I would be running multiple CocoonBeans sharing the same Cocoon concurrently. </uh> <uv> Let's understand exactly what your requirements are, then we can look at how we might achieve it. </uv> OK, thanks for sticking with me so long, I hope I am not being too annoying ;) The basic requirement that I have is that of a webservice that pushes files onto a target location such as a remote FTP server. I consider two different approaches. One is to integrate the service with Cocoon as it now runs as a servlet or come up with an implementation that is separate from it. In the former case, publication requests might involve a protocol that is similar to Cocoon views. I am thinking that the sitemap could have a "targets" section that defines publication locations, the default being just the stream to the requesting client browser. Then, similar to the way views work, a cocoon request could be made by optionally specifying the target to publish to: http://cocoon/resource-to-publish?cocoon-target=myliveserver The other possibility is keeping the publication service separate from the CocoonServlet. Configuration would be outside the sitemap and I would need a way to share CocoonServlet's Cocoon and PublicationService's Cocoon. I think I prefer the first approach because it wouldn't require additional setup and configuration is right where you'd expect it to be. Seems cleaner somehow. It also circumvents the issue of sharing the Cocoon instances we were discussing before. On the other hand, http being a request-response type of affair, the browser response is not well defined. There's also the additional complexity added to the core of Cocoon. Rgrds, Unico