Releases: framework-one/fw1
v4.3.0
v4.3.0-beta.1
Updated version number to 4.3.0-beta1
Release 4.2.0
A maintenance release:
- #500 Fix unscoped variables
q
anda
inbuildURL()
- Add
onMissingMethod()
pass-thru support to AOP/1 - #496 Allow AOP/1 to accept array of folders (DI/1 already accepted this)
- #493 Use
encodeForURL()
instead ofurlEncodedFormat()
- #491 Fix trailing
&
on query string - #486 Experimental ColdBox Module support (work-in-progress)
FW/1 4.1.0
Lucee 5.x is now officially supported -- because the Clojure integration, introduced in FW/1 3.5, is no longer included in FW/1. You can still use cfmljure for that if you want.
Enhancements include: session scope is now pluggable; a new missingview
configuration option; a new onReload()
extension point; and more.
For the full list of enhancements and bug fixes, read the FW/1 4.1.0 Change Log.
4.1.0 Release Candidate 1
A bug fix and minor enhancement release for 4.0.0. See http://framework-one.github.io/documentation/4.1/changes.html for full details of changes.
Highlights:
- session handling is pluggable
- missing view handling has been enhanced
- a new
onReload()
extension point is available - testing (and the Continuous Integration process) has been simplified and now uses CommandBox and TestBox
- bug fixes in error handling, transient bean population under heavy load, and some other areas
Release 4.0.0
Summary
The focus of the 4.0 release is on improving REST support. Improvements include:
- JSON-encoded and URL-encoded POST / PUT body support.
- Controllers have easy access to HTTP headers.
- Builder syntax for
renderData()
result elements. - Support for user-supplied rendering functions.
- Integrated support for HTTP
OPTIONS
verb. - Per-resource error handling.
- Setting status text (in addition to status code) in HTTP responses.
- Wildcard HTTP method support.
In addition, DI/1 has had a number of enhancements, including the addition of a builder syntax for programmatically declaring beans.
Breaking Changes
- 443 - Prevented
loadListener
from being accidentally inherited and run on a managed subsystem bean factory (it should only run on the main parent factory). This is potentially breaking: if you relied on running load listeners multiple times -- however, that was never a recommended approach. - 400 - By default,
property
declarations that contain atype
ordefault
are now ignored for autowiring. In earlier versions of FW/1 (DI/1), suchproperty
declarations would have been treated as dependencies and autowired: you could override that behavior for typed properties by specifyingomitTypedProperties : true
in your configuration. That is now the default behavior. In addition a newomitDefaultedProperties
setting has been added, also defaulted totrue
, which is what tells FW/1 (DI/1) to ignoreproperty
declarations that contain adefault
. If you need to restore the pre-4.0 behavior, addomitDefaultedProperties
and/oromitTypedProperties
to your configuration, set tofalse
. - 391 - Adobe ColdFusion 9.0.2 is no longer a supported platform. FW/1 4.0 relies on closure support and therefore requires Adobe ColdFusion 10 or later. Support for Railo and Lucee has not changed.
- 390 - If you override
missingBean()
in DI/1, read the documentation carefully as this is now an official extension point with different behavior to previous releases.
Enhancements
- 448 - Added
callClojure()
extension point forcljcontroller.cfc
. - 442 - In Alpha 1 and Beta 1, the
decodeRequestBody
setting was calledenableJSONPOST
. As a migration aid, attempting to setenableJSONPOST
will throw an exception saying you should usedecodeRequestBody
instead. - 441 -
decodeRequestBody
handles URL-encoded form variables, which is typical for PUT, as well as JSON-encoded form bodies (see issue 389 below for the introduction of this setting). - 439 - Add
framework.facade
component to make FW/1 accessible out-of-band (for integration purposes). - 434 - Add
getRoutePath()
convenience method. - 419 - Add
getCGIRequestMethod()
convenience method. - 418 - Allow
factoryBean()
to accept function/closure. - 417 - Add builder syntax for bean declarations.
- 416 - Delay bean discovery (where possible) until after declarations are processed.
- 415 - Add support for CFML-only and Clojure-only search paths.
- 414 - Add support for Boot to cfmljure.
- 413 -
layout()
may now be called from controllers. - 412 - Add
renderer()
to accessrenderData()
builder and addheader()
to set HTTP response headers. - 411 - Add
headers
argument to controllers. - 410 - Clarified license (Apache Source License 2.0), added LICENSE file.
- 409 - Dependency injection uses additional caches to improve
getBean()
performance (by a factor of 9x-25x, depending on your usage and your CFML engine). - 407 - DI/1 now has a public
hasParent()
predicate method. - 400 - Dependency injection ignores typed/defaulted properties by default. This can be disabled via the
omitDefaultedProperties
andomitTypedProperties
settings. - 399 -
getBean()
now accepts an optional second argument that can override beans in the factory to provide constructor arguments to be used in the bean'sinit()
call. - 394 - Improved error messages when DI/1 attempts to use a CFC that has syntax errors to include filename/line number of the underlying error.
- 392 - A wildcard resource match is generated for
$RESOURCES
to provide per-resource error handling. This can be disabled via theperResourceError
setting. - 390 - DI/1 now considers
missingBean()
to be a fully supported extension point that allows users to handlinggetBean()
calls for unknown beans by any means, including creating and returning their own beans. - 389 - A new setting
decodeRequestBody
tells FW/1 to deserialize the JSON-encoded body of an HTTP request. - 388 - The
statusCode
andjsonpCallback
arguments torenderData()
have been deprecated and a new builder syntax has been added to support all possible parameters available when rendering data, e.g.,renderData( "json" ).data( result ).statusCode( 202 )
. - 387 - A new setting
preflightOptions
tells FW/1 to provide built-in support for HTTPOPTIONS
. An additional settingoptionsAccessControl
allows you to fine tune theAccess-Control-*
headers returned. - 386 - Routes can now have
$*
as an explicit wildcard for the HTTP method. - 385 - The new
renderData()
build syntax supportsstatusText()
to set the HTTP response status text. - 328 - The
renderData()
type
may be a function/closure that returnscontentType
, renderedcontent
, and an optionalwriter
for delivering the data to the browser.
Bug Fixes
- 449 - Fix race condition in DI/1's bean resolution caching.
- 446 - Fix bug in
$RESOURCES
whennested
resource appeared in multipleresources
. - 440 - Improved thread safety on application reloading. Even
reloadApplicationOnEveryRequest : true
should be safe now! - 429 - Removed
expandPath()
in calls tocachedFileExists()
. - 427 - Fixed bug that prevented
before()
/after()
working in Clojure controllers; fixed bug that caused Clojure controller shims to be created twice. - 422 - Fix bug with case insensitive routes.
- 420 - Fix bug in transient autowiring (caused by caching metadata).
- 395 - Corrected calls to
buildURL()
in examples.
Release 4.0.0 Release Candidate 1
This includes a minor bug fix since Beta 2 (ensuring a DI/1 load listener will only be executed for the main (parent) bean factory, and not for subsystems, unless those are explicitly configured to have their own load listeners).
Release 4.0.0 Beta 2
Changes since Beta 1:
- #442
enableJSONPOST
has been renamed todecodeRequestBody
. UsingenableJSONPOST
will now throw an exception explaining the change.
This is a breaking change if you were using enableJSONPOST
in the earlier Alpha / Beta builds.
Release 4.0.0 Beta 1
Changes since Alpha 1:
- #427 Improve support for Clojure Controllers (incl.
before()
/after()
) - #429 Remove unnecessary calls to
expandPath()
- #434 Add
getRoutePath()
- #439 Add FW/1 facade (primarily to support ORM-based usage of bean factories)
- #440 Improve thread safety on reload (so
reloadApplicationOnEveryRequest
should be thread safe now) - #441 Support URL-encoded form data (for POST / PUT) when
enableJSONPOST
istrue
Note: enableJSONPOST
is misnamed now and will probably change before release.