Blog

ColdBox 3.0.0 M6 Released!

Luis Majano August 08, 2010

Spread the word

Luis Majano

August 08, 2010

Spread the word


Share your thoughts

I am super excited to announce the ColdBox Platform 3.0.0 M6 release! Why? Because it holds one of my favorite subjects......Caching! With this release we complete yet another standalone framework cycle with the introduction to CacheBox. However, we won't delve too much on CacheBox in this post as it is deserving of its own, so the next post is the announcement of the release of CacheBox 1.0. However, the major part of this release is CacheBox, so lets introduce this bad boy:

CacheBox is not only an enterprise level caching engine but also functions as a cache aggregator and API. You can aggregate different caching engines or types of the same engine into one single umbrella. It also gives you built in logging, events, synchronization, shutdown/startup procedures, visual reporting, interactive console and best of all a cache agnostic API. You can then build your applications based on an abstract API and then be able to configure the caches for your applications in ANY CFML engine and ANY version of that CFML engine. This gives you greater flexibility and scalability when planning and writing your applications.

The CacheBox caching engine has also been revamped with new events and also have flexible and customizable object storages. From concurrent object stores to simple JDBC replicated storages. We also opened our storage and cache provider API so you can even build your own and extend the framework. We have also created a reporting and debugging console for the cache engines, so you can interact with it right from your own development application. You can see the contents of the cache, announce evictions, removals, and so much more.

For the initial CacheBox release we have included 3 caching providers: CacheBox native, ColdFusion 9.0.1 EHCache and Railo Caching (Experimental). This means that we can actually report and debug the EHCache included in ColdFusion 9.0.1. We also tap into EHCache's listeners, configuration and native java statistics and even the distributed terracota pieces. We are also working on a standalone EHCache provider so it can be used in any version of CF, but you will have to wait for that one. Here are a few screenshots to tease you (Not really, since you can just download it now and use it):

 


So there you go, a 1 paragraph intro to CacheBox. The next post will definitely showcase all of CacheBox and its power. So let's get down to business and discuss M6. M6 is our latest milestone and the last milestone before our release candidate version. We only have 1 more framework to abstract out and that is WireBox, our dependency injection and AOP (Aspect Oriented Programming) framework. So stay tuned as we open up our roadmap for WireBox real soon. After almost a year in the works, 3.0.0 is almost there and I can honestly tell you that my vision for ColdBox is almost there. We will now have 5 standalone framework to help you in a whole gamut of not only simple but enterprise ColdFusion applications. I am really excited about the future of ColdBox and ColdFusion.

As for what's in M6, here is a recap of the major sections of this release or please see our milestone page for an in-depth look at our tickets:

CacheBox

I already mentioned a brief intro and we will discuss it in detail in another blog post. Not only is is standalone but it has been incredibly expanded for this release, so stay tuned.

CacheBox ColdBox Enhancements

By default, all ColdBox applications can leverage CacheBox in their applications. All interceptors, handlers, plugins, layouts and views have access to cacheBox as a member of the variables scope. We also have several ways to configure CacheBox but we have now split our basic ColdBox application cache into two distinct caches: object caches and event/view fragement caches. This means that every ColdBox application by default gets two distinct caches called: default and template. The template cache is used for event and view fragment caching and can use ANY provider or you can customize it to your liking. This is extremely powerful as now you can choose different strategies for event/view fragment caching. You can distribute them via our simple JDBC storage, or store them on disk or anywhere you like.

The default cache is for is used for internal objects, data and by WireBox for time persisted services. However, WireBox will introduce some enhancements where you can choose the named cache to use for time persisted services.

getColdboxOCM([name=default]) can now take in the name of the cache to retrieve from CacheBox. Please see our compatibility list below as the expiration and clearing of event/view elements must now talk to the template named cache.

Modules External Locations

You can now define a setting called ModulesExternalLocation that can be an array of locations where you can tell ColdBox where to find modules and load them. You are now no more restricted to modules being in one location, you can have them anywhere in the server.

Module Conventions

Each module you build can now have its own custom conventions. You are no longer tied to our decision. Man, people are really pick and looooove personalization. So there you go!

ORM Event Handler

