------------------------------------------------ __ ___ __ ________ / |/ /___ ______/ /_ / _/ _/ / /|_/ / __ `/ ___/ __ \______ / / / / / / / / /_/ / /__/ / / /_____// /_/ / /_/ /_/\__,_/\___/_/ /_/ /___/___/ Version 1.5.0.@minorVersion@ $Id$ ------------------------------------------------ Copyright 2007 GreatBizTools, LLC Licensed 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. ------------------------------------------------ _ / |_ _.._ _ _ | _ _ \_| |(_|| |(_|(/_ |_(_)(_| _| _| ------------------------------------------------ Bug Fixes ------------------------------------------------ * Fixed bug when MACHII_CONFIG_MODE was 0 Sometimes the framework did not reload the framework when it was supposed to due to a logic error in an if/else condition. (2007-03-24 pfarrell) * Short Changed the Maximum Number of Events When Exception Occurs Changed logic that if an exception occurs, it gets the maximum number of events to queue instead of being short changed in previous versions. For example, an exception occured on event 9 of 10 and an exception was generated. However, some application's exception handling announces other events to display "pretty" error pages. Since the event count was already very high, it is possible to exceed the max number of events during the exception handling. This caused the framework to throw an error stating you have exceeded the maximum number of events. Now, when an exception is generated, the event count is reset to 0 so the exception handling as the maximum number of events to announce if needed. We have taken care to not introduce an infinite loop. If the developer's exception handling as an error that causes an infinite loop, we throw an error after the maximum number of events that states the exception handing has exceeded the maximum of events and it has caused an infinite loop. (2007-02-27 pfarrell) * Plugin Manager Metadata Bug Fixed bug when plugin or components that they extend have no functions inside of the hierarchy. (2007-02-04 pfarrell) * White Screen of Death (WSOD) When Maximum Events Is Exceeded Fixed WSOD bug when the maximum number of events to be processed is exceeded. Now, process the generated exception up to the maximum number of events then throws an error since the exception handling exceeded the maximum events for the second time. (2007-02-08 pfarrell) ------------------------------------------------ Improvements / Enhancements ------------------------------------------------ * Added ANT build file (2007-09-25 pfarrell) * Added AnnounceEventInModule A new method to BaseComponent called announceEventInModule(). The BaseComponent is available to filter, listener, plugins and the new properties constructs. You can use this method to announces events in other modules. Example: (2007-04-24 pfarrell) * Module Support Please see the documentation for more information. (2007-04-24 kwiersma & pfarrell) * Modules Relative File Paths You can specify a relative path to your module file. This works in the same manner as relative paths for includes (see below). (2007-08-09 pfarrell) * Complex Properties To Configure Time Parameters Please see the documentation for more information. (2007-02-25 pfarrell) * Redirect statusTypes Added new optional attribute to the redirect command to more than just http stauts 302 redirects. The new attributes is: - statusType [permanent|temporary|prg] defaults to temporary Permanent = 301 http status Temporary = 302 http status (this is what cflocation does) PRG = 303 http status (PRG = post-redirect-get routine which is a common idiom) (2007-02-25 pfarrell) * Include Tag Support You can now use the includes section and include tag in your Mach II XML config file to dynamically included anonther configuration file. The include file is specificed using the file attribute of the include tag and is relative to the application root or mapping. Since you cannot define duplicate listeners, filters, plugins, events or views there may arise a situation where your include may contain a duplicate event etc. You can use the override attribute to override conflicts. The attribute defaults to "false" if not specified. If you set the MACHII_CONFIG_MODE to 0 (dynamic) and a included config file changes, Mach-II will automatically reload even if the base config file does not change. Also, you can specify a relative path to your include file. The relative path is relative from the location of the xml file that defines the include. Use the standard *nix style ./ and ../ notation for building your relative path. In the example below, the ./ indicates that the starting path is relative to the current directory and that the mach-ii_admin.xml file is location in the SAME directory as the mach-ii.xml file. Example - mach-ii.xml: ... ... The new include functionality supports includes that include other include files (i.e. recursive). Also, if you try to include a file that has already been included, Mach-II will throw an error telling you cannot do that. (2007-02-18 kwiersma - includes) (2007-08-09 pfarrell - relative paths) * Redirect Persist Added new optional attributes to the redirect command that allows you to persist complex datatypes across a redirect. The new attributes are: - persist [boolean] Turns complex persisting on/off for this redirect. - persistArg [comma,delimitated,list,of,event,args] List of event arg names to persists. If this attribute is not defined or "", the command will persist the entire event object. A new optional property has been added called redirectPersistParameter. This defaults to persistId. (2007-02-08 pfarrell) * Complex Properties To Properties Please see the documentation for more information. (2007-02-05 pfarrell) * Trace Plugin We have added better event more granular parameters to suppress trace output by adding a parameter that only shows debugging if ColdFusion's debugging mode is on. (2007-02-02 kwiersma) * Subroutines Added a new XML construct to support subroutines and a related command to execute a subroutine. Subroutine are executed at the time they are encountered in the XML and utilize the current event object. They are in essence - inline, private (no URL accessible) event-handlers chain into the current event object. (2007-02-02 pfarrell) * Bindable Placeholder Parameter Values Support Built-in bindable of ${} syntax of placeholders in parameters values. This allows you use placeholders to have dynamic parameter values. For example: The ${serverMode} corresponds to a property named "serverMode". Mach-II will automatically get the property's value at runtime and replace parameter's value with the result of the property. (2007-02-03 pfarrell) * Event-Bean Command Added new optional attribute called "reinit" which defaults to true if not defined in the command. If "reinit" is false, the even-bean command will not re-initialize the bean, but get it from the Event object. This allows you to reuse beans and repopulate, whereas the old functionality would overwrite the original bean and you would loose all the data contained within. This feature enhancement is backwards compatible with 1.1.1. (2007-02-05 pfarrell) ------------------------------------------------ Internal Framework Improvements / Enhancements ------------------------------------------------ * New EventContext in conjuction with RequestHandler The framework's request runner has been completely rewritten in order to support modules. We recommend NOT using the undocumented request.eventContext as this construct has been depreciated and we recommend that you do NOT directly access the new request._MachIIRequestHandler contruct as well. (2007-04-24 kwiersma & pfarrell) * Required event-handlers check The framework now checks for required events (defaultEvent and exceptionEvent) for parent modules and checks for required events if they have been defined when in a module. (2007-04-24 pfarrell) * Framework reloads when changes are made to includes and MACHII_CONFIG_MODE is 0 (2007-03-24 pfarrell) * Removed use of XmlSearch() and switched to StructKeyExists for parameters in property, listener, filter and plugin managers. This has improved (re)load times up to approximately 10% for large applications that contain many declarations of properties, listeners, filters and plugins. (2007-03-01 pfarrell) * Refactored all managers to method chain the init() method whe creating the object (2007-02-25 pfarrell) * Refactored manager's init() method into init() and loadXml() methods Separated the loading of xml data into separate function since it called so many times during the loading the framework due to the introduction of includes. (2007-02-25 pfarrell) * Refactored AppManager's RequestHandler Logic Into RequestManager Moved created and getting of RequestHandler's into the new RequestManager. Delegated the getRequestHandler() method in AppManager to use RequestManager. There was no API change in regards to the AppManager's getRequestHandler(), however we removed the public utility method named createRequestHandler() from the AppManager since nobody *should* be calling this externally. (2007-02-19 pfarrell) * All init() methods now Return the "this" scope instead void (2007-02-10 pfarrell) * Version number of the framework is now hard-coded in the PropertyManager instead of being passed up the component chain from the bootstrappers. (2007-02-10 pfarrell)