<?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>Advanced Users Guide</title>
    </properties>

    <body>
        <section name="Navigation Top">
            <a href="using_general.html">&lt;&lt;Back to the General Users Guide</a>
            or

            <a href="using_eclipse_.html">On to the Eclipse Users Guide&gt;&gt;</a>
        </section>


        <section name="Introduction">
            <p>Congratulations by the time you have reached this section, you probably have mastered the basics
                of Ext-Scripting, you probably already can edit your local files and have them refreshed on the fly
            </p>
            <p>
                Under normal circumstances you, should be set up by now and you can start coding happily.
                However since this is a framework based reloading mechanism it is wise to dig a little bit deeper
                and to know what is happening under the hood and why things behave like they do.
                If you are interested then read on.
            </p>
        </section>

        <section name="Helper Components">
            <subsection name="Overview">
                <p>Additionally to the standard reloading feature, Ext-Scripting provides two components
                    which hopefully will make the life of every programmer easier.
                </p>
                <br/>
                <ul>
                    <li>The Compiler Output Component</li>
                    <li>The Change History Component</li>
                </ul>
                <p>
                    Note currently and for the foreseeable future only Facelets as page description language
                    will be supported by the components.
                </p>
            </subsection>

            <subsection name="Setup">
                <p>To use the components following namespace has to be included</p>
                <p>
                    <source><![CDATA[xmlns:exs="http://myfaces.apache.org/ext-scripting"]]></source>
                </p>
                <p>Example</p>
                <p>
                    <source><![CDATA[
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:exs="http://myfaces.apache.org/ext-scripting"
      xmlns:h="http://java.sun.com/jsf/html">
<h:head>]]></source>
                </p>
            </subsection>

            <subsection name="The Compiler Output Component">
                <p>One of the cornerstones of Ext-Scripting is the dynamic recompilation.
                    Every file changed, is reloaded, while you hit refresh on the browser.
                </p>
                <p>
                    Now, under normal circumstances, the compiler errors and warnings are written to the console log
                    as following:
                    <source><![CDATA[
            Java Compiler, Error on line:
            org/apache/myfaces/javaloader/blog/Blog.java:30:
            class, interface, or enum expected30]]></source>
                </p>
                <p>
                    Now, trying to catch those errors within the log is "mildly spoken" annoying
                    and time consuming.
                    Exactly for bypassing this problem a compiler output component
                    can be used either in your page or preferably in a second page.

                </p>
                <p>The following Video shows the compiler output component in action</p>
                <p>
                    <center>
                        <iframe class="youtube-player" type="text/html" width="640" height="505"
                                                        src="http://www.youtube.com/embed/v56ru9ZJyhQ" frameborder="0">
                        </iframe>
                    </center>
                    <div class="objectAnnotation">Video: Compiler Component in Action</div>

                </p>
                <p>
                    <h4>Usage of the Compiler Output Component</h4>
                </p>
                <p>The compiler output component currently is presented as Facelets only component as follows</p>
                <source>
                    <![CDATA[<exs:compilerOutput errorsLabel="Errors:" warningsLabel="Warnings:" scriptingLanguage=""/>]]></source>

                <p>Following attributes can be used</p>
                <p>
                    <table>
                        <thead>
                            <tr>
                                <td>Attribute Name</td>
                                <td>Possible Values</td>
                                <td>Description</td>
                            </tr>
                        </thead>
                        <tr>
                            <td>errorsLabel</td>
                            <td>All values are allowed</td>
                            <td>A Label which is displayed in above all errors to notify the user that the error section
                                starts here
                            </td>
                        </tr>
                        <tr>
                            <td>WarningsLabel</td>
                            <td>All values are allowed</td>
                            <td>A Label which is displayed in above all errors to notify the user that the warning
                                section
                                starts here
                            </td>
                        </tr>
                        <tr>
                            <td>scriptingLanguage</td>
                            <td>Java, Groovy or an empty String</td>
                            <td>Scripting language filter, here you can set which scripting engines
                                compile errors should be displayed, currently Java or Groovy are supported as values
                                if you leave the attribute empty or set nothing then everything is displayed
                            </td>
                        </tr>

                    </table>
                </p>

                <img src="images/compiler_output.png" width="600px" height="270px" alt="Image Compiler Output"
                     title="Image Compiler Output"/>
                <div class="objectAnnotation">Image: Compiler Output Component</div>
            </subsection>
            <subsection name="The Change History Component">
                <p>The second cornerstone of Ext-Scripting is change tracking and dependency detection.
                    Now if you have changed a file, Ext-Scripting tracks the changes and also marks
                    most classes which have a dependency to your class as changed.
                </p>
                <p>
                    Again usually the output is pushed into the log as following:
                </p>
                <p>
                    <source>
                        <![CDATA[INFO: [EXT-SCRIPTING] Tainting: org/apache/myfaces/javaloader/componentTest/MyComponentTag.java]]></source>
                </p>
                <p>
                    Again, to get a quick overview within your running page, or preferably an extra page, you can use
                    a specialized component which gives you a quick overview over the change history of the system.
                </p>
                <p>
                    Here our change history component comes into play. With it you can track a certain number of changes
                    done over time including their marked dependencies.
                </p>
                <p>
                    <center>
                        <img src="images/change_history.jpg" width="550px" height="45px" alt="change history component"
                                />
                        <div class="objectAnnotation">Image: Change History Component in Action</div>
                    </center>
                </p>
            </subsection>

            <p>
                <h4>Usage</h4>
            </p>
            <p>The change history component can be currently used in Facelets only as follows</p>
            <source><![CDATA[<exs:taintHistory noEntries="5" />]]></source>


            <p>Following attributes can be used</p>
            <p>
                <table>
                    <thead>
                        <tr>
                            <td>Attribute Name</td>
                            <td>Possible Values</td>
                            <td>Description</td>
                        </tr>
                    </thead>
                    <tr>
                        <td>noEntries</td>
                        <td>The &lt;Integer Value&gt; number of entries of the current history</td>
                        <td>A positive Integer value which shows the last N entries of your history
                            beginning with the latest change marker on top
                        </td>
                    </tr>

                </table>
            </p>

        </section>

        <section name="Debugging">
            <p>Ext-Scripting automatically compiles with the debug flags on. Debugging against a running configuration
                should be no problem. If the debugger can be pointed towards the sources, debugging should work without
                any sideeffects.
            </p>
            <p>
                Due to the fact that the debugger can pick up the debug info from the newly compiled class
                files. (Note - the class files are not altered in any way so in any case you just deal with normal Java
                classes)
            </p>
            TODO add video here
        </section>

        <section name="Page and Resource Reloading">
            <subsection name="Introduction">
                <p>One of the goals of Ext-Scripting is to prevent unnecessary restarts and redeploys during
                    development. To
                    enable this it provides custom functionality outside of the scope of providing scripting
                    capabilities.
                    One of those features is the page and resource reloading from your source directories.
                </p>
            </subsection>
            <subsection name="Basic Functionality">
                <p>Pages and web-resources like CSS files or images are loaded from your resource directory without
                    having to redeploy the web
                    application,
                    changes on them can be watched on the fly simple by a browser reload. There is no need to adjust
                    your web application server or your IDE for auto deployment mechanisms. Unnecessary web application
                    restarts for changed resources can be avoided that way.
                    <b>Note while page reloading works on the fly for both JSF 1.2 and JSF 2.x+, resource reloading
                    only works for JSF2.x+, if you need similar functionality for JSF 1.x  you can use
                    a third party resource loading library like <a href="weblets.dev.java.net">Weblets</a>. </b>
                </p>
                <center>
                    <img src="images/source-resource.jpg" width="557px" height="470px" alt="Page and Resource Reloading"
                         title="Page and Resource Reloading"/>
                </center>
            </subsection>
            <subsection name="Setup and Usage">
                <p> The central point of setting up your resource reloading are two configuration parameters</p>
                <ul>
                    <li>org.apache.myfaces.extensions.scripting.resource.LOADER_PATHS</li>
                    <li>facelets.RESOURCE_RESOLVER</li>
                </ul>
                <p>
                The first parameter <b>org.apache.myfaces.extensions.scripting.resource.LOADER_PATHS</b> defines
                the root path for your resources (aka everything web related, like xhtml facelet templates css files etc..).
                Note, despite being called resource LOADER_PATH in most cases this path will just be pointed
                to the your <b>source web application root directory</b>.
                (ie: src/main/webapp in a standard Maven2 structure or &lt;project-root&gt;/webapp for a standard
                    Eclipse project structure.
                The name resource just refers to the fact that for Ext-Scripting every web related file is seen as resource
                </p>
                <p>
                    The second parameter <b>facelets.RESOURCE_RESOLVER</b> is responsible for enabling the resouce loading
                    of facelet templates and pages, since Facelets does not have an auto plugging mechanism this has to be
                    set to a standard value which is <b>org.apache.myfaces.extensions.scripting.facelet.ReroutingResourceResolver</b>
                </p>
                <p>
                    For further reference please also visit out <a href="configentries.html">Appendix: Configuration Entries Overview</a>
                    page.
                </p>
            </subsection>


        </section>



        <section name="Advanced Dependency Detection">
            <p>
                Ext-Scripting tries to avoid as many server restarts as possible. To enable this it needs to unload
                recompile and load artifacts and the those which reference our changed ones. To enable this,
                Ext-Scripting
                does dependency detection on bytecode level as well as on artifact level. This functionality is enabled
                automatically you wont have anything further to do. You can see it working by watching the output log,
                if
                you change a class, you automatically will see that the system marks the classes which reference your
                changed class as tainted as well.
            </p>
            <p>
                You have to have in mind that data currently in ram cannot be recovered by the unloading and reloading
                happening, so everything stored for instance in application or session scope is lost that way.
            </p>
            <p>
                Following video shows the mechanism working:
            </p>
            <p />
            <center>
                <center>
                    <iframe class="youtube-player" type="text/html" width="660" height="405"
                                                    src="http://www.youtube.com/embed/YWlBGE3vyMw" frameborder="0">
                    </iframe>
                </center>
            </center>
            <p>
                This dependency detection works over all dynamic classes, no matter being it classes, interfaces,
                annotations, and it works over static and dynamic imports.
            </p>
            <p>
                Javabean dependencies also are detected on artifact level so that if the JSF IOC mechanism is used those
                bound over neutral Object classes also will reload the dependencies correctly.
            </p>

        </section>


        <section name="Dynamic Annotations">

            <p>One of the main features which Ext-Scripting provides over standard JSF is dynamic annotations.
                Dynamic annotations basically introduces a mechanism so that your standard JSF annotations like
                @ManagedBean or @FacesComponent or @ManagedProperty or even the scopes like @RequestScoped or
                @SessionScoped
                can be changed on the fly in a dynamic way.
            </p>
            <p>To enable this mechanism you don't have to do anything, it comes out of the box in a MyFaces 2.0
                environment.
                Following video demonstrates the mechanism
            </p>

            <center>
                <center>
                    <iframe class="youtube-player" type="text/html" width="640" height="505"
                                                    src="http://www.youtube.com/embed/tikOR0XDnFw" frameborder="0">
                    </iframe>
                </center>
            </center>
        </section>

        <section name="Supported Artifacts">
            <subsection name="JSF 1.2">
                <p>Ext-Scripting supports following JSF 1.2 artifact reloading:</p>
                <ul>
                    <li>ApplicationFactory reloading on method call level</li>
                    <li>FacesContextFactory reloading on method call level</li>
                    <li>LifecycleFactory reloading on method call level</li>
                    <li>RenderkitFactory reloading on method call level</li>
                    <li>ElResolver</li>
                    <li>Converter (on JSF level alone)</li>
                    <li>Validator (on JSF level alone)</li>
                    <li>Component reloading on component tree creation level (on JSF level alone)</li>
                    <li>ViewHandler</li>
                    <li>Lifecycle</li>
                    <li>Renderer</li>
                    <li>PhaseListener</li>
                    <li>ManagedBeans reloading for all managed beans even session and application scoped ones on request
                        level
                    </li>
                    <li>Support for either JavaC or JSR 199 depending on your JDK Version</li>
                    <li>Support for Groovy and Java</li>
                </ul>
            </subsection>
            <subsection name="JSF 2.0">
                <p>Ext-Scripting supports following JSF 2.0 artifact reloading: Additionally to what is present for JSF
                    1.2
                </p>
                <ul>
                    <li>Component limitations have been lifted for Facelets as rendering language</li>
                    <li>All major JSF 2 annotations can be used in a dynamic way, annotations can be moved removed or
                        added on the fly
                    </li>
                    <li>Support for Reloading on ComponentTagHandler, ConverterTagHandler, BehaviorTagHandler,
                        ValidatorTagHandler
                    </li>
                    <li>ResourceHandler</li>
                    <li>Behavior</li>
                    <li>BehaviorRenderer</li>
                    <li>ComponentSystemEvent Support via dynamic Annotations</li>
                    <li>Application System Event Support</li>
                </ul>
            </subsection>


            <subsection name="Visual Overview">
                <img src="images/ext-scripting-structure-fine.jpg"/>
            </subsection>
        </section>

        <section name="Extension Frameworks">

            <subsection name="EXT-SCRIPTING and EXT-VAL">
                <p>While the target of supporting extension frameworks will be post 1.0 Ext-Scripting already
                    supports dynamic bean validation and Ext-Val
                </p>

                <p>To setup Ext-Val simply add the needed dependencies and you can start to use it instantly</p>
                <p>The MyFaces 2.0 demo has a simple example ported over from the Ext-Val distribution which
                    shows the dynamic aspects of using Ext-Val and Ext-Scripting combined
                </p>

                <p>The same what applies to Ext-Val also applies to straight bean validation.</p>

                <p>Note at the time of release, the current stable version of Ext-Val has a bug
                which enforces one manual configuration entry!</p>

                <source><![CDATA[
                <application>
                    <!-- disable an Ext-Val warning which is triggered falsely by the latest version -->
                    <system-event-listener>
                        <system-event-listener-class>org.apache.myfaces.extensions.scripting.startup.SuppressExtValWarningStartupListener</system-event-listener-class>
                        <system-event-class>javax.faces.event.PostConstructApplicationEvent</system-event-class>
                    </system-event-listener>
                </application>
                ]]></source>

                Note the class already is provided by Ext-Scripting, all which has done is
                to add this entry to bypass the error.
                This class probably will be obsolete with Ext-Val versions higher than
                2.0.3 (which was the latest stable at time of writing)

            </subsection>

            <subsection name="EXT-SCRIPTING and Spring">
                <p>Currently there is no direct Spring support for Ext-Scripting, it however is in the works
                    and will be delivered in a release post 1.0
                </p>
            </subsection>

            <subsection name="EXT-SCRIPTING and CDI">
                <p>Currently there is no direct CDI support for Ext-Scripting, it however the
                    work on it will be started post 1.0
                </p>
            </subsection>
        </section>

        

        <section name="Build Process and Multiuser Environments">
            <p>While Ext-Scripting itself is only used for rapid prototyping following two szenarii will probably occur in a typical
            user development environment</p>
            <subsection name="Compiling the Groovy classes for the final build">
                <p>while it makes sense to have the Groovy sources for editing, for the final deployment, it makes sense
                to just deliver the classes instead of the source files.
                While doing that for your ide is out of scope of this documentation (currently). The documentation can provide you the information on how
                to do it in Apache Maven:</p>
                <p> The trick is to combine two things. Apache Maven 2 profiles and the Apache Maven2 groovy plugin</p>
                <p> For a short explanation on Apache Maven 2 profiles please follow this link: <a href="http://maven.apache.org/guides/introduction/introduction-to-profiles.html">Apache Maven 2 Profiles</a> </p>
                <p> The idea is, to define a deployment profile which triggers the Maven 2 groovy plugin which then will compile your classes, here is an example
                configuration of such a profile, which can be copy pasted into your build file</p>
            
                  <source><![CDATA[
                     <profiles>
                         <profile>
                             <id>deployment</id>
                             <plugins>
                                 <plugin>
                                    <groupId>org.codehaus.gmaven</groupId>
                                    <artifactId>gmaven-plugin</artifactId>
                                    <version>1.2</version>
                                    <configuration>
                                        <providerSelection>1.7</providerSelection>
                                    </configuration>
                                    <executions>
                                        <execution>
                                            <goals>
                                                <goal>generateStubs</goal>
                                                <goal>compile</goal>
                                                <goal>generateTestStubs</goal>
                                                <goal>testCompile</goal>
                                            </goals>
                                        </execution>
                                    </executions>
                                    <dependencies>
                                        <dependency>
                                            <groupId>org.codehaus.groovy</groupId>
                                            <artifactId>groovy-all</artifactId>
                                            <version>1.7.1</version>
                                        </dependency>
                                    </dependencies>
                                </plugin>
                            </profile>
                        </plugins>
                    </profiles>
                ]]></source>
                
                <p>The standard settings of the groovy maven plugin is that it will use your src/main/groovy directory as the path to pickup the sources.
                You either can use that one and adjust the corresponding org.apache.myfaces.extensions.scripting.groovy.LOADER_PATHS setting for editing.
                Or you can readjust the corresponding plugin settings of the Groovy Maven plugin. Follow this <a href="http://groovy.codehaus.org/GMaven">link</a> for further information.
                </p>
                <p> A call to maven clean install -P deployment now triggers the groovy compile task. You also can use the extended features
                of the maven profiles to automate the switch if you use maven also for deployment of your project.</p>




            </subsection>
            <subsection name="Multi Developer Scenario's">
                <p>One problem you might have noticed is, that if you do not work with the default configuration on your sources
                (aka. WEB-INF/&lt;scripting-language&gt;, you have to rely on the corresponding configuration entries, which in itself take absolute paths.
                One user of the system came up with the question, on how to deal with multiple developers. The answer is plain and simple, unfortunately the
                    support of such a use case could be better for 1.0, all you can do is either to rely on the default paths, or use your build system to handle
                    the configuration parts per user, or standardize on the same file structure for every user.
                    Additional support for this scenario will be added post 1.0 to ease this usecase but for now it is a known but not entirely solved problem.
                </p>
            </subsection>
        </section>

        <section name="Navigation Bottom">
            <a href="using_general.html">&lt;&lt;Back to the General Users Guide</a>
            or

            <a href="using_eclipse_.html">On to the Eclipse Users Guide&gt;&gt;</a>
        </section>


    </body>
</document>