On Thu, 5 Jun 2003, Vic Cekvenich wrote:

> Date: Thu, 05 Jun 2003 17:20:26 -0400
> From: Vic Cekvenich <[EMAIL PROTECTED]>
> Reply-To: Struts Developers List <[EMAIL PROTECTED]>
> To: [EMAIL PROTECTED]
> Subject: http://cvs.apache.org/builds/jakarta-struts/nightly/struts-faces
>
> (hope this does not detract from more important issues)
>
> http://cvs.apache.org/builds/jakarta-struts/nightly/struts-faces
>
> To the extent that this implies Struts _should_ integrate to Sun JSF, I
> do not like it.
>
> This is quite different than JSTL, which was an Apache License.
> Maybe there should be integrations posted in cvs  apache to Expresso,
> ScioWorks (they integrate more to Struts), lots of Vendor IDE and J2EE
> servers have integration to Struts; maybe their integration jar?s should
> be posted on non Apache domain, lots of software on sf.net has Apache
> license.
>

Vic, the tenor of your question implies that you don't understand a few
things about Java software and licensing.  From watching a wide variety of
conversations floating arount the 'net, it seems you are not alone.
Here's a few thoughts that should help illuniate the situation.  This is a
pretty short summary -- more detailed information can be gathered from the
Java Community Process web site:

  http://jcp.org

The most important thing to understand is the difference between the
licenses for Java *specifications* (i.e. the functionality that any
product claiming to be complaint must provide) and *implementations* of
those specifications.

Java Specifications are created under the auspices of the Java Community
Process (JCP), and you can keep track of progress at at <http://jcp.org>.
JavaServer Faces, in particular, is being developed under JSR-127.  When a
JSR is originally proposed, the proposer (Sun, in the case of JSR-127)
must also provide the proposed business terms that they anticipate the
specification will be licensed under, once it is complete.  It is, and has
always been Sun's intention, that the terms for JSR-127 would be
substantially similar to the terms that resulted from the discussions with
Apache last year -- indeed, you will probably remember substantial
discussions last year between Apache (and others) and Sun to address the
licensing issues for Java technology, particular with respect to open
source implementations.

Jakarta Web Site Info About The Agreement:

  http://jakarta.apache.org/news/jspa-agreement.html

Sun's Letter Of Intent:

  http://jcp.org/aboutJava/communityprocess/announce/LetterofIntent.html

The upshot of this is that, over a *year* ago, Sun agreed to modify the
license terms for many JSRs, and included funding scholarships for non
profit open source organizations that wish to prove their implementations
are compatible with the specification.  JavaServer Faces (JSR-127) is
specifically listed as one of the Sun-led JSRs which would have business
terms that support the ability for open source organizations to create an
implementation that is compatible.

Now, remember -- a specification is *not* software -- it is a bunch of
*requirements* that any software wanting to say that it "implements
JavaServer Faces" must adhere to.  So, how does anyone know that a Java
specification can actually, in fact, be implemented in a way that meets
all the specification requirements?  And, how can you tell if any specific
implementation does, in fact, meet the requirements?

The JCP process requires that the specification lead (again, Sun, in this
particular case) must also supply a Reference Implementation (RI), to
prove that one can actually create a compliant implementation, and a
Technology Compatibility Kit (TCK) that can be used to test the compliance
of *any* implementation.  Currently, the RI that Sun offers for JavaServer
Faces is available under an "early access" license (since the spec isn't
final, no redistribution is allowed -- did you notice that the
struts-faces distribution doesn't include the jsf-api.jar and jsf-ri.jar
classes?  this is why -- I don't get to break the rules even though I'm
co-spec lead, and am heavily involved in the RI implementation and testing
:-).  How the RI is licensed is pretty much up to the spec lead and the
expert group.

Note, however, that the RI is very unlikely to be the only implementation
of JavaServer Faces that ever exists.  In fact, because of the Apache
agreement, it's perfectly feasible for any open source group to decide
that they want to create an open source implementation of JavaServer
Faces, and pass the TCKs so that you can prove it.  Sun will even offer
assistance to qualified non-profit organizations that wish to attempt
this.  I know of at least one open source implementation effort that was
started over at SourceForge; there's no restriction on how many
implementations there are in the world.

This is exactly analogous to the way that the world is with servlet and
JSP.  For example, the Servlet 2.3 (and JSP 1.2) specifications were
created under JSR-53 in the JCP process.  (For the next round, Servlet 2.4
is being developed in JSR-154, and JSP 2.0 is being developed in JSR-152).
Sun was and is the spec lead of these specs, and provides a reference
implementation -- the J2EE RI -- which (for the servlet and JSP specs)
happens to incorporate code that comes from Tomcat.

But, is Tomcat the only implementation of the Servlet and JSP specs in the
world?  Not by any stretch of the imagination.  There are multiple open
source and closed source ipmlementations -- in fact, every J2EE app server
needs to provide an implementation of these APIs in order to meet the
overall J2EE requirements.  Some incorporate pieces of Tomcat; some write
their own; some incorporate third party code from other suppliers).  But
*all* of those implementations need to pass the TCKs in order to claim
that they are actually implementations of the corresponding specs.

