Hi, Jeff.

> I'm with Jon here:  Why the heck would you want to do this?

See previous reply.  In addition, languages come and go.  Remember when
TurboPascal was hot?  QuickBASIC?  C and C++?  Perl?  PHP?  What happens
in 5 years when another awesome language makes an appearance and
everyone forgets Java?  Legacy code, I believe is the term.  COBOL,
FORTRAN, Smalltalk, etc.  Tying yourself to a language isn't a viable
long-term strategy.  I love Java, don't get me wrong.  But don't fool
yourself into thinking it's going to be around forever.  ;-)  (This
isn't flame bait; I'm using history and nearly 20 years development
experience as a guide.)  XML, on the other hand, is a technology with
staying power and a history that extends back into the late 1960s!

Another reason is that you can write more efficiently in a new
language.  I've found that BOX source is typically 5 to 30 percent
smaller than equivalent Java.  It has an extremely tight focus on basic
business logic.

> for defining business logic.  Why?  It's trivial to define such logic in
> Java, and doing so avoids the limitations of your script (whatever they
> may be).

The only limits are those imposed by the processing engine's
implementation language.  (Currently Java, but could be C, C++, Perl,
etc.)

Again, coupling yourself to Java (or any language for that matter) is
not a good thing from a long-term perspective.

> What if you wanted to use a one-way hash on the passwords?  What if user

I had a similar problem already.  The solution:

<var name="hashKey" expr="generateHashKey( $parameter, $parameter2,
$parameter3 )"/>

So long as "generatePasswordHash" is available to the system (neither
defined nor imposed), it'll work.

> information was stored in EJBs or LDAP?  What if you wanted to use the
> standard J2EE authentication and role-based security system?  Can your
> script handle this?

This can be solved in either of two ways:

        1) Set up a small (internal) server that uses an XML-based protocol for
information exchange.
        2) Write a wrapper function to extract the information you want (e.g.,
generateHashKey).

> You can use whatever scheme you would like to test the password, limited
> only by your ability to express the behavior in Java.  Furthermore, it

<if test="!checkPassword( $password )">
  <var name="Phase" expr="'badPassword'"/>
  <stop/>
</if>

As before, not limited to a particular language.  But you might as well
use Java, because Java rocks.  :-)

> this example, the yourHelper object).  How would your system reuse
> business logic to build a Swing client?

No -- but then again, that wasn't what it was designed to do.  It is
meant for e-commerce/web-based solutions (plus interacting with remote
servers via XML, simple file I/O, and database laughter).  Nearly all
e-commerce sites do the following:

1) Present HTML to the user.
2) Gather information from the user.
3) Do something with that information.
4) Loop to Step 1.

I'm under the impression that Cocoon is a bulldozer for such a trivial
scheme.  BOX, keeping the analogy, would be a shovel: simple,
straightforward, precise, and almost intuitive.  (The only truly
intuitive interface is the nipple.)

I don't think this point can be stressed enough: BOX's design goal is to
solve the aforementioned 4-step process.  It is tightly integrated with
XML, XSL, SQL, and file I/O -- to the intentional exclusion of all
else.  It has minimal facilities required to run native code via
embedded function calls.  GUI-based applications and batch processing
are beyond its ken: they would only serve to complicate the
architecture.

BOX inherently knows about state transitions, broken down by Stages and
Phases.

> And about the last point you brought up... how is your system any more
> platform, language, or database neutral than Struts, Maverick, Turbine,
> or WebWork?

If the system is coupled with Java, you lose language independence. 
When I say "language" I don't mean human languages.  Just in case there
was some confusion.  However, BOX is both programming language and human
language neutral.

STRUTS
------
Struts is inextricably tied to Java.  Struts also couples logic and
presentation (or can):

        <input type="text" name="username" value="<%= loginBean.getUsername()
%>"/>

