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

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


        <section name="Users Guide">
            <p>
                After having set up MyFaces Ext-Scripting (if you do not have done so please go to our<a
                    href="installation.html">Installation Page</a>), you basically can start editing, and be done with
                the users
                guide.
            </p>
            <p>
                Well theoretically anyway, there are some things every user of Extension-Scripting has to take into
                consideration.
            </p>
            <p>
                First of all Ext-Scripting in its current incarnation tries to help the programmers every day life. That
                means, it tries to reduce the number of needed server restarts to the lowest possible minimum which is
                achievable within the boundaries of Java and JSF.
                Also it is not yet fully integrated into the bigger application servers, testing only currently is
                done for Apache Tomcat and Jetty. Scala due to the nature of its compiler interface, definitely only
                will work in an expanded embedded WAR environment, not in an EAR environment.
            </p>
            <p>
                You won't get a zero restart configuration, Extension-Scripting tries not to be perfect in this regard,
                but
                what you can achieve is a significant reduction on restarts by applying scripting languages and dynamic
                compilation.
            </p>
            <p>
                Secondly, we do not try to support every scripting language under the earth, the basic goal is first to
                get
                the basics right and then in subsequent releases to add additional scripting languages support.
            </p>
            <p>
                As is, every scripting language which can compile against the JVM can be supported. Purely interpreted
                languages are not supported.
            </p>
            <p>
                For now we cannot recommend to use Ext-Scripting in a production environment for live patches, although
                it
                theoretically would be possible, and we spent a lot of blood sweat and tears into making the system
                stable
                under multithreaded conditions. For now, however, we simply only can recommend to use Ext-Scripting for
                development and development only scenarios if you need to hot patch code (deployment without any changes
                however should be fine). So if you want to hot patch a running installations, we assume it should work
                fine,
                but you are on your own.
            </p>
        </section>
        <section name="Chapters">
            <p>The Following Chapters should help you to guide you through the usage of Ext-Scripting</p>
            <ul>
                <li>
                    <a href="using_general.html">General users guide</a>
                </li>
                <li>
                    <a href="using_advanced.html">Advanced usage</a>
                </li>
                <li>
                    <a href="using_eclipse_.html">Ext-Scripting in Eclipse</a>
                </li>
                <li>
                    <a href="using_intellij.html">Ext-Scripting in Intellij</a>
                </li>
                <li>
                    <a href="using_intellij.html">Ext-Scripting in Netbeans</a>
                </li>
            </ul>
        </section>

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

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

    </body>
</document>
        