On Wed, 28 Nov 2001, Stefano Mazzocchi wrote: > I'm restarting Jeremy's thread about WritableSource in order to achive a > more architecture-oriented view of the problem. > > It is obvious that, in order to be a useful piece of a successful CMS, > Cocoon must be equally able to drive both data flows: inward and > outward.
Agreed. > For the outward flow, Cocoon beats the crap out of almost any other > solution (IMNSHO). > > For the inward flow, well.... let's be honest: it more or less sucks. It was never taken into consideration so far and that sucks now. > ok, ok, maybe I'm kinda rude but this is the truth: there are frameworks > outthere that give you much better tools to handle the data that flows > in. As Prowler is one of those which abstracts the sources to look XMLish. > Cocoon is currently a publishing framework, where publishing means > "outward-flow oriented", That's what I mentioned above. > but all of us would like to see a better > synergy (or equilibrium) between the two flows, in order to make web-app > building easier, but without loosing the technological advancements that > Cocoon introduced. > > Is this possible? > > Giacomo and I are holding back a big RT about the next generation of > pipeline component assembling (a.k.a. flowmap, sitemapNG or more > generally "statemap"). We spent a few days talking about it and we > didn't come up with something solid enough to propose as a solution... That RT is still in my Dreaft folder not finding the right words and diagrams and of course a proposable solution to all that. > ... but we *did* identify some general rules and general concepts that > might help triggering the discussion about this. > > Anyway, this is not what this mail is about. > > The question, today, gets deeper: is the current Cocoon architecture > asymmetric in respect of data flow? Regarding the concepts (URLFactory, Source), yes it is. > First (and obvious) thought is to *reverse* the terminology: > > generators -> transformers -> serializers > > becomes > > deserializer -> transformers -> accumulator > > Is this something good? > > No, I don't think so: what would be the difference between a generator > and a deserializer in terms of interfaces? I can't see one. Exactly. > And what about accumulators? well, they'd store information, but would > need to give some information back. If this is in form of SAX events, an > accumulator is a transformer, if this is a binary stream, it's a > serializer. > > But one concept here is good: the concept that the opposite of a > generator is an accumulator (I'm an electronic engineer, you know :), in > electrical terms, a battery, a place where energy (here, data) is stored > for future use. > > In software terminology, an accumulator is normally called a "store", > "archive", "cabinet", "safe" and so on with terms that give you an idea > of "something" that allows you to place information that will > persistently remain there. A Sink as opposed to a Source. But seems to be mutually exclusive as what Jeremy is proposing with his WritableSource (which IMO isn't a good name as well as SinkSource). > So, does this mean we need a "Store"-behaving component in the cocoon > pipelines? > > No, such a store-behaving component would not be distinguishable from > another transformer. I'm not so sure. Today we feed the Serializer with an OutputStream where it can "store" its output onto (even if this is outward from a requestors point of view). What about using the same architecture for a StoringPipeline where the last component (accumulator for now) will be given a Sink to store the Output it produces. > So, I think I just proved that the current pipeline architecture is > *not* inherently biased toward outward data flow, despite the component > names that seem to inspire the opposite. > > - o - > > The above is an important result: it states that Cocoon doesn't require > core architecture modifications. I already knew this, otherwise I would > not be +1 on a final Cocoon 2.0 release. But it's good to let you guys > know about this as well. > > So, now that we have an architecture that is, at least, in theory, > general enough to handle the problem, how do we attack it? > > The "accumulator" concepts gives interesting ideas: > > 1) it must receive SAX events (it would force concern overlap if the > binary adaptation was performed by the store itself, so > "parsing"/"deserialization" should be performed before, at XML > generation stage) > 2) it must throw data out (otherwise we would not be able to know what > happened) > 3) it should be SAX events (otherwise, we would not be able to process > the data further) > > Thus, a "store" is behaviorally equivalent to a "transformer". Well, in term of web applications (and CMS is more a web application that a publishing system) I'd like to see the inward step separated from the outward one. We need to be able to perform some logic in between inward and outward processing. I don't think you can directly connect the inward pipe to the outward pipe without giving an Action a chance to act on the results of the inward pipe. > > - o - > > Now, how can this be handled? should we reverse the Source interface and > come up with a "Destination" (sort of InputStream/OutputStream > parallel)? > > If this XML contained data, we could come up with an automatic > relational mapping between the arriving XML and the SQL update query on > a RDBMS. It could be pretty straightforward. > > At the same time, how would you do such a thing on an article stored on > a native XML DB? > > As Jeremy pointed out, XUpdate is a choice. I must tell you that I don't > like XUpdate that much, but I admit it's a choice. Please share your oppinions on XUpdate with us. > > Or we could use CVS, file systems, relational BLOBs, defragment the > document into LDAP nodes, FTP, POST it somewhere else, email it to your > mom, fax it to your brother, print it on a piece of paper for your > favorite human slave to subsequently crawl... > > ... up to you. Crys for an abstraction like Prowler!? > > Now, the real question is: do we need any special protocol handlers for > these things? > > In all honesty, I say that it's, again, up to you: you might find it > easier to come up with something like > > Destination d = DestinationFactory.create("dbxml://host/db/path/"); > > then serialize the input data into the source stream and have the > protocol handler automagically generate the XUpdate for you. > > In this, case, admittedly, we need the "reversed source". > > But the above could be done by hand using the DBXML API, or simply > calling a special xupdate wrapper around it (as an avalon component?). > > Why am I telling you this? > > Well, from an architecture design point of view, I can't see any > limitation in what we already have, but the "reversed source". > > Jeremy named it "WritableSource" (which is admittedly an ossimoron). [havn't found 'ossimoron' in my dict(?)] > > Berin proposed to look at Monitors (which is not exactly a name that > reminds me of a storage location, BTW) > > Anyway, this is, at this point, more an Avalon discussion than a Cocoon > one, since this is a general thing. > > As for helping Jeremy to implement a Cocoon 2.0 version of FP, my > suggestion would be to aim at creating a general XUpdateTransformer that > wraps round the existing DB:XML API to make code persistent in a native > XML DB solution. > > Having the ability to go both ways from a native xml db would instantly > turn Cocoon into a CMS, or, at least, in a toolkit to create your > customized CMS (which is what I'd really like to have, rather than a > fixed CMS) > > Hope this helps. > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, email: [EMAIL PROTECTED]