You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by Miles Elam <mi...@pcextremist.com> on 2003/11/29 02:06:38 UTC
Databases in Flow
Please forgive the staleness of this comment, but I haven't had net
access at home for about a month. >4,000 messages!?! *sigh* I feel
like a heroin junkie without access to a steady hit and after long last,
I overdose. But I digress...
This is in regard to the general sentiment that coding in
JavaScript to the database in flow is automatically a bad thing, an
anti-pattern, and that the functionality should only ever exist in Java
objects. Ummm...why?
Don't get me wrong, I can think of many cases where encapsulation
in an object is a great thing. I can also think of many instances where
an object would be unnecessary. In fact, I've heard people speak of how
a RDBMS->Object->property extraction, and variable injection to the
pipelines is preferable in most cases. Hunh?
Let me see...write an object that equates to a glorified C struct,
have that object (or a helper object) make a database call, put the
values into aforementioned object, have the Flow script pull the values
out of the object, and drop the values into the sendPage function.
OR...have the Flow make a database call and drop the values into the
sendPage function.
The first is useful in many situations where there is some
commonality/reuse in the system with regard to this action, where
distributability is required, some special processing occurs every time,
and/or when you want to keep the source close to your chest.
The second is useful when you only have one (or few) box, a single
database, are basically publishing-oriented, want an easy try-debug
environment without the extra compilation step, etc. In the cases where
stored procedures are being used in the database and several
circumstances where transactions are used in the database, writing extra
Java objects is fundamentally useless and adds unnecessary complexity.
If I'm for example adding a user to a system via a stored procedure that
takes care of duplicate usernames, invalid values, etc., what good is
the Java object? Sure, you could pass the SQL to the object from the
JavaScript, but how is this better than having direct access to JDBC's
callableStatement?
Why the animosity toward JavaScript? I don't hear people
clamouring for ESQL's removal from XSP because SQL should only be made
from within object calls. Why? Because XSP is compiled to a Java
object and therefore "cleaner"? Because the Java will be measurably faster?
Show of hands! Who believes that the choice of programming
language will be the bottleneck in web database environments. C'mon!
You know who you are!
Flow was supposed to make things easier. If the intent in this
mandatory object facade madness that people should be forced into good
habits, I believe it to be misplaced. If someone wants to try writing
all of their app code in JavaScript without any benefit from EJBs or
Avalon (which by the way, I am NOT advocating), it will be a very fast
lesson in software development akin to the individual who decides to shy
away from Cocoon and write their own simple XML/XSLT
publishing/application environment because they want it "to be smaller
and faster without all of the bloat."
There's a difference between making the correct method more
desirable (and therefore more likely to be used) and shutting the door
on different approaches that (in my opinion) may very well be valid for
the specific use case.
If all I need is the result value from a stored procedure because
the code in question exists in the database, how is my life enriched by
having to write a separate object that needs to be maintained and
distributed? But that is the current state of events. I had hope when
I saw the Database object used for Petstore, but I fear that people are
denigrating it because it's that icky JavaScript stuff.
Coming from an ASP and JSP perspective, I can loudly give testament
to rapid development of one-use or narrow-use database access via
scripting. While others are fiddling with their O-R mapping files, some
of us have moved on the the next, probably more important task. And we
only have a single Flow function to deal with whereas others would have
a Flow function, an O-R map, and a generated class file.
Sorry for the vent, but once again, I've been without steady net
access for a month and when I last left the forum, there weren't quite
so many voices in favor of dumping a database-level Flow API --
something that would save me no end of time and effort both in the short
term and the long term.
If I am mistaken in my impressions of others on this list because I
skimmed far too quickly trying to catch up, my apologies. If so, feel
free to demand that I medicate myself. If not, I'd like to talk about this.
- Miles Elam