On 27 Jun 2003 at 9:34, Unico Hommes wrote: > If I can make it that all parts of the system can share the same > Cocoon object then I would definitely prefer that. Because apart from > memory, there's also the cache that is shared.
Presumably you're referring to a cache in a transient store? Let's discuss this in a moment... > I don't think it is necessary to make it thread-safe though. Once we > factor out the Cocoon creation code CocoonBean would become a > lightweight object. Yup. But again, it might not be that hard to make it thread safe. Presumably just an object passed in that contains all of its configuration information. > > Otherwise we work out a way to get hold of the Cocoon > > instance of the servlet. > > Perhaps CocoonServlet could put it in the application Context object. Let's wait until we've worked out what kind of component we're talking about - then we can decide how that component gets hold of its Cocoon object. > > Okay. So the bean needs to log to a particular logging > > category what it is up to, so that you can tell whether it > > succeeds or not, and then return to the next sitemap > > component (as SAX events) either the results of the page > > generation (if done > > synchronously) or the fact that a request was successfully > > made to the bean (if done asynchronously). > > Sounds good to me. Great. > > > > I would say there's two sides to the approach I would > > > > recommend: small steps, and keep it compatible where > > possible. Let's > > > > identify small ways we can get the functionality we want, whilst > > > > respecting the interfaces that others are quite possibly > > using. So, > > > > what first small steps would assist you in your work? > > > > > > Well, I'd like to use CocoonBean for publication runs, but > > I want to > > > reuse Cocoon instance. So as a start I think adding a > > constructor to > > > CocoonBean like you proposed would be a good start. > > > > Great. Send me a patch and I'll commit it. > > OK. I'll also have to rearrange initialize() for that because some > stuff still needs to be executed either way (run related stuff) and > some stuff shouldn't (Cocoon creation stuff). That's stuff I've not personally touched. Can't say I really understand it all, so I'm glad you're prepared to do it! > I don't agree that sitemap components are the way to go. Of course a > set of sitemap components requires minimal or no changes to Cocoon > core components and provides a lot of familiar plumbing. But the fact > is that it's an awkward arrangement of responsibilities: Cocoon > manages and runs sitemap components that in turn (manage and) run > Cocoon. If you don't want it to be a sitemap component, how else would you propose to do it? Somehow it needs to be under the control of the sitemap so as to exist as a part of the URI space. > I think that the role of the sitemap and its components should > be more or less constrained to creating documents. Hmm. Not so sure - you've got Lucene that has a page to generate an index. Are there not other examples too? The thing is, that if you create a sitemap component, you can build around the publishing service a web site for deployment. Imagine a site that you log onto (e.g. using the authentication framework). Then, Cocoon reads a database to find out what sites you are allowed to publish, and offers you a drop down list of those sites. Maybe pages need deploying in a specific sequence, so this sequence can be managed by the flow. And when you want a page, pages or a site to be generated, you click 'go', and off it goes, probably in the background, allowing you to get on with other stuff. Then you might have a 'status' page, based around a 'PublishServiceStatusGenerator' that can tell you how it's getting on. It allows the site designer to build a web interface to publish their site. That's why I would like to see it as a sitemap component, because I would like to use it in building sites to build sites! For poor people, they can stick the Cocoon site on an ADSL line, and have it publish to a proper web server. Multiple authors can upload content and publish it, and the world sees a decent web server. > > (I've got some code (that doesn't yet work) that'll make the > > bean only generate pages that haven't changed. That'd make > > the publishing service even more powerful if we can get it working). > > Great! We could eventually also supply a way to delete remote > resources when they no longer exist locally. Should be possible. If you have some understanding of the Cocoon Cache, you can probably help me get it to work. Oh, I'm in the process of reworking Main.java and the bean to add a BeanListener interface. That means that the bean does not do any outputting to System.out. It just calls methods on the Listener interface - the bean caller needs to register a listener with the bean. I've moved the broken link reporting into Main, so that the bean simply reports a broken link, leaving it to the user to decide exactly what should happen when a broken link is found. Here's the interface as it is at the moment: public interface BeanListener { public void pageGenerated(String uri, int linksInPage, int pagesRemaining); public void messageGenerated(String msg); public void warningGenerated(String uri, String warning); public void brokenLinkFound(String uri, String message); } I look forward to your initialisation patch. Regards, Upayavira