Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
July 9th, 2021
CACHEBOX-68 BlackHoleStore never finishes reap() method
June 21, 2022
Here is a listing of all the major updates and improvements in this version.
This release brings in a complete re-architecture of the creation, inspection and wiring of objects in WireBox in order to increase performance. Every single line of code was optimized and analyzed in order to bring the creation, inspection and wiring of objects to its maximum speed. This will be noted more on the creation of transient (non-persisted) objects more than in singleton objects. So if you are asking WireBox for transient objects, you will see and feel the difference.
In some of our performance testing we had about 4000 object instantiations running between 500ms-1,100 ms depending on CPU load. While with simple createObject()
and no wiring, they click around 400-700 ms. Previously, we had the same instantiations clocking at 900-3,500 ms. So we can definitely see a major improvement in this area.
Bug
WIREBOX-126 Inherited Metadata Usage - Singleton attribute evaluated before Scopes
Improvement
WIREBOX-129 Massive refactor to improve object creation and injection wiring
WIREBOX-128 Injector now caches all object contains lookups to increase performance across hierarchy lookups
WIREBOX-127 Lazy load all constructs on the Injector to improve performance
WIREBOX-125 Remove the usage of identity hash codes, they are no longer relevant and can cause contention under load
Bug
CACHEBOX-66 Cachebox concurrent store meta index not thread safe during reaping
Improvement
CACHEBOX-82 Remove the usage of identity hash codes, they are no longer relevant and can cause contention under load
ColdBox 6.3.0 is a minor release that squashes lots of bugs and does tons of improvements for performance!
[CACHEBOX-67] - getStoreMetadataReport()
- wrong order of the reduce()
parameters
[WIREBOX-111] - Refactor the way cffeed
is used so that ACF 2021 doesn't choke on first startups, only when used
This release was a ColdBox minor bump with no tickets affecting Wirebox
In this section you will find the release notes for each version we release under this major version. If you are looking for the release notes of previous major versions use the version switcher at the top left of this documentation book. Here is a breakdown of our major version releases.
Version 6.0 - August 2020
Version 3.0 - March 2011
Version 2.0 - April 2007
Version 1.0 - June 2006
Here are the release notes for WireBox 6.4.0
virtual inheritance causes double inits
on objects that do not have a constructor and their parent does.
onDIComplete
() is called twice using virtual inheritance
New coldbox dsl => coldbox:appScheduler
which gives you the appScheduler@coldbox
instance
new injection dsl: wirebox:asyncManager
Welcome to the world of hierarchical dependency injection. We had the ability before to add a parent injector to WireBox, but now you can not only add a parent, but also many children to the hierarchy.
Every injector has the capability to store an ordered collection (ordered struct
) of child injectors via the childInjectors
property. Child injectors are used internally in many instances to provide a hierarchical approach to DI where instances can be searched for locally, in the parent and in the children. Here are some of the new methods to assist with child injectors:
hasChildInjector( name )
- Verify if a child injector has been registered
registerChildInjector( name, child )
- Register a child injector by name
removeChildInjector( name )
- Remove a child injector by name
getChildInjector( name )
- Get a child injector by name
getChildInjectors()
- Get all the child injectors registered
getChildInjectorNames()
- Get an array of all the registered child injectors
getInstance()
The getInstance()
method now has an injector
argument so you can EXPLICITLY request an instance from a child injector by name getInstance( name : "service", injector : "childInjector" )
Apart from the explicit lookup it can also do implicit hierarchical lookups using the following order:
Locally
Parent
All Children (in order of registration)
containsInstance( name )
- This method now also searches in the child collection for the specific name
instance. The lookup searches in the following order:
Locally
Parent
Children
shutdown()
- The shutdown method has been enhanced to issue shutdown method calls to all child injectors registered.
The getInstance()
has been modified to have an injector
argument that you can use to specifically ask for an instance from that child injector. If the child injector has not been registered you will get a InvalidChildInjector
Exception.
The following is the DSL you can use to explicitly target a child injector for a dependency. You will prefix it with wirebox:child:{name}
and the name of the injector:
The coldbox.system.ioc.IInjector
interface's getInstance()
method has been modified to include support for child injector retrievals:
Killing IInjector
interface usages due to many issues across cfml engines, leaving them for docs only
Never override an existing variables key with virtual inheritance
DSLs process method now receives the caller targetID
alongside the targetObject
and the target
definition
New wirebox DSL to inject the target's metadata that's cached in the target's binder: wirebox:objectMetadata
New WireBoxDSL: wirebox:targetID
to give you back the target ID used when injecting the object
Missing coldbox:schedulerService
DSL
HDI - Ability for injectors to have a collection of child injectors to delegate lookups to, basically Hierarchical DI
Removal of usage of Injector dsl interface due to so many issues with multiple engines.
Fixed method return value + SQL compatibility on jdbc metadata indexer thanks to @homestar9
reap operation was not ignoring 0 values for last access timeouts
Typo in queryExecute Attribute "datasource" in the JDBCStore.cfc
Replace IIF and urlEncodedFormat on cache content reports
Lower logging verbosity of cache reaping from info to debug messages
May 1, 2023
Github actions for LTS Releases
LTS Updates
COLDBOX-1219 CFProvider ACF versions are Hard-Coded
WIREBOX-132 WireBox caches Singletons even if their autowired dependencies throw exceptions.
WireBox 6 is a major release for WireBox accompanied by the ColdBox Platform release. WireBox includes LogBox and CacheBox and you can find the appropriate release notes for those libraries as well.
[WIREBOX-90] - Fix constructor injection with virtual inheritance
[WIREBOX-91] - Injector's get a reference to an asyncManager and a task scheduler whether they are in ColdBox or non-ColdBox mode
[WIREBOX-92] - New `executors` dsl so you can easily inject executors ANYWEHRE
[WIREBOX-97] - New dsl coldbox:coldboxSetting:{setting} alias to coldbox:fwSetting:{setting}
[WIREBOX-88] - Improve WireBox error on Adobe CF
[WIREBOX-93] - Rename WireBox provider get() to $get() to avoid conflicts with provided classes
[WIREBOX-94] - getInstance() now accepts either dsl or name via the first argument and initArguments as second argument
[CACHEBOX-59] - Announced Events in the set() of the cacheBoxProvider
[CACHEBOX-63] - cfthread-20506;variable [ATTRIBUES] doesn't exist;lucee.runtime.exp.ExpressionException: variable [ATTRIBUES] doesn't exist
[CACHEBOX-24] - CacheBox reaper : migrate to a scheduled task via cbPromises
[CACHEBOX-60] - CacheFactory gets a reference to an asyncManager and a task scheduler whether they are in ColdBox or non-ColdBox mode
[CACHEBOX-64] - Migrations to script and more fluent programming
[LOGBOX-35] - FileAppender: if logging happens in a thread, queue never gets processed and, potentially, you run out of heap space
[LOGBOX-38] - Rotate property is defined but never used
[LOGBOX-45] - Work around for adobe bug CF-4204874 where closures are holding on to tak contexts
[LOGBOX-50] - Rolling file appender inserting tabs on first line
[LOGBOX-5] - Allow config path as string in LogBox init (standalone)
[LOGBOX-11] - Allow standard appenders to be configured by name (instead of full path)
[LOGBOX-36] - Added an `err()` to abstract appenders for reporting to the error streams
[LOGBOX-42] - All appenders get a reference to the running LogBox instance
[LOGBOX-43] - LogBox has a scheduler executor and the asyncmanager attached to it for standalone and ColdBox mode.
[LOGBOX-44] - Rolling appender now uses the new async schedulers to stream data to files
[LOGBOX-46] - Update ConsoleAppender to use TaskScheduler
[LOGBOX-47] - AbstractAppender log listener and queueing facilities are now available for all appenders
[LOGBOX-48] - DB Appender now uses a queueing approach to sending log messages
[LOGBOX-49] - Rolling File Appender now uses the async scheduler for log rotation checks
This minor release brings in some major performance enhancements for the way WireBox maps and creates objects. We highly encourage upgrading to it.
[WIREBOX-99] - parameter [binder] to function [process] is required but was not passed in When setting coldbox.autoMap to false and choosing either method of mapping a directory:
[WIREBOX-102] - ACF incompats with future combinations due to dumb elvis operator bug
[WIREBOX-98] - Pass the current injector
to the binder's life-cycle methods: onShutdown(), onLoad()
[WIREBOX-100] - Create a processEagerInits()
so it can process them at wirebox load
[WIREBOX-101] - Complete rewrite of the Mapping
object to script and performance optimizations
[WIREBOX-103] - Complete rewrite of the WireBox Binder
to script and optimizations
[WIREBOX-104] - New WireBox config: autoProcessMappings
which can be used to auto process metadata inspections on startup.
[COLDBOX-945] - Event caching now bases off the multi host key from the event.getSESBaseURL() to improve consistencies and single responsibility
[COLDBOX-953] - Update DateFormat
Mask to use lowercase "d" to be compatible with ACF2021
WireBox 6.1.0 is a minor release with small fixes and minor updates.
[WIREBOX-82] - builder.toVirtualInheritance(): scoping issues
[WIREBOX-83] - When using sandbox security, and using a provider DSL the file existence checks blow up
[LOGBOX-53] - Direct console debugging is left in the AbstractAppender
and FileAppender