In short, there is no such thing as "open sourcing" the JavaServer Faces
specification itself, because it's not software.  There is absolutely an
ability for multiple implementations to be created (open source or not
doesn't matter -- compliance matters).  Or, if you don't believe that
JavaServer Faces is the right answer to the "web application user
interface components" technology problem, then you can go implement your
own APIs and your own framework -- that's fine, and in that case nothing
about JavaServer Faces need concern you (except for the fact that more
than a few software producers *do* see to care about it, so your cool
widget library is going to have some serious competition :-).

A couple of points about the Struts-Faces interface library in particular
might also be of interest.

* If you take a glance at the build.xml file
  (contrib/struts-faces/build.xml), you will note that the
  RI classes are *not* in the compile time classpath.  Only
  the API classes are included.  That means this library will
  work portably on any implementation of the JavaServer Faces
  APIs, in the same way that it compiles against a servlet.jar
  from anywhere and has no dependence on Tomcat or any other
  container.  As soon as there are other implementations of
  JavaServer Faces around, this library will work just fine
  (as long as they implement JavaServer Faces correctly :-).

* You will also note that the jsf-api.jar and jsf-ri.jar classes
  are not included in the distribution.  As I mentioned above,
  the EA license prohibits redistribution (because it's not final
  yet), and that rule applies to me just like it does to
  everybody else.

* One of the reasons that Struts has become popular is that
  people seem pretty confident that their investment in learning
  and using the technology will be protected for long enough to
  earn back the investment cost.  For Struts, one of the things
  I felt strongly about doing was ensuring that Struts could
  interoperate with the latest emerging technologies like
  JSTL and JavaServer Faces.  Indeed, I proved (by doing it) that
  you could migrate an existing Struts app, one page at a time,
  to use JavaServer Faces and JSTL tags (instead of the corresponding
  Struts tags), with nearly *zero* changes to the back end
  business logic.  MVC really works -- what a concept :-).

* The lesson I learned from this, and that everyone else should to,
  is that your investment in existing applications based on Struts
  is in very good hands -- you are not going to be forced to migrate
  away from it any time soon in order to take advantage of the latest
  and greatest Java technologies.

* An additional lesson, though, is for the Struts developers ourselves.
  We were one of the pioneers in the webapp framework space, and have
  arguably been the most successful.  But we were not alone.  Indeed,
  my spreadsheet of various implementations of UI component and web
  app framework architectures (just the ones in Java) has roughtly
  fifty entries in it.  That's way too many for tools to support;
  it's way too many for potential users to evaluate; it's way too
  confusing to the market; and it's way too weak for Java as a whole
  in the face of a determined competitor who feels threatened by the
  success of Java technologies at every turn.

* Every technology goes through a lifecycle of innovation, followed
  by popularization, followed (often, but quite often in the Java
  world) by standardization, followed by commoditization.  We're
  rapidly approaching the standardization point in the webapp UI
  component space -- and it's become abundantly clear to me how
  many serious players in the world have been waiting for this, so
  that they can build products and packages and libraries and tools
  on top of a standard (instead of each trying to pitch their own
  APIs).

* Once there are robust, mature, implementations of a final 1.0
  version of JavaServer Faces (and I know for a fact that there
  will be more than one), it's decision time for application
  developers who are currently using what will then become
  "non-standard" approaches to that API.  For Struts users,
  I have the following recommendations:

  - For your existing apps, and projects currently in
    development, continuing to use the Struts HTML tag library
    is a sensible decision.  However, I'd still recommend using
    JSTL tags instead of their Struts counterparts (Struts offers
    an integration library for JSTL tag usage too :-).

  - If your app deployment plans are further off, and/or you
    haven't started picking your base technologies yet, I would
    suggest that using the current Struts HTML tags is not a
    very good idea.  You will be much better off investigating
    using JavaServer Faces component libraries instead -- not
    only are they much more powerful than the Struts tags, you'll
    be able to use component libraries from *anyone*, just as you
    can integrate JSP custom tag libraries from anyone today.

As for whether JavaServer Faces is good or bad technology ... I'm willing
to let the market answer that question.  :-).  But I can guarantee you
that there are already millions and millions of client devices that can
already utilize JavaServer Faces based applications, versus hundreds?
thousands? that can use cool things like XForms or XUL today.

Of course, even that comment oversimplifies things a little too much,
because it leaves the impression that JavaServer Faces is just for HTML
based browsers.  That's not the case at all -- if you're at JavaOne,
you'll enjoy seeing an SVG based rendering of the same application (with
zero changes to the back end logic).  Creating renderkits for wireless
devices (or even rendering XUL and XForms if you like -- there's a small
sample XUL renderkit in the "demos" directory).

I can tell you one thing, though ... working on JavaServer Faces has
already had very positive impacts on *my* professional career.  :-)

> Craig as original author of Struts, deservers lots of latitude in what
> he does.
>
> I still don?t like it. If there is a president I am unaware of, I
> withdraw my objection.

Does Struts run on more than one servlet/JSP container?  Yes.

Does it run only on servlet/JSP containers that are open source?  No.

Why would you believe that things should be different for a different Java
specification?

>
> .V
>
> ps: I have personal belief that JSF hype will be followed by search for
> the guilty, punishment of the innocent and praise for non participant.
> My preference is Apache Struts takes no part of Sun JSF.
>

It's my personal belief that Vic doesn't speak for Apache, or for the
Struts developer community, on this topic :-).  Vic is not, in fact, a
part of either community that he makes this recommendation to.  I wish he
would stick to speaking for himself.

Craig

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

Reply via email to