What's New With 6.6.0
February 02, 2022
Last updated
Was this helpful?
February 02, 2022
Last updated
Was this helpful?
We have created a shortcut approach to creating RESTFul API resources in your ColdBox Routers via the new method apiResources()
. This method will create all the routes for your API service with no HTML views.
GET
/photos
photos.index
Get all photos
POST
/photos
photos.create
Create a photo
GET
/photos/:id
photos.show
Show a photo by id
PUT/PATCH
/photos/:id
photos.update
Update a photo by id
DELETE
/photos/:id
photos.delete
Delete a photo by id
We have made several enhancements with modules:
Performance optimizations when registering and activating modules
Modules now track their own registration and activation load times (Which are now visible in )
Better logging of modules when they activate and register
We have been working on a new directory structure for ColdBox applications where the web root is not just dumped with everything on it. We have made several internal tickets to allow for this to work and we have a very early alpha available in github:
There are so many tickets that helped resolved issues with the ColdBox schedulers and scheduled tasks. We have also solidifying our Adobe scope issues and brought many new helpers for developers when building task objects.
ColdBox has always had its internal way of figuring out what identifier to use for each user's request based on the way ColdFusion works. However, now you can influence and provide your own approach instead of relying on the core CFML approach. You will do this by adding a coldbox.identifierProvider
closure/lambda into your config/Coldbox.cfc
.
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:
Bug
Improvement
New Feature
If you are building multi-tenant applications with ColdBox and are leveraging , then you can easily use the domain
argument in all of our request(), execute()
and HTTP Verb methods to simulate the domain in play for THAT specific spec execution.
Non config apps fails since the core Settings.cfc had the configure() method removed
Framework Initialization Fails in @be on AutoWire of App Scheduler
Scheduled tasks not accessing application scope on Adobe Engines
ColdBox schedulers starting before the application is ready to serve requests
Scheduler service not registering schedulers with the appropriate name
scheduler names can only be used once - executor needs to be removed
Scheduled tasks fail after upgrading to coldbox 6.5. Downgrading to 6.4.0 works.
actions for a specific pattern cannot point to different handlers
Improvements to module loading/activation log messages
Make unloadAll() in ModuleService more resilient by verifying loaded modules exist
Change default template cache from concurrentSoftReference to ConcurrentReference to avoid auto cleanups
Default route names to pattern when using route()
New router method: apiResources()
to allow you to define resources without the new and edit actions
Update elixirPath to allow for many permutations of filenames and arguments to avoid cache collisions
Ability for the response setPagination()
to use any incoming argument for storage
Move onRequestCapture
after default event capture to allow for consistency on the capture
Deprecate declaration of multiple resources on a single resources()
call
Improve routing DSL to allow for different HTTP verbs on the the same route to point to different events or actions
Announce onException
interception points for async interceptors
experimental web mapping support to allow for modern app templates with assets outside of the webroot
Ability to pass in the domain to test executions in via integration testing
Enable automated full null support via github actions
ScheduledTask new getMemento
() to get the state of the task
Schedulers can now get the current thread and thread name: getCurrentThread(), getThreadName()
as private helpers
New controller method: getUserSessionIdentifier
() which gives you the unique request tracking identifier according to our algorithms
New coldbox setting identifierProvider
which can be a closure/udf/lambda that provides a unique tracking identifier for user requests
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
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