Btw. the same what I mentioned about dojo is also true for jquery and prototype and any other library.

Lets have in mind what we want to achieve:

a) Send queued asynchronous xhr requests on javascript encoded form data

b) Parse incoming xml

c) Use innerHTML for the incoming static content

d) Use eval for the incoming dynamic content in a safe way so that IE does not crash :-)

e) deal with incoming errors correctly

f) deal with listeners in a specified listener interface for various stages of the cycle

g) in the long run deal with browser inconsistencies on detail level and with portlets and iframe transports (for covering fileuploads)

Where in those areas do third party libs really help?
Almost nowhere except for the xhr request part and some logging, two areas too small to add another 50 kybte of code which 95% of it is not used!

My first choice as I said to cover all this was Trinidad but I gave up halfway because it simply was too much work to refactor the code down to the level I needed, it was basically the same work as to start from scratch and build a leaner more maintainable solution and reuse some parts of Trinidad!

J4fry in our Jira is similar currently to me as Trinidad was in the beginning (a possible candidate due to huge overlap of functionality) with the advantage that the developers seem to have done the adjustment work already so we just seem to have to do the integration work. But as I have to check the code first to see if it is viable for us. If it is it would be a good starting base and I could drop my own work! But then again I have to have a full integration in our namespace and probably some adjustments regarding jsf2!