The ORM event handler has now been updated to extend the hibernate interceptors into ColdBox land. This means that any of the hibernate interception points have an interceptor announcement in your ColdBox application. This means that you can create decoupled chains of executions, or interceptors, the ColdBox way and still have them tied to hibernate. Please read our ORM Event Handler guide for more in detail descriptions. We have also added a ORMPostNew interception point that occurs when new entities are created via our base ORM services. This is a great way to listen when entities are created which ColdFusion at this point does not offer.

ORM Service Enhancements

Thanks to so much community involvement our ORM services have been expanded and really tightened. We have added Hibernate DLM style executions for deletes and bulk updates. So you can now leverage the power of HQL without even knowing HQL. However, please read about HQL, it is really powerful. We have also added the capability to do deletes and finds using lists a feature that is done natively via java.

ORM Entity Dependency Injector

We have expanded our Autowire interceptor to allow for the dependency injection of ORM entities. That's right! You can now create even more richer domain objects by giving them some DI goodness. All you do is make sure the ORM Event Handler is enabled and turn on the entity injector in the autowire configuration. That's it, you can even include and exclude entities from the autowiring inspections

ORM Entity XML Converter

We have updated our XML converter and serializer to actually serialize ORM entities to XML. You can even serialize an array of entities into XML seamlessly via our renderData() methods.

ORM Entity Populators

We have open sourced our populators and now they are in the core standalone and usable in our ORM services. This means that you can easily populate ORM Entities from the following sources: XML, JSON, Queries, and structures.

WireBox Updates

WireBox is built people it is not yet standalone but it has been the core of ColdBox for over 4 releases now. Anyways, a few updates in the DI front. New autowire DSL for cachebox:

  • cacheBox = Inject a reference to cacheBox
  • cacheBox:{cacheName} = Inject a named cache
  • cacheBox:{cacheName}:{objectKey} = Inject an object from the named cache

We have also added / as the last location to search for objects via our package scanning feature. This means that you can use our getModel() method via WireBox to simulate createObject() but with the added goodness of dependency injection and AOP. This means that you don't even need a configuration file to get dependency injection on ANY object.

New Remoting Utility

We have added a remoting utility class that can help you clean and get the output buffers from ColdFusion. Hopefully the community can collaborate more on this utility.

New SuperSimple Application Template

Please see our post here for more information on our new application template. Basically a dead simple MVC only application template for newbies.

COMPATIBLITY Warning

The following are subject to compatibility and not backwards compatible:

  • Setter injection via WireBox is now subject to strict mode. This means that the setters MUST have an inject annotation or metadata in order to be identified. We prefer this approach than rather inspecting ALL setters in an object and then trying to match them. The annotation creates a nice demarcation for dependency injection that is both highly visible and documentable.
  • LightWire refactored from the /coldbox/system/extras/lightwire folder to the /coldbox/system/ioc/lightwire folder
  • JavaLoader refactored from the /coldbox/system/extras/javaloader folder to the /coldbox/system/core/javaloader folder
  • If you use a cacheEngine structure in your programmatic configuration file then this will use our archived caching engine instead of CacheBox. If you remove the element, then CacheBox will be used with the default settings.
  • If you use the <Cache> element in your xml configuration file then this will use our archived caching engine instead of CacheBox. If you remove the element, then CacheBox will be used with the default settings.
  • CacheBox is ColdFusion 8 and above ONLY! If you are on ColdFusion 7 then you will be using our archived compatibility caching engine.
  • If you are using CacheBox in your application and you where using the old clear/expire methods for event/view caching you will need to pass in the name of the cache (template) to the getColdBoxOCM() method. If you are injecting the cache using the wiring DSL of coldbox:cacheManager you will need to update it to cacheBox:template.

Please note that the archived caching engine is already deprecated and will be removed by 3.1 when we drop ColdFusion 7 support. ColdBox 3.0.X is the last release that will support ColdFusion 7. That's it folks, as for the major updates. However, please look at our following ticket table to get you a better idea of what's included. Again the best place to follow is the milestone page.

M6 Tickets

