I would recommend upgrading in stages – because functionality has changed over time in a way that is mitigated by doing specific upgrades.
In particular, upgrade to each of these versions in order, run full tests at each step, and make the necessary adjustments:
When crossing major version lines, there are usually deprecations and/or removals of features (as other features have replaced them). In each case, the N.5 release introduces a migration path that will log warnings to the console about changes coming in the N+1.0 release and you’ll need to address those warnings before moving on (because they will indicate a feature change/removal in the N+1.0 version that will otherwise break your code!).
You’ll want to read through several of the release-related articles here http://framework-one.github.io/blog/archives/
Pay particularly close attention to these:
And, yes, that’s a lot of work (four upgrade cycles with full testing and code changes) and half a dozen important blog posts to read in detail, along with associated change logs. That’s what happens when you don’t upgrade as each release becomes available – sorry!
Also check the system requirements for 4.0 / 4.1 – the supported releases of CF and Railo / Lucee have changed quite a bit: Supported Platforms
Sean Corfield -- (970) FOR-SEAN -- (904) 302-SEAN
An Architect's View -- http://corfield.org/
"If you're not annoying somebody, you're not really alive."
-- Margaret Atwood
"Deprecated: service() call requires suppressServiceQueue = false"
Please note that Release 3.0 will completely remove these backward compatibility options
<cfset variables.fw.service("content.getItemDetails","thisItem",{itemtype="page", uuid=rc.uuid})/>
The recommended approach is to switch to using DI/1 for service injection (the default in 3.0) and then changing the fw.service() call to an explicit call to the injected service.
So you’ll add accessors=true to the component tag in your controller CFC and add a property declaration for each service you expect to be injected:
component accessors=true {
property contentService;
… rest of your controller as-is …
}
And then that fw.service() call becomes:
rc.thisItem = variables.contentService.getItemDetails( “page”, rc.uuid );
That’s assuming that the arguments to that service are itemtype and uuid in that order, otherwise you can use:
rc.thisItem = variables.contentService.getItemDetails( argumentCollection = {itemtype = “page”, uuid = rc.uuid} );
(that’s from memory – it’s been years since I’ve looked at 2.x code)
Sean Corfield -- (970) FOR-SEAN -- (904) 302-SEAN
An Architect's View -- http://corfield.org/
"If you're not annoying somebody, you're not really alive."
-- Margaret Atwood
Could not find the ColdFusion component or interface framework.ioc.