What if I wanted to limit the user names to a selection list?  (Silly
example, but the idea can cause significant ripple effects; consider
typing in a catalogue name versus choosing one from a list, for those
who like practical examples.)

Struts is big and bulky; another bulldozer.

MAVERICK
--------
Maverick is tied to Java.  Also allows people to shoot themselves in the
foot with JSP.  And if it's true that you can use XSL without XML, it
strikes me that you're losing a whole lot of control.  (I couldn't find
much information on Maverick.)

TURBINE
-------
Turbine is coupled to Java.  It's not easy to use any particular
database (e.g., an entire help section on how to integrate Oracle). 
With BOX, you set the default database with a straightforward
configuration file:
        JDBC_DRIVER=org.postgresql.driver.Driver
        DB_URL=postgres://whatever:5432
        DB_USER=username
        DB_PASS=password
        --
        JDBC_DRIVER=com.oracle.driver.Driver
        etc.

Note that this is used by the processing engine.  If you want to write a
processing engine in another language (like C++), then you have to
derive a mechanism to do the database connectivity.  The business logic
never needs to know.  Even better, you can add a DB_NAME property and
extend the BOX language thusly:
        <sql name="'POSTGRESQL'">
                ...
        </sql>

This allows people to dynamically choose a different database during
runtime (note: completely backwards and forwards compatible; BOX is
extensible).

Turbine, like Maverick, also lets you shoot yourself in the foot with
JSP.

The control over the page layout strikes me as inflexible; or at the
very least quite complicated.  With BOX, you are not limited to any
particular style or layout.  For example, imagine a Help system embedded
within your main site.  You want to give it a different header (and
footer).  With BOX, simply alter the header included within the
presentation's XSL page:

Regular header: <xsl:include
href="file://localhost/view/common/header.xsl"/>
Help header: <xsl:include href="file://view/common/help-header.xsl"/>

WEBWORK
-------
Lastly, there's WebWork.  Tied to Java.  (It incorrectly claims that
XML/XSLT isn't suitable for large scale application development.  BOX
can handle hundreds of tables, tens of millions of rows for several
tables, for a system that has over 9000 clients, and over a million hits
a day.  If that isn't a large enough scale, please hit me with the Clue
Stick.)

WebWork also does the foot shooting thing with JSP.  Server Pages (JSP,
ASP, PHP) will always scale incredibly POORLY because they couple
presentation and logic.  There isn't a whole lot of information on
WebWork (example source, for example) on the SourceForge site.

RED HERRING
-----------
These projects keep touting the words "object-oriented" like some sort
of Golden Solution.  If your e-commerce web site is nothing more than a
glorified state machine, why do you need the power of
object-orientation?  To build a robust, extensible, and scalable
solution, use the key lessons OO teaches:

        o data encapsulation
        o modularity
        o code re-use

As a side note, read up on the works of Alan Holub for a deep
understanding of "object-oriention".  There's a related page on why
"get()" accessors are bad.  The links follow:

        http://www.holub.com/
        http://joot.com/dave/writings/articles/encapsulation.html

Conclusion
----------
In summary, BOX is an interpreted state machine.  It completely
decouples presentation from logic, to the point that coupling them is
awkward (unlike ALL the other systems mentioned).  The language syntax
is trivial (anyone who knows BASIC can learn BOX; there are about 20
keywords), and extensible.  Current technologies either roll you over
with complexity due to supplying everything, or constrain you in various
fashions (needs Java, needs JSP, forces presentation styles, etc.).  BOX
is meant to be simple and impose as few restrictions as possible, while
giving the programmer complete control over what can happen insofar as a
web site is concerned.

More database neutral?
        Moreso than Turbine.  As neutral as the others, yet BOX seems easier to
configure and maintain.

More language neutral?
        Definitely: it doesn't impose any Java requirements.

More platform neutral?
        Probably: it doesn't require Apache, Tomcat, Java, Xalan, or Xerces.

Sincerely,
Dave Jarvis

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to