In the end probably a few weeks of work would be safed for us (which wouldnt by using our old Trinidad core, and which would not by reimplementation from scratch!

So to give a short summary where I personally stand and why, and it is not performance we would not gain anything by using jquery and dojo because there are not too many areas where we even could apply their query apis (which really are fast)

Dojo: too much functionality we do not need, ripping out the core parts we need and integrating them if possible can and should be done. But to my experience some parts are hard to isolate due to intra function dependencies. Namespace mapping to our namespace for the parts we can reuse must be done!

JQuery: everything applies to jquery what was said about dojo, the functionality covered by jquery almost to 100% can be found in dojo as well!

Prototype: This is an absolute no go, the framework simply is too intrusive, hitchhiking the $ operator without any way out (jquery at least has a mode to switch that off), hitchhiking base objects extending them. This framework should not be touched with a 10 foot pole.

Trinidad: The overlap is almost 100% functionality wise, but the codebase is old and proven. But the core shows its age and needs serious cleanup and overhaul to be in line with the spec. Some work was done to clean it up, but in the end it was given up by me in favor of a lean small and maintainable codebase where parts of Trinidad which were needed by the spec were reused!

J4Fry: I will check the code today but the functionality overlap here also is almost 100%! And add to that that the maintainers basically did on a weekend a jsf2 compatible port of the codebase (which still probably needs some adjustments, and we probably get the needed undocumented stuff for portlets, fileupload etc...
(Btw. all things not covered by the RI at all)

So I guess everyone can see why my incentive currently goes towards dropping my homegrown/trinidad based codebase in favor of j4fry if the code quality is good! And why I rather would stay away from the integration of the javascript library of choice for now, although I am a dedicated fan of those frameworks myself (and use them extensively in my own projects: http://tutorials.irian.at/book_de/introduction.html)


Werner








Andrew Robinson schrieb:
I have a different suggestion.

Each proponent(s) of a 3rd party AJAX solution, create a WIKI page on the apache website with PROS and CONS for that library. In that WIKI, include a gap analysis of the library vs. the JSF2 spec. requirements. Also mention speed performance and download performance (size) and also flexibility and maintainability.

Then once these WIKIs are complete enough, the dev@ community can use them as a discussion point on one or another. I just think an email thread for this is not the right solution until the full picture is seen for each library.

I'm surprised no one has mentioned jQuery since Dojo keeps getting mentioned, as jQuery currently has some of the fastest performing code for XPath-like page lookups. Not to mention jQuery is 19KB where Dojo is 80KB

-Andrew

On Wed, Apr 1, 2009 at 3:31 PM, Ganesh <[email protected] <mailto:[email protected]>> wrote:

    Hi,

    I'm sorry if I was sounding "hot". It's just that I'd really love
    the JSF AJAX code we've been crafting and refining for years at
    J4Fry to go into MyFaces and I think there are reasonable arguments
    for this. I'm only trying to bring them forward with the hope of
    convincing everyone ;-)

    Dojo code is cool and it's hype, so if there is anything we can use
    from it that'll be great. License is probably a minor issue here.
    What exactly do you mean: "transport and logging layer"?

    My understanding of transport is that it is hardly more that
    instantiating an xmlhttprequest and queueing the callback. I'm
    afraid "crossporting" the dojo code wouldn't do a great deal of
    change to the code as it's pretty much the same in many AJAX
    implementations including J4Fry and trinidad (please correct me of
    the parts if I'm overseeing here).

    The logging part in dojo in really good - but it depends on firebug!
    Would you want to include firebug lite with MyFaces??? I'm not quite
    sure of the size of it and it certainly needs lots of improvement
    and bugfixing and the state we put into MyFaces would be frozen - we
    would need to crossport new releases as they evolve.

    As you see there are several doubts on my side, but I would be happy
    if you enlightened me in understanding the exact meaning of what you
    where suggesting.

    Best Regards,
    Ganesh



    Werner Punz schrieb:

        Cool down guys :-)
        No seriously I have stated already why I personally would
        prefer not to get a direct dojo dependency into the myfaces core.
        However, I am fine with having ported useful code over from Dojo
        into the core.

        So my proposal is following:

        -1 to a dojo dependency in the myfaces core. I personally thing
        the dojo dependency in Tomahawk was evil enough and I am still
        working on getting it out into a separate component lib!

        Also the namespace in the core must be under the core javax and
        myfaces namespaces no external namespaces should be allowed to
        avoid namespace clashes. The namespacing also should follow the
        jsf2 conventions of using maps and using the openajax api!

        +1 if someone finds something useful we can take it from the
        dojo core lib
        but must adhere to the dojo license (license.txt with the dojo
        bsd license and references in the code should be suffice)

        Can anyone live with that? I personally for instance would love
        to have the dojo transport and logging layer being isolated out
        of dojo to be reused that stuff simply is phantastic but with a
        full dojo dependency for me this would be a no go...

        As I said I am not very much in favor of a full dojo dependency
        although I personally love dojo.



        Werner




        Ganesh schrieb:

            Hi Michael,

            Yes, I agree, Dojo is extremely cool. If I had to start of
            with an AJX
            JSF solution from scratch I would certainly do this based on
            Dojo. I'm
            currently making up some Facelets templates for Dojo JSF
            integration
            (just a playground:
            http://www.j4fry.org/JSFExamples/faces/dojoFacelets/index.xhtml)
            and
            it's great fun! It's also good to hear that there are more
            people
            willing to help with the MyFaces 2.0 AJAX.

            I think the primary problem is not doing some xhr in a queue and
            processing of the callbacks. This has become standard stuff
            Trinidad and
            Dojo and RI 2.0 AJAX and J4Fry do in a very similar way. The
            difference
            is the way that J4Fry AJAX is integrated with JSF from
            scratch. In
            detail there is:

              * JSF ViewState processing
              * Component oriented processing of the HTML replacements
              * Submit parameters that trigger invoke application and render
                response phases
              * Parameters beyond the scope of the spec for PPS and several
                further features crucial for a good JSF AJAX experience
              * Javascript code is already ported to JSF 2.0 and has
            been tested
                against RI 2.0
              * Java code for server side processing has been running
            with JSF 1.2
                for a long time and waits for the JSF 2.0 port
              * JSR 168 portlet support

            I've also opened a jira for a list of features for JSF
            integration that go far beyond the spec. These features
            weren't just implemented for JSF 2.0, they have been
            productive in high performance business critical
            applications for years.

            Implementing all of this from scratch based on dojo xhr is
            surely possible, but it would probably take time to reach
            the necessary code quality.

            Best Regards,
            Ganesh

            Michael Concini schrieb:

                Sorry I'm a little late to the discussion here, but I'm
                a little concerned with the direction here.  I'm not
                very familiar with the advantages or disadvantages of
                J4Fry, but I do know that we're not familiar with the
                state of the J4Fry code.  We do know Dojo is a mature
                release with top level performance and accessibility
                features.  In addition, Dojo is a very well known
                framework with a large and dedicated developer community
                surrounding it.  What does J4Fry offer that Dojo cannot?

                If the concern is developer resources, we have a team of
                developers at IBM who are very active in the Dojo
                community and who have offered their assistance to my
                team in porting the necessary code to MyFaces.  The
                license is really not a concern, as Dojo code is already
                being included in at least Apache project.  As long as
                you mention in your code comments that the code was
                ported from Dojo under the BSD license you shouldn't
                need to do anything else.
                I think it would be worthwhile to have a discussion
                among the community about which framework would be best
                to utilize going forward.

                Thanks,
                Mike

                Ganesh wrote:

                    Hi Werner,

                    I've been reading the current MyFaces 2.0 AJAX code.
                    I want to try and
                    share my concerns on 4 subjects:

                    1. The collecting of form parameters will need some
                    refinement:
                    getFormMap doesn't care for upper/lower case of
                    tagname and type though
                    differ per browser and between HTML/XHTML.
                    getFormMap contains the comment "todo: do not post
                    values for
                    non-triggering submit buttons"

                    2. Response processing not implemented:
                    The complete PPR part is still missing. Different
                    trinidad functions
                    exist to process XML and Text, but the code doesn't
                    say anything yet
                    about the format of the XML response that is to be
                    sent back.We probably
                    cannot rely on valid XML here, because the response
                    may contain parts of
                    a JSP that aren't valid XML (like, for example,
                    <f:verbatim><br></f:verbatim>). Have you already
                    defined a XML format we
                    could use for transport? I think it could be good
                    idea to use the same
                    format as the RI does to make the AJAX libraries
                    exchangeable.

                    3. Dojo cross-port:
                    The JSF2Utils class consists mostly of copied Dojo
                    code. Doesn't this
                    pose a licensing problem if you put it under the
                    apache 2 license? I had
                    a look into the Dojo licenses: They dual-license
                    under bsd and afl and
                    both have different requirements if you want to copy
                    and change their
                    source code. Here's what I found:
                    bsd: Redistributions of source code must retain the
                    above copyright
                    notice, this list of conditions and the following
                    disclaimer.
                    afl: Licensor hereby agrees to provide a
                    machine-readable copy of the
                    Source Code of the Original Work along with each
                    copy of the Original
                    Work that Licensor distributes.

                    4. Trinidad code needs further cleanup:
                    There are lots of functions like
                    myfaces._TrRequestQueue.prototype._doRequestThroughIframe
                    that refer to
                    the old AJAX over IFRAME of ADF Faces which is not
                    required for JSF 2.0.

                    In my understanding of the code it consists of 4
                    major parts:
                    - Trinidad RequestQueue
                    - Dojo Javascript fiddling
                    - OpenAjax
                    - JSF2.0 spec. impl. parts

                    What I want to suggest is to replace the trinidad
                    and Dojo parts with
                    repackaged J4Fry. It would take me less work to get
                    the repackaged J4Fry
                    stuff running instead of trying to squeeze it into
                    the Dojo/trinidad
                    code. Would this be an appropriate and acceptable
                    approach for you? Alex
                    and me could try and get this done within a few days.

                    My other point is: Why do you use a servlet for
                    testing? We could use
                    the RI to test the Javascript against and then move
                    to the Java part
                    with pretested Javascript. This way we would also
                    ensure full
                    compatibility of the XML formats used by both
                    implementations. The only
                    point one could make is about size. If the RI's XML
                    format turns out to
                    be quite talkative we could think about using a more
                    performant format.
                    For this reason J4Fry was originally using JSON but
                    the spec explicitly
                    dictates the use of XML here (god knows why ...).
                    What do you think?

                    Best Regards,
                    Ganesh








Reply via email to