880 getModel() optional call to init() Fixed
932 New CacheFactory for multi cache registrations and usages Fixed
933 New ColdBox Cache Provider Interfaces and Architecture Fixed
991 In the modules config, the includes should be an ordered list of modules. This way they load in order of declaration Fixed
992 Bug on entityService DSL when not using an entity name Fixed
998 Add CreateDirectory method to File Utility Plugin Fixed
999 EnvironmentControl Calling appLoader.getJSONUtil() which does not exist. Fixed
1001 ormeventhandler updated to now also fire coldbox interceptions on the same orm events prefixed by orm Fixed
1012 new module setting structure: conventions, so a module can define its own conventions Fixed
1013 Ability to choose your own mail tokenizer tokens via method: setTokenMarker() or a setting called : mailservice_tokenMarker thanks to Jim Cummings Fixed
1014 getModel() new argument dsl so you can get models using a specific dsl instead of a name Fixed
1016 mailservice add tokenizations to multipart messages Fixed
1017 Ability to add the empty namespace to wirebox so ANY CFC can be located at the end of the external package lists Fixed
1018 encapsulate the libpath locations in the javaLoader plugin instead of the loader service Fixed
1019 Update javaloader libpath setting to accept an array of locations to classload Fixed
1020 New interception ORMPostNew fired whenever a new entity is created via the ORM base services ONLY Fixed
1021 autowire interceptor new settings: entityInjection, entityInclude, entityExclude. Used when the ORM Event Handler is enabled so it can do Dependency Injection on ORM Entities Fixed
1023 requestContext new method: setHTTPHeader() so you can easily set http headers via the event object Fixed
1024 new ses regex dsl for placeholders: /regex:(full regex here)/ Fixed
1025 SES update: ability to define the default route via a single "/" as the pattern Fixed
1026 remote proxy announceInterception() double nesting of interception data instead of just passing through the structure Fixed
1027 messagebox alternate behavior from previous versions when dealing with clearing of the messages until they are rendered. Fixed
1028 mailService and support classes are now standalone usable in the core package Fixed
1035 enhance the flash vars with a new argument: autoPurge(boolean) defaults to true, else user is in charge of purging the flash contents Fixed
1039 new populateFromXML() utility method for our populators Fixed
1040 XMLConverter can now serialize ORM entities to XML with ANY type of relationship, this enhances renderdata() type XML also Fixed
1041 BaseORMService new populate() method to do simple struct to entity populations Fixed
1042 event.renderData() now supports types of HTML and TEXT Fixed
1044 new RemotingUtil CFC to help with remoting calls Fixed
1045 removal of ModulesLocation in favor of multiple external locations (COMPATIBILITY < M6) Fixed
1046 Addition of ModulesExternalLocation setting to allow for an array of external locations to find modules and load them Fixed
1047 better cache entry namings for domain objects Fixed
1048 optional routing parameters can now have default values if they do not come in Fixed
1050 ormservice new DLM style executions for deletions Fixed
1051 ormservice new DLM style deleteAll() to delete all entity records of a specific type Fixed
1052 ormservice deleteByID() updated to accept an array of IDs to delete. It also now uses DLM style executions via hibernate Fixed
1055 fix for processState() cfsetting and output only was not deactivating correctly sometimes thanks to Mark Mandel Fixed
1056 setter injection is now strict when in autowire mode, meaning only setters annotated with @inject will be wired (COMPATIBILITY) Fixed
1058 new renderData format type: jsont, basically json with application/text shorthand notation: event.renderdata(type="jsont") Fixed
1063 enhanced lightwire refactored to /system/ioc package (COMPATIBILITY) Fixed
1064 refactoring of /system/extras/javaloader to the /system/core package (COMPATIBLITY) Fixed
1066 new cacheBox DSL to do automatic injections from cacheBox Fixed

Add Your Comment

Recent Entries

Partner with BoxLang and Ortus at Into the Box 2025: Empowering the Future of Modern Software Development!

Partner with BoxLang and Ortus at Into the Box 2025: Empowering the Future of Modern Software Development!

At Ortus Solutions, we’ve always been at the forefront of innovation in the ColdFusion ecosystem. From pioneering modern ColdFusion practices to developing cutting-edge tools and frameworks, we’ve been passionate to help and sup[port the community into shaping the future of web development.That’s why we decided to build BoxLang, our new JVM programming language that not only builds on the strengths of ColdFusion but takes modern software development to the next level.

Maria Jose Herrera
Maria Jose Herrera
December 23, 2024
Why BoxLang When You Have Kotlin, Groovy, Scala, and more…

Why BoxLang When You Have Kotlin, Groovy, Scala, and more…

As we approach a stable release of BoxLang and our continued marketing reaches more folks, many have asked about its purpose. Why create a new language when the JVM ecosystem already includes established languages like Kotlin, Groovy, and Scala, to name a few.

Luis Majano
Luis Majano
December 18, 2024