<?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.
-->

<document>

<properties>
  <title>Changelog</title>
  <author email="hps@intermeta.de">Henning P. Schmiedehausen</author>
</properties>

<body>
  <release version="2.3.3" date="in SVN">
    <action type="fix" dev="seade">
      Minor correction to intake.dtd - added missing fieldClass attribute
      to field element.
    </action>
    <action type="fix" dev="tv" issue="TRB-70" due-to="Susi Berrington">
      Fix a memory leak due to an invalid map key type.
    </action>
  </release>
  <release version="2.3.3-RC1" date="2008-06-12">
    <action type="update" dev="hoffmann">
      Preparing for the Release of Turbine 2.3.3
    </action>
    <action type="update" dev="seade">
      VelocityHtmlEmail now throws EmailException rather than
      VelocityEmailException.  This has been done for compatibility with
      commons-email-1.1, even though commons-email-1.0 is being used for now.
    </action>
    <action type="update" dev="seade">
      Update jar dependencies:<br/>
      <ul>
        <li>javax.activation to 1.1.1</li>
        <li>javax.mail to 1.4.1</li>
        <li>commons-configuration to 1.5</li>
        <li>commons-fileupload to 1.2.1</li>
        <li>commons-io to 1.4</li>
        <li>commons-logging to 1.1.1</li>
        <li>commons-lang to 2.4</li>
        <li>commons-pool to 1.4</li>
        <li>log4j to 1.2.15</li>
        <li>servletapi to 2.4</li>
      </ul>
    </action>
    <action type="update" dev="tv">
      Further simplify the value assignment in Intake fields.
    </action>
    <action type="add" dev="tv">
      Added getBooleans() and getBooleanObjects() to the ValueParser to provide
      a "more orthogonal" interface.
    </action>
    <action type="update" dev="tv">
      Use the localize features of the parser to simplify the value assignment
      in Intake fields. Made handling of empty values consistent over all number
      field types.
    </action>
    <action type="update" dev="tv">
      Important change: The BaseValueParser now consistently returns null for
      all get-methods that return an Object, if the parameter name does not exist.
      This changes the behaviour of getBigDecimal which used to return 0 in this
      case.
    </action>
    <action type="update" dev="tv">
      Initialize the locale of RunData, the ParameterParser and the CookieParser
      from the HttpServletRequest. Make RunData.setLocale propagate the locale
      setting to the parsers.
    </action>
    <action type="update" dev="tv">
      Set the locale of the ParameterParser and the CookieParser from the default
      locale of RunData.
    </action>
    <action type="add" dev="tv">
      Made ValueParser and BaseValueParser locale-aware. Note that the default
      locale used is always the default value of the JVM which is different from
      the previous behaviour where the locale used was sometimes Locale.US (for
      float, double and BigDecimal) and sometimes the JVM-default (for dates).
    </action>
    <action type="update" dev="seade">
      Improved handling of null values for query parameter and path info values
      in TurbineURI (avoids a NPE, logs warning message).
    </action>
    <action type="update" dev="tv">
      Update to latest release of Torque.
    </action>
    <action type="update" dev="seade">
      Update to latest release of Fulcrum Yaafi.
    </action>
    <action type="update" dev="seade">
      Eliminate cryptix dependency. The cryptix library contains strong
      encryption algorithms causing problems using the software
      outside of the US (ECCN).  This is a partial backport from Fulcrum so
      the real work was done by Siegfried Goeschl.
    </action>
    <action type="update" dev="tv">
      Make SecurityServices run with Torque 3.3.
    </action>
    <action type="update" dev="tv">
      Removed unnecessary locking in the XSLT service. Make relative includes
      work again.
    </action>
    <action type="add" dev="seade">
      The init() method in LocalizationTool is no longer declared as final -
      you can now extend this class to provide alternative ways of initializing
      the locale.
    </action>
    <action type="add" dev="seade">
      Default ServerData values can now be specified in
      TurbineResources.properties.
    </action>
    <action type="update" dev="seade">
      Update jar dependencies:<br/>
      <ul>
        <li>commons-collections to 3.2</li>
        <li>commons-configuration to 1.4</li>
        <li>commons-dbcp to 1.2.2</li>
        <li>commons-digester to 1.8</li>
        <li>commons-lang to 2.3</li>
        <li>commons-pool to 1.3</li>
        <li>log4j to 1.2.14</li>
        <li>velocity to 1.5</li>
      </ul>
    </action>
    <action type="fix" dev="seade">
      Fixed a couple of NullPointerExceptions that can occur when Intake is
      validating multiValued fields.
    </action>
    <action type="fix" dev="seade">
      Fixed a NullPointerExceptions that can occur when Intake is used to
      validate a primitive field.  Clarified the meaning of Field.isSet() in
      Javadoc.
    </action>
    <action type="add" dev="tv">
      Added an extension of LDAPUser named ActiveDirectoryUser to simplify the
      authentication against AD servers. Added some documentation with a
      configuration example.
    </action>
    <action type="add" dev="tv">
      Extended Intake to allow validators based on comparisons between fields
      of the same group. Two example validators are provided, for date ranges
      and for integer ranges.
    </action>
    <action type="add" dev="seade">
      Added JSON-RPC Service to support JavaScript to Java AJAX communications
      using <a href="http://oss.metaparadigm.com/jsonrpc/">JSON-RPC-Java</a>.
      For further details see <a href="services/jsonrpc-service.html">JSON-RPC
      Service</a>.
    </action>
    <action type="add" dev="seade">
      Added UI Service as a replacement for the UIManager pull tool (now
      deprecated in favor of the backwards compatible UITool).
      For further details see <a href="services/ui-service.html">UI Service</a>.
    </action>
    <action type="update" dev="tv">
      Deprecated the DBSecurityService and its associated classes. It has been
      replaced by the TorqueSecurityService.
    </action>
    <action type="remove" dev="tv">
      Remove the ComponentService. This has been deprecated long ago.
      It has been replaced by the different incarnations of
      AvalonComponentService.
    </action>
    <action type="remove" dev="tv">
      Remove long deprecated classes.
      <ul>
        <li>org.apache.turbine.util.SequencedHashtable</li>
        <li>org.apache.turbine.util.StringStackBuffer</li>
        <li>org.apache.turbine.util.FileUtils</li>
        <li>org.apache.turbine.util.BufferCache</li>
        <li>org.apache.turbine.util.QuickSort</li>
        <li>org.apache.turbine.util.Comparable</li>
        <li>org.apache.turbine.util.Log</li>
        <li>org.apache.turbine.util.mail.*</li>
        <li>org.apache.turbine.util.validation.*</li>
        <li>org.apache.turbine.util.upload.*</li>
        <li>org.apache.java.lang.*</li>
        <li>org.apache.java.security.*</li>
        <li>org.apache.turbine.util.db.*</li>
         <li>org.apache.turbine.services.resources.TurbineResources</li>
      <li>org.apache.turbine.services.db.*</li>
      </ul>
    </action>
    <action type="add" dev="tv">
      Extended HtmlPageAttributes to allow generic &lt;link /&gt; tags in the
      HTML head section.
    </action>
    <action type="add" dev="seade" issue="TRB-27" due-to="Thomas Vandahl">
      Added Thomas's variation on Siegfried's TurbineYaafiComponentService that
      allows Fulcrum components to be used in Turbine 2.3 in a fulcrum-yaafi
      container.
    </action>
    <action type="add" dev="tv">
      Extended the LocalizationService to provide formatting facilities.
    </action>
    <action type="add" dev="tv">
      Extended Intake to care for localization and to allow user-defined
      field types (type "custom"). The Validator interface has been extended
      so custom validators must be adjusted unless they extend DefaultValidator.
    </action>
    <action type="update" dev="seade" issue="TRB-9" due-to="J&#252;rgen Hoffmann">
      Intake now handles the case where the mapToObject does not map to all
      fields in the group.
    </action>
    <action type="fix" dev="seade" issue="TRB-9" due-to="J&#252;rgen Hoffmann">
      Intake was not handling empty values correctly.
    </action>
    <action type="fix" dev="seade" issue="TRB-8" due-to="Gunther Olesch">
      A FileItem in a ParameterParser added to TurbineURI or TemplateURI was
      resulting in a NPE.
    </action>
    <action type="fix" dev="seade" issue="TRB-16" due-to="J&#252;rgen Hoffmann">
      TurbineURI was mishandling the empty String.
    </action>
    <action type="fix" dev="seade" issue="TRB-14" due-to="J&#252;rgen Hoffmann">
      Intake was not loading the correct Default Validators when the rules for
      a field are empty.
    </action>
  </release>
  <release version="2.3.2" date="2005-10-03">
    <action type="fix" dev="seade">
      Exceptions that occur in Actions once again redirect to the error page.
    </action>
  </release>
  <release version="2.3.2-rc2" date="2005-09-19">
    <action type="fix" dev="henning" issue="TRB-5" due-to="Thomas Vandahl">
      The skin properties file must be loaded as stream from the filesystem
      and not using the getScript() method.
    </action>
    <action type="update" dev="henning">
      Make sure that the source can still be compiled and tested under JDK 1.3.1.
    </action>
  </release>
  <release version="2.3.2-rc1" date="2005-09-11">
    <action type="fix" dev="henning" issue="TTWS67" due-to="Paul Witherow">
      Rewrote the DataStreamParser to actually parse CSV and TSV datastreams
      correctly with respect to missing fields, EOL, EOF conditions and
      quotes. Added a unit test to verify the correct operation.
    </action>
    <action type="update" dev="henning">
      XML-RPC 2.0 contains the MinML parser which is used as default.
      Remove the code from the XML-RPC service, which references
      xerces thus removing this implicit dependency. Another SAX
      compliant parser can still be selected using the parser property
      of the XML-RPC service.
    </action>
    <action type="fix" dev="henning" issue="TTWS62" due-to="Dan Price">
      Added a change to the Localization facade class which should help
      Jetspeed 1.x with Localization.
    </action>
    <action type="update" dev="henning">
      Reworked BaseValueParser and DefaultParameterParser to be more
      resilient against bad or missing values. Added a number of Unit tests
      to check for these.
    </action>
    <action type="fix" dev="henning" issue="TTWS58" due-to="Edmund Urbani">
      file upload items should be listed in DefaultParameterParser.keySet().
    </action>
    <action type="update" dev="henning">
      All serializable classes have explicit SerialVersionUID fields.
    </action>
    <action type="fix" dev="henning" issue="TTWS16" due-to="Oliver Eikemeier">
      Make sure that UIManager strips leading and trailing
      slashes from referenced objects and configured paths.
    </action>
    <action type="update" dev="henning">
      Add a maven goal to generate SQL with Torque. Removed old SQL files
      from src/sql. Add some documentation on how to build the SQL files.
    </action>
    <action type="update" dev="henning">
      This release will have JDK 1.4.x as primary build platform. If you intend
      to build on an older (1.3) JDK, you must uncomment a number of dependency
      libraries in the project.xml descriptor.
    </action>
    <action type="update" dev="henning">
      Update jar dependencies:<br/>
      <ul>
        <li>Framework to 4.3 (including api and impl)</li>
        <li>Beanutils to 1.7.0</li>
        <li>Collections to 3.1</li>
        <li>Configuration to 1.1</li>
        <li>Digester to 1.7</li>
        <li>Lang to 2.1</li>
        <li>dom4j to 1.6.1</li>
        <li>excalibur-component to 2.1</li>
        <li>excalibur-instrument to ...-api 2.1</li>
        <li>excalibur-logger to 2.1</li>
        <li>excalibur-pool to ...-api 2.1</li>
        <li>javamail to 1.3.3</li>
        <li>oro to 2.0.8</li>
        <li>log4j to 1.2.11</li>
        <li>logkit to avalon-logkit 2.1</li>
        <li>stratum to 1.0</li>
        <li>velocity to 1.4</li>
        <li>village to 2.0</li>
        <li>xalan to 2.7.0</li>
        <li>xmlrpc to 2.0</li>
        <li>hqldb to 1.7.3.3 (testing)</li>
      </ul>
    </action>
    <action type="update" dev="henning">
      Get rid of direct File() access in TurbineXSLTService and replace it with URL
      access through the servlet container. The change also allows to place the
      repository of XSL files elsewhere.
      Replace the cache Map() with a LRUMap() to avoid infinite memory growth.
      Add transform() methods having an additional parameter to forward a parameter
      set to the XSLT. The parameters can be used in the style sheet.
      Patches contributed by Thomas Vandahl.
    </action>
    <action type="update" dev="henning">
      Change UIManager to allow customization of directories and default values.
      Get rid of File() in UIManager.
      Allow UIManager to return relative links if configured.
      Patches contributed by Thomas Vandahl.
    </action>
    <action type="update" dev="henning">
      Bump javamail to version 1.3.2<br/>
      Build with commons-email 1.0-RC6.
    </action>
    <action type="fix" dev="henning">
      Fix the build process bug that let some of the reports end up in wrong directories.
    </action>
    <action type="update" dev="henning">
      Make the default encoding for incoming requests configurable. This allows you to post
      forms from UTF-8 or other encodings into Turbine.
    </action>
    <action type="update" dev="seade">
      Update DateFormatter to use DateFormatUtils from commons lang.
    </action>
    <action type="update" dev="seade">
      commons-codec was upgraded to 1.3.
    </action>
    <action type="update" dev="henning">
      Fix the Intake DateString validator not to throw an NPE whenever a
      slightest mistake was done in configuring a date field. Make sure
      that even fields without a formatting rule will parse at least standard
      date formats.
    </action>
    <action type="update" dev="henning">
      Intake FileItemFields could not be used when calling IntakeGroup.setProperties(obj) because
      the field did not look into the right table for retrieving the value object.
    </action>
    <action type="update" dev="seade">
      The velocity page formatting macros have been updated to generate xhtml
      compatible html.
    </action>
  </release>

  <release version="2.3.1" date="2004-10-29">
    <action type="update" dev="henning">
       JavaBaseFactory executed a Class.forName() every time it was
       searching for a named class, which showed up as a very costly
       API call in our profiling.  A synchronized cache has been added
       to cache previously obtained class instances inside this class.
    </action>
  </release>

<release version="Turbine 2.3.1-rc2">
      <action type="update">
       Fix the brown paper bag bug that made RC1 unusable
       with Velocity. This is an implicit incompatibility between
       a change in Commons Configuration and an assumption in
       Turbine that threw a class cast exception in Commons
       Collections and crashed Velocity. Isn't Java a cool thing?
    </action>
    <action type="update" issue="TTWS63">
      Intake rule parser sometimes corrupted rule message text.
    </action>
  </release>

<release version="Turbine 2.3.1-rc1">

      <action type="update">Turbine no longer configures the logging factory for
        commons-logging explicitly.  If you relied on this behaviour,
        you must add a commons-logging.properties file to your
        application as described in the <a
        href="http://commons.apache.org/logging/apidocs/org/apache/commons/logging/package-summary.html">commons
        logging documentation</a>
    </action>
    <action type="update">commons-configuration was upgraded to 1.0-rc1. All getVector() method calls on the
        Configuration interface must be replaced with getList().
    </action>
    <action type="update">commons-lang was upgraded to 2.0.
    </action>
    <action type="update">commons-collections was upgraded to 3.0.
    </action>
    <action type="update">stratum was upgraded to 1.0-b5.
    </action>
    <action type="update">commons-logging was upgraded to 1.0.4.
    </action>
      <action type="update">
      Intake was extended to provide Field values with &quot; escaped as
      &amp;quot; to provide valid values for HTML form inputs.
    </action>

      <action type="update">
       Intake now handles multiValued="true" on type="int" fields correctly.
       The get/set methods of the underlying object need to deal with an array
       of ints.  The intake processing for other primitive types has also been
       updated, though not tested to the same extent as int.
    </action>
    <action type="update">
       The intake validators were fixed so that fields with required=false
       rules no longer attempt to execute the remaining rules when no
       input is provided.  A minLength > 0 rule is no longer synonymous
       with required=true.
    </action>
    <action type="update">
       Actions triggered from html input elements with type="button" are
       now processed correctly (the trailing ".x" and ".y" are removed from
       the event names).
    </action>
    <action type="update">
       Intake was fixed so that fields with required elements with value=false
       can later be enabled with field.setRequired(true) (i.e. you should
       do this rather than using the deprecated required-message element).
    </action>
    <action type="update">
       Intake was fixed so that DateString will use the "formatn" (where n
       &gt;= 1) rules to parse the input and then the "format" rule to format
       it (the "format" rule is also used to parse the date if there are no
       "formatn" rules or they are not able to parse it).  In order to
       retrieve the correctly formatted DateString value you need to use
       <em>$group.foo.StringValue</em> rather than <em>$group.foo.Value</em>
       (you can do this for all values, not just DateString).
    </action>
    <action type="update">
       Intake now makes use of the the emptyValue attribute from the field
       elements when mapping from the group to the object when no value has
       been set.  This makes it possible to clear values in an existing object
       that is being overwritten with Intake data using
       <em>group.setProperties(obj)</em> (or you can provide non-null values
       in your intake.xml file).  Make sure you do not inadvertently include
       the primary key for the object in the intake group without actually
       setting it to the appropriate value (it shouldn't be in the group
       anyway).
    </action>
    <action type="update">
       Fixed the intake DateString flexible rule so that it applies to the
       format rules and not just to the default locale format.
    </action>
    <action type="update">
       DateFormatter now allows for a different date format to be provided
       via <em>tool.dateTool.format</em> in TurbineResources.properties.
    </action>
    <action type="update">
       DirectResponseLayout is provided to allow direct writing to
       ServletOutputStream when VelocityOnlyLayout is the default.  To use it
       you need to add <em>data.declareDirectResponse();</em> and then
       <em>data.setLayout("DirectResponseLayout");</em> to your action class.
       Thanks to Peter Courcoux for the code.
    </action>
    <action type="update">
       Upgraded to commons-pool-1.1
    </action>
     <action type="update">
        HttpUtils.httpDateFormat had the year set as 'yyyyy', should be 'yyyy' therefore
        setting expiry dates failed.
     </action>
     <action type="update">
       TTWS60: HtmlPageAttributes setBackground sets the incorrect key name.
     </action>
  </release>

<release version="Turbine 2.3">

      <action type="update">
      It is now necessary to use Maven to build Turbine 2.3. The old,
      ant-based build system is no longer supported and actively removed
      from the distribution.
    </action>
    <action type="update">
      Turbine requires the Maven Torque plugin to build. If you don't
      use at least Maven 1.0b9, you will have to install it manually
      before you can recompile the source code.
    </action>
      <action type="update">
      The IntakeService has been refactored, introducing two Abstract classes; the
      DefaultValidator and the NumberValidator. They both contain rules which are
      applicable to all Validator's and NumbeValidator's respectively. Unnecessary use
      was being made of (Old) NumberValidator which used BigDecimals, cleaned this up
      implementing concrete classes for all Number Types. Simplified definition of
      (number &amp; required) rules in Intake.xml.
    </action>
    <action type="update">
      The LoginUser action no longer checks to see if the user object is already
      in the session and returns if it is found.  The user will always be there
      now.  If you have a custom LoginUser action that still performs this
      check, you will need to remove it in order for your login action to work.
    </action>
    <action type="update">
      AccessControlList is now an interface and its implementation is in
      TurbineAccessControlList. This is now configurable and can be replaced
      by a custom AccessControlList implementation. If older compiled code
      suddently throws IncompatibleClassChange errors, just recompile and
      they go away.
    </action>
    <action type="update">
      All deprecated java code was removed (incl. support for webmacro, freemarker
      and castor). Make sure to not get any deprecation warnings before you
      switch to 2.3!
    </action>
    <action type="update">
      The LoggingService was removed. Deprecated everything in the utils.Log class.
    </action>
    <action type="update">
       The TurbineResources Service was removed and replaced with commons-configuration.
    </action>
    <action type="update">
       The service initialization code has been changed. This is important if
       you write services yourself. You should supply a constructor which takes
       no parameters. The usage of a constructor which takes a RunData object
       is deprecated and might be removed later. If you're using the supplied
       services, you shouldn't notice any change.
    </action>
    <action type="update" issue="TTWS38">
       BaseValueParser.getInteger(String name) now returns null if the
       key name is not found - the old behaviour was to return new Integer(0).
       For consistency a similar change was made to getBool() and
       getBigInteger().
    </action>
    <action type="update">
        The velocity mail classes (o.a.t.util.velocity package) now throw
        VelocityEmailException instead of MessagingException if a problem
        occurs.
    </action>
    <action type="update">
      The handling of "," as a separator in template names was tightened and
      clarified. Many places where you could get away with using "/" as a separator
      or use a leading "/" for a template name now no longer work. There is a long
      description on how to use and not to use this in the javadoc for
      org.apache.turbine.services.template.TurbineTemplateService. If you want to volunteer
      for work on Turbine, feel free to whip this into an xdoc and put it into the
      documentation tree.
    </action>
    <action type="update">
      Some classes have been moved into different packages to allow cleanup and
      clarification of their usage. The old locations are still available but
      deprecated. Examples are the parser classes from org.apache.turbine.util to
      org.apache.turbine.util.parser and some of the pull tools from org.apache.turbine.util.pull
      to org.apache.turbine.services.pull.tools
    </action>
    <action type="update">
      getSizeMax() in the UploadService interface and implementations changed
      from int to long to reflect a change that was made in the underlying
      commons-fileupload component.
    </action>
      <action type="update">
   Added ability to specify either the class TurbineResources.properties file
   or a new TurbineConfiguration.xml file.  TurbineConfiguration.xml allows
   Turbine to pull it's configuration values from multiple locations.  Please
   read the howto for more information.
    </action>
    <action type="update">
   Added a Howto describing using Hibernate with Turbine.  The actual code is
   currently not part of the Turbine distribution due to licensing issues, but is very
   easy to implement due to Turbine support of Avalon Components.
    </action>
    <action type="update">
   Changed TurbineUser so that when either permanent or temporary values are
   stored, if the required hashtable was missing, then it was created.  This
   happened in conjunction with the PassiveUserManager.  Additionally, the
   setTempStorage(Hashtable newTempStorage) did not actually assign the new
   Hashtable.  Cleaned up some of the code so the parallel permanent and temp
   data storage methods followed the same patterns.  Created a cactus testcase
   to test TurbineUser.
    </action>
    <action type="update">
   Changed scheduler so that if it is NOT enabled, then it doesn't attempt
   to connect to the database and retrieve jobs.  This prevents a spurious
   no data source error from showing up in the turbine logs on startup.  Added
   a cactus test to test the fix.
    </action>
    <action type="update">
      A new pull tool is available in the session scope called $sessionData.
      This tool can be used to store data that will persist for the duration
      of the session.  This should be used instead of the getTemp() and
      setTemp() methods in TurbineUser.
    </action>
    <action type="update">
      The use of getPerm() and setPerm() methods in Turbine user have been
      deprecated.  See the Extending Turbine User how-to for using additional
      database columns for storage if you are using the DBSecurityService.
      You can also switch to the TorqueSecurityService where it is much easier
      to use additional columns.
    </action>
    <action type="update">
      Perm scope pull tools have been deprecated.  If you use these type of
      tools, you need to switch to authorized scope pull tools.  These tools
      are initialized with a user object.  Any state information that you were
      storing in the tools itself, you will now need to store in the user
      object.
    </action>
    <action type="update">
      Turbine used to remove all data from the session before executing
      the login action.  This no longer happens.  Instead, the session
      is invalidated before calling to logout action.
    </action>
    <action type="update">
      There is a new pull tool that makes it easy to format
      Date objects into Strings.  See
      org.apache.turbine.services.pull.util.DateFormatter for details.
    </action>
    <action type="update">
      Backported the Scheduler service from Fulcrum.  Other Scheduler
      related changes include:
            <action type="update">
        The scheduler can now be enabled/disabled while Turbine is running.
      </action>
      <action type="update">
        A new pull tool is available to allow access to the Scheduler service
        from Velocity templates.  See
        org.apache.turbine.service.scheduler.SchedulerTool for details.
      </action>
      <action type="update">
        TurbineException is now thrown instead of Exception.
      </action>
      <action type="update">
        Torque generated objects are now used to for accessing the database.  You
        can now add additional fields for the OM objects without modifing the source
        code.  The OM objects are generated from scheduler-schema.xml
      </action>
      <action type="update">
        updateJob(job) can be used to add a new job.  It will perform the correct
        action (insert or update) for you.  addJob(job) simply calls updateJob(job).
      </action>
      <action type="update">
        A new facade class has been created for easier access to the Scheduler Service.
        It is org.apache.turbine.services.schedule.TurbineScheduler.
      </action>
          </action>
    <action type="update">
      Backported the Crypto Service from Fulcrum.
    </action>
    <action type="update" issue="TTWS24">
      With this patch LDAP security services can have users, groups,
      roles and permissions in the LDAP repository. It also works with users in
      LDAP and the rest in the Database. <br/>
      Sample configuration files for Openldap can be found
      <a href="http://cvs.apache.org/viewcvs/jakarta-turbine-2/conf/openldap/">
      here</a>.
    </action>
    <action type="update" issue="TTWS34">
      Implemented the following functions in LDAPUserManager:
      store(), createAccount() and removeAccount().
    </action>
    <action type="update">
      added new Logging code which uses commons-logging everywhere.
    </action>
    <action type="update">
       added new Configuration code based on commons-configuration. Switched
       all configuration requests to commons-configuration.
                <action type="update">
           Configuration values can now be stored in XML, .properties, as well as JNDI Tree.
         </action>
         <action type="update">
       Configuration values can be overridden.  If you specify JNDI and the .xml, if a value
       is found in JNDI, then it is used.  Useful for overriding environment specific values
       like mail servers or whether Velocity templates are reloadable.
         </action>
           </action>
    <action type="update">
      added Log4j configuration and startup.
    </action>
    <action type="update">
      removed all remaining Torque code.
    </action>
    <action type="update">
      VelocityLayout is now the proposed default layout.
      VelocityECSLayout might go away post-2.3.
      See <a href="http://wiki.apache.org/turbine/Turbine2/VelocityOnlyLayout">
      Moving to VelocityOnlyLayout</a> to see what changes need to be made to your
      application(s).
    </action>
    <action type="update">
      TurbineException, TurbineRuntimeException, and TurbineError all extend
      the corresponding "Nestable" exception type from commons-lang.
    </action>
    <action type="update">
      VelocityHtmlMail can now be used in a scheduled job.  It has a new constructor
      accepting a velocity context object.
    </action>
    <action type="update">
      Intake changes:
              <action type="update">
          Backported changes from Fulcrum version
        </action>
        <action type="update">
          IntakeException is now thrown from intake methods instead of
          TurbineException and Exception.
        </action>
        <action type="update">
          Multiple XML definition files can be used.
        </action>
        <action type="update">
          Logging has been improved to give more information when an
          error occurs.
        </action>
        <action type="update">
          The DTD has been updated and fully documented!
        </action>
        <action type="update">
          Intake now uses commons-pool for pooling.
        </action>
        <action type="update">
          intake.dtd is now packaged in the turbine.jar file.  If your
          intake.xml file validates against
          jakarta.apache.org/turbine/dtd/intake.dtd, then the DTD included
          in the jar file will be used instead of the online version.
        </action>
        <action type="update">
          The DTD resolved for intake will now look for intake.dtd on the
          class path when the DTD in the XMl file is
          http://jakarta.apache.org/turbine/dtd/intake_2_2_1.dtd.  The application
          functions in the same way.  This was done to allow XML editors to use
          the correct version of the DTD.
        </action>
        <action type="update">
          The field object has two new methods to help in creating the HTML
          input tags for the field.  They are getDisplaySize() and getMaxSize().
          The display size is set in the xml definition.  The max size is pulled
          from the maxLength rule (if defined).
        </action>
        <action type="update">
           The setDefaultValue() method on the Field object is now public.  This
           will allow you to assign a value to a field for display on a form that
           does come from a mapped object.  Before this change, your only option
           was to defined the default value in intake.xml.
          </action>
          </action>
    <action type="update">
        All deprecated calls to the old org.apache.turbine.util.Log have
        been replaced with calls to org.apache.commons.logging.Log.
    </action>
    <action type="update">
        A new SessionService has been added.  This will allow access to all
        sessions in the current context if you use Servlet API 2.3 or better.
    </action>
    <action type="update">
        The non-secure web server for handling xml-rpc requests
        will now use the services.XmlRpcService.address setting for
        the address on which to listen for requests.  If the setting
        is not found in TR.props, it will use the default of 0.0.0.0.
        This address will cause the server to listen on all
        addresses of a multi-homed machine.
    </action>
    <action type="update">
        Nearly all of the methods of o.a.t.util.StringUtils has been deprecated.  You should change your
        application code to use StringUtils from commons-lang.
    </action>
    <action type="update">
        All classed in the org.apache.turbine.util.mail package have been deprecated.  You should change your
        application code to use commons-mail instead.
    </action>
    <action type="update">
        Turbine now uses commons-fileupload.  The org.apache.turbine.util.upload
        package has been deprecated.
    </action>
    <action type="update">
        The Pull Service got a new scope: authorized tools. These are like Session Tools but only
        available after the user logged in.
    </action>
    <action type="update">
        The Pull Service got a new type of tools: RunDataApplicationTools. These tools get the
        current RunData object passed at every refresh(). This type obviously makes sense only
        for non-request scope tools.
    </action>
    <action type="update">
      Some services got static facade classes: FactoryService, JspService, RunDataService, SchedulerService.
    </action>
    <action type="update">
      Turbine can use the ConfigurationFactory from commons-configuration to load all kinds of configuration types
      like XML, JNDI or (still) plain properties files.
    </action>
    <action type="update">
      A completely new URI handling scheme was added and is now the proposed default method to handle URI representations
      in Turbine. The older URI handling classes like ContentURI and DynamicURI will go after the 2.3 release.
    </action>
    <action type="update">
      A new Security Service is available: TorqueSecurityService. It has the same functionality as the DBSecurityService
      but allows the usage of arbitrary Torque generated peer classes and objects as security objects.
    </action>
    <action type="update">
      The security object get methods from Security Service have been deprecated and replaced by methods which are
      able to reference Objects by Name and by Primary Key.
    </action>
    <action type="update">
      The TurbineDB Service has been deprecated. Use Torque and the Component Service to start Torque.
    </action>
    <action type="update">
      It is possible to debug pressure on the PoolService by setting services.PoolService.pool.debug to true
      in the TurbineResources.properties.
    </action>
    <action type="update">
      Turbine now has some integration for Avalon Components. It can start
      Avalon based components with the new AvalonComponentService.
    </action>
    <action type="update">Added a new TurbineMacros file to the turbine jar, which contains some helper
        macros for Velocity Templates. Currently there are only some macros to be used
        with VelocityOnlyLayout to render the page attributes like in VelocityECSLayout
        based pages.
    </action>
    <action type="update">
      The ComponentService (using the stratum lifecycle interfaces) is
      deprecated. It will be removed after the 2.3 release as the stratum
      package is unmaintained. We use the new AvalonComponentService to
      initialize Torque.
    </action>
    <action type="update">
      ActionEvent and VelocityActionEvent can "ignore" eventSubmit_&lt;xxx&gt; events if they
      contain an empty or a zero value. This behaviour is controlled by the "action.eventsubmit.needsvalue"
      property that defaults to "off", which  means no change from the pre-2.3 behaviour. The new behaviour
      is  useful if you have multiple event fields in a form and only one should be selected
      (e.g. by a client side java script application).
    </action>
    <action type="update">
      VelocityService now uses the EventCartridge Code to catch and log invocation errors from templates.
      This is very useful when debugging pull tools, because you get the actual exception in the log and
      not only the velocity internal stack trace. You can switch this behaviour off by setting
      "services.VelocityService.catch.errors" to off or false.
    </action>
    <action type="update">
      Intake can now assign "empty" values to fields which are not returned or left out by the browser. This
      is useful if you want your string fields not to map to null if the user does not enter anything.
    </action>
      <action type="update" issue="TTWS25">
        Removed deprecated call to TurbineDB.
    </action>
    <action type="update">
      TRQD10: Extending Turbine User How-to for T2.2
    </action>
    <action type="update" issue="TTWS20">
      Intake can not set mapped attributes to null.
    </action>
    <action type="update">
      Changed made to scheduled jobs are now recognized by the scheduler
      service.  Before, it would only recognize changes to the next run
      time.
    </action>
    <action type="update">
      Fixed null pointer exception during initialization of IntakeTool when there are
      no groups defined in intake.xml
    </action>
    <action type="update" issue="TTWS41">
      PrimaryKey not set on TurbineUser after insert.
    </action>
    <action type="update">
      Cookies now work properly.  A NullPointerException was being thrown
      during the call to data.getCookies() if no cookies were present.  Also,
      the path for cookies was being set incorrectly.  Both of these issues
      have been fixed.
    </action>
    <action type="update">
      The pull service now really refreshes non-request tool every time a tool is requested.
    </action>
  </release>

<release version="Turbine 2.2 (= 2.2-rc2)">

      <action type="update" issue="TTWS1">
        TemplatePageAttributes enhancements.
    </action>
    <action type="update" issue="TTWS5">
      Reference support for DynamicURI.
    </action>
    <action type="update" issue="TTWS13">
      IntakeTool.getGroups() should be public.
    </action>
  </release>

<release version="Turbine 2.2-rc1">

      <action type="update">
      Enhancements to support Apache XML-RPC versions 1.2 alpha 1 and 2.
    </action>

      <action type="update">
      TRQD2: Update to intake-howto to mention remove()
    </action>
  </release>

<release version="Turbine 2.2-b2">

      <action type="update">
        The coupled version of Torque has been removed from Turbine 2.2!
Get a full list of changes at the
<a href="http://db.apache.org/torque/changes-report.html">Torque-site</a>.
      </action>

      <action type="update">
      the coupled version of torque has been removed.
    </action>

      <action type="update">
      Maven is used as build system for Turbine 2.2
    </action>
    <action type="update">
      removed antiquated redirect logic.
    </action>
    <action type="update">
      You can use log4j properties directly.
    </action>
    <action type="update">
      The configuration package has been moved from stratum to commons
    </action>
    <action type="update">
      BaseValueParser.setProperty() changed from private to protected
    </action>

      <action type="update">
      Fixed IllegalStateException when removing an attribute from an invalid
      session (patch by David Vandegrift - dvandegrift@bluearc.com)
    </action>
    <action type="update">
      Fixed NumberFormatException in UUIdGenerator.
    </action>
  </release>


<release version="Turbine 2.2b1">

<action type="update">
Torque and Fulcrum (the service framework) have been decoupled in preparation
for Turbine 3.0. The decoupled versions can be used with Turbine 2.2.
We strongly recommend to use the decoupled versions (some of the 'old' services
must be used, because they are used internally by Turbine)<br/>

If you wrote your own services you should also change them to be Fulcrum
services to make them work with Turbine 3.x<br/>
</action>

      <action type="update">
      The Service interface was extended to allow integration of Service
      implementations: <br/>
      <b>Service.getName()</b> <br/>
      since most Service implementations extend BaseService
      (which implements a public getName method), this should not be an issue.
    </action>

      <action type="update">
      <b>ECS, Freemarker and Webmacro</b> services/modules are marked
      <b>deprecated</b>. You should use Velocity instead.
    </action>
    <action type="update">
      <b>Castor</b> service is marked as <b>deprecated</b>. You should use
      om/peer classes instead!
    </action>
    <action type="update">
      The XSLT Service is updated to use Xalan 2.0
    </action>
    <action type="update">
      Improved datatype mappings for mysql, oracle, postgresql, sapdb
    </action>
    <action type="update">
      adding support for DB2 on AS400 (patch by Sweaver@rippe.com).
    </action>
    <action type="update">
      adding support for secure connections in the xmlrpc service.
    </action>
    <action type="update">
      Added a configuration parameter to torque, addTimeStamp, that allows the
      user to generate files without a timestamp. Default is true, timestamps
      will be generated.
    </action>
    <action type="update">
      Criteria.Criterion implements Serializable
    </action>
    <action type="update">
      DB implements Serializable
    </action>
    <action type="update">
      torque: id-methods <i>sequence</i> and <i>autoincrement</i> are
      <b>deprecated</b>. You should use <b>native</b>. torque uses the method
      provided by your database
    </action>
    <action type="update">
      added static strings for ISNULL and ISNOTNULL to Criteria.
    </action>
    <action type="update">
      added getDateString() method to format date fields to DB.
    </action>
    <action type="update">
      added VelocityDirectLayout/Screen to make it possible to embed
      servlet/JSP outputs into a Velocity template used within Turbine.
      (patch by raphael.luta@networks.groupvu.com)
    </action>
    <action type="update">
      added an easy to use localization pull tool.
    </action>
    <action type="update">
      Javadocs improvements.
    </action>
    <action type="update">
      Documentation improvements.
    </action>

    <action type="update">
      fixed error in Mssql unique.vm template (removed a blank line)
    </action>
    <action type="update">
      [2301] Embedding message parts in HtmlEmail throws NullPointerException.
    </action>
    <action type="update">
      bugfix for BigDecimal attributes with default value
    </action>
    <action type="update">
      fixed handling of sequences for db2, oracle, postgresql, sapdb
    </action>
    <action type="update">
      fixed syntax for create index (postgresql)
    </action>
    <action type="update">
      fixed problem for postgres with blob style column in TurbineUser table.
      (patch by Jerome Veryleyen)
    </action>
    <action type="update">
      BaseUnicastRemoteService.java: Corrected method name (setName -> getName).
    </action>
    <action type="update">
      fixed Roleset.add(RoleSet) (patch by lujin@yahoo.com)
    </action>
    <action type="update">
      fixed database - defaultIdMethod (torque)
    </action>
    <action type="update">
      fixed date formating problem with Oracle.
    </action>
    <action type="update">
      fixed problem when ignoreCase was used with ISNULL or ISNOTNULL.
    </action>
    <action type="update">
      fixed Option object initialisation in SelectorBox
      (patch by Kurt Grafius kurtg@jvoom.com)
    </action>
  </release>

</body>
</document>
