<?xml version="1.0" encoding="ISO-8859-1" ?>
<!--
    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->
<document>

    <properties>
        <title>Introduction</title>
    </properties>

    <body>
        <section name="Navigation Top">
            <a href="installation.html">On to the General Installation Guide&gt;&gt;</a>
        </section>

        <section name="Introduction">
            <subsection name="General Introduction">

                <p>Welcome and hello to MyFaces Extension-Scripting, short Ext-Scripting. Ext-Scripting is an extensions
                    project for MyFaces. It tries to add scripting and rapid prototyping (artifact level hot deployment)
                    capabilities to JSF by adding
                    scripting languages and JSP like recompilation mechanisms.

                    Following link to the a video on YouTube shows you what Ext-Scripting can do for you:
                </p>

                <p>
                    <center>
                        <iframe class="youtube-player" type="text/html" width="800" height="600"
                                src="http://www.youtube.com/embed/g2YvzOloNyI" frameborder="0">
                        </iframe>
                    </center>


                </p>
                <p>
                    As the video shows, you can make changes to almost all JSF artifacts on the fly, and at the next
                    reload the changes are present.
                    The result is a reduction in server restarts and better turn around times. The
                    same rapid prototyping approach which is normally present in scripting languages and scripting
                    language based frameworks.

                    Additionally to that, Ext-Scripting integrates various scripting languages to be used in conjunction
                    with JSF, so that a mixed language approach becomes feasible within the bounds of the framework.
                </p>

            </subsection>

        </section>
        <section name="Documentation">
            <p>
                Ext-Scripting provides extensive documentation. Feel free
                to browse our
                <a href="installation.html">Installation Guide</a>
                or
                <a href="usersguide.html">Users Guide</a>
                for further information.
            </p>
            <p>
                Also
                <a href="download.html">download links</a>
                are provided on the left hand side of this page,
                as well as further information.
            </p>
        </section>

        <section name="Short Overview over Ext-Scripting">
            <subsection name="Supported for Scripting Languages">
                <p>
                    Ext-Scripting currently only supports Groovy Java and Scala (1.0.3+) as dynamic languages.
                    Additional languages will be provided in subsequent releases.
                </p>
            </subsection>
            <subsection name="Support for JSF2 and JSF2 Artifacts and Annotations">
                <p>
                    One of the main goals of Ext-Scripting was to provide JSF2 support out of the box. Most new JSF2
                    artifacts are supported. Ext-Scripting even adds scriptability to the new annotation syntax of JSF2
                    by allowing annotations to be used in a dynamic manner!
                </p>
            </subsection>
            <subsection name="Support for MyFaces">
                <p>
                    Extensions scripting supports MyFaces only for now. Following versions are supported.
                </p>
                <ul>
                    <li>1.2.8+ (note support will be dropped soon post 1.0.2)</li>
                    <li>2.0+</li>
                </ul>
                <p>
                    Older versions are not supported due to missing plugin mechanisms which allow Ext-Scripting to work.
                </p>
                <p>
                    The JSF RI and Mojarra as time of writing are not supported due to missing framework hooks needed,
                    but Mojarra supports Groovy out of the box within the core engine. So for the time being only
                    MyFaces can be used. Also Portlets for 1.0.x are not supported, this limitation will be eliminated
                    in future versions. Support for Mojarra maybe will come post 1.0.x.
                </p>
            </subsection>

        </section>

        <section name="Navigation Bottom">
            <a href="installation.html">On to the General Installation Guide&gt;&gt;</a>
        </section>


    </body>
</document>