<?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="./usingGeneral.html">&lt;&lt;Back to the General Users Guide</a>
            or

            <a href="./usingEclipse.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 side effects.
            </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.jsf.facelet.MyFacesReroutingResourceResolver</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="./usingGeneral.html">&lt;&lt;Back to the General Users Guide</a>
            or

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


    </body>
</document>