<?xml version="1.0"?>
<!--
 * 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.
-->
<faqs title="Commons SCXML FAQ">

 <part id="general">

  <title>General</title>

  <faq id="what-is">
   <question>
    What is SCXML?
   </question>
   <answer>
    State Chart XML (SCXML) is a general-purpose event-based state
    machine language that can be used in many ways. It is currently
    a W3C Working Draft, available
    <a href="http://www.w3.org/TR/scxml/">here</a>.
   </answer>
  </faq>

  <faq id="commons-scxml">
   <question>
    What is Commons SCXML?
   </question>
   <answer>
    Commons SCXML is aimed at creating and maintaining an
    open-source Java SCXML engine capable of executing
    a state machine defined using a SCXML document, while abstracting
    out the environment interfaces.
   </answer>
  </faq>

  <faq id="simple-example">
   <question>
    Do you have a simple example where Commons SCXML is used?
   </question>
   <answer>
    Sure, take a look at the <a href="usecases/scxml-stopwatch.html">
    stopwatch usecase</a>.
   </answer>
  </faq>

  <faq id="dependencies">
   <question>
    What are the core requirements of SCXML? Do I need to include
    the JSP and Servlet API or the Faces libraries?
   </question>
   <answer>
    The "core" requirements for Commons SCXML are Commons Digester and
    Commons Logging. Commons Digester, at the minimum (if you use Commons
    Digester 1.7+), has a runtime dependency on Commons BeanUtils. 
    You do not need to include JSP or Servlet or Faces libraries. These
    are meant to come in via the servlet container (if at
    all you need them). You will need to choose an expression
    language for your SCXML documents (details in next section of this
    FAQ). See the <a href="dependencies.html">dependencies page</a>
    for details about the dependency versions.
   </answer>
  </faq>

 </part>

 <part id="expression-languages">

  <title>Expression languages</title>

  <faq id="which-ones">
   <question>
    Which expression languages does the Commons SCXML implementation support?
   </question>
   <answer>
    Commons SCXML currently supports
    <a href="http://commons.apache.org/jexl/">Commons JEXL</a> and
    <a href="http://commons.apache.org/el/">Commons EL</a>. For details,
    see the <a href="guide/testing-standalone.html">trying out</a> and
    <a href="guide/contexts-evaluators.html">contexts and evaluators</a>
    pages of the user guide.
   </answer>
  </faq>

  <faq id="more-than-one">
   <question>
    Can I use more than one expression language in the same SCXML document?
   </question>
   <answer>
    No, the expressions throughout the document must be homogeneous. This
    also applies to any external documents that may be refered by this
    document, for example via "src" attributes.
   </answer>
  </faq>

 </part>

 <part id="executor">

  <title>The SCXMLExecutor</title>

  <faq id="activate">
   <question>
    Once I set up an SCXMLExecutor (call the constructor, set the
    state machine) is there anything I have to do to "activate" it?
   </question>
   <answer>
    Yes, you must call the marker method, SCXMLExecutor#go().
    This serves as an indication that you have finished configuring the
    SCXMLExecutor instance and are now ready to begin executing the state
    machine described by your SCXML document. For example, you may
    attach zero, one or many SCXMLListeners to interesting "nodes" within
    the SCXML document, such as the document root i.e. the SCXML object,
    and/or particular State and Transition objects as well. See the
    <a href="guide/core-engine.html">SCXMLExecutor section of the
    user guide</a> for more.
   </answer>
  </faq>

  <faq id="one-state-machine">
   <question>
    Can I have multiple instances of SCXMLExecutor all working off of
    a single instance of the SCXML class?
   </question>
   <answer>
    Yes. The Commons SCXML object model does not store any information
    related to a particular execution of the state machine. It is
    therefore possible to use a single SCXML instance as the state
    machine for multiple SCXMLExecutor instances. This also means that
    a SCXML document needs to be parsed only once, irrespective of the
    number of "instances" of the state machine that may execute.
   </answer>
  </faq>

  <faq id="many-threads">
   <question>
    Can multiple threads safely interact with an instance of SCXMLExecutor?
   </question>
   <answer>
    To a certain extent. Things such as firing events on a state machine or
    reseting it are threadsafe. The underlying state machine needs to
    model any race conditions correctly. You have to worry about
    synchronizing access to other bits if you need to.
   </answer>
  </faq>

  <faq id="serializability">
   <question>
    Are SCXMLExecutor instances serializable?
   </question>
   <answer>
    Yes, as long as all associated user-defined content is too.
   </answer>
  </faq>

 </part>

</faqs>
