Migrating from ColdFusion MX7 to ColdFusion 9. Any issues? - coldfusion

I'm planning a migration on a server from ColdFusion MX7 to ColdFusion 9. Does anyone know which steps I should take in order to achieve this without major issues? I can't find anything on the web that talks about this and I don't want to jump into this task without knowing what I'm up against.
Any suggestions, link to articles, etc. would be very much appreciated.
Thank you!

By and large, Adobe (and Macromedia before them) have gone to great lengths to ensure backward compatibility where appropriate; so the rule of thumb is that you should be fine.
First and foremost, I would make use of ColdFusion's Code Compatibility Analyzer. It is available as part of the free Developer Edition, if you want to check before upgrading.
You can find it in the ColdFusion Administrator, in the Debugging & Logging section, as "Code Analyzer".
As it says on that page:
The Code Compatibility Analyzer helps migrate your applications to ColdFusion from earlier versions of ColdFusion.
The Code Compatibility Analyzer reviews the CFML pages that you specify and informs you of any potential compatibility issues. It detects unsupported and deprecated CFML features, and outlines the required implementation changes that ensure a smooth migration.
If the Analyzer doesn't find any issues, I would then encourage you to install the developer edition and run your unit tests. (You have unit tests, right?)
If you don't have unit tests, your only other option is just to test everything manually. Good luck!
One final approach is to read the release notes for versions 8 and 9, as well as the 8.1 and 9.1 point-releases. Adobe and Macromedia were meticulous about documenting precisely what changed, which should prove helpful for you. The release notes are available as PDF for both versions 8 and 9 from Adobe.

We've just recently completed the exact same upgrade, going from CF 7 to CF 9. We didn't encounter any major issues even with old application dating back to CF 5.
As Adam pointed out the Code Compatibility Analyzer is great to find potential issues such as new signatures for existing functions or scoping problem with the new local scope.
You don't want any errors as those as sure to break with CF 9, after fixing the errors you should be left with a bunch of warnings, check them to make sure it will still do what you intended. You should not ignore them and make sure you understand the implication of ignoring one.
This page by Josh Adam's http://blog.joshuaadams.com/index.cfm/2008/9/4/Upgrading-from-ColdFusion-MX-to-ColdFusion-8 has a lot of good resource on upgrading CF in general. It's for CF 7 to CF 8 but most of it still applies to CF 9.
Before starting, the most important step of all would be to backup everything. You'll want a quick way to go back to CF 7 if you ever need to so you should have a copy of the unmodified code, configurations and CFusionMX/jRun directory. I just ended up ghosting the machine in case.

Related

ColdFusion 5 setup files

I am trying to install ColdFusion 5 but it looks like data2.cab file is missing from my copy. I understand on Adam Cameron's Dev Blog he had a copy of Coldfusion 5 from the document he wrote about installing it on Windows 7 64bit. Does anyone have a copy of the software please?
You can find installers for older versions of ColdFusion on a community maintained site: http://www.cfmlrepo.com/
I doubt you'll be able to get it up and running reliably as it's a 32-bit installer and won't run on modern Windows. It's pre-Java, so you'll also have issues with C compatibility for things like custom CFX tags. If you've got an old OS on a server somewhere, maybe you can do something with it.
What problem are you trying to address? Working on a legacy application? CF 5 should no longer be running any kind of production sites as there are a world of security issues given the modern Internet.
If possible, I'd suggest trying to run the code on the open source Lucee CFML engine https://www.lucee.org/. Depending on the complexity of your application, it won't just be a matter of setting up data sources and running the code. But in the long run, if this app needs to exist for a while more, it'll be a safer and less expensive solution.
If you have more questions about CF 5, you'll probably find more help on the CFML Slack channel. You can get an invite here: https://cfml-slack.herokuapp.com/

What could break when migrating from Adobe ColdFusion to an alternative CFML engine?

We are currently using Adobe ColdFusion 9 for a rather large application. We are thinking about moving to Railo or Blue Dragon.
What problems will we run into?
Will it require a large amount of refactoring or will most CFML code just work on the new system?
Do alternative engines provide support for most all official tags, or are they more limited?
In short, how divergent are these alternatives from the official language?
Is there anything we can do to make this process less painful (like upgrading to CF11 first or removing/avoiding certain features)?
My question is similar to What Notable Differences are there between Railo, Open Bluedragon, and Adobe Coldfusion?, but while that is concerned with practical differences I'm asking more specifically about practicality of transition/implementation.
It all depends on your code and the specific Adobe ColdFusion functionality that you are using. For the most part each CFML iteration supports the same tags/functionality. Where they deviate from the Adobe product is usually documented and explained. You need to dive into your code base and look specifically at the features you are using and compare those to the CFML engine of your choosing. Or you can just download and spin-up the alternate CFML engine, drop your code base in it and see what breaks.
As an example from Railo - CFML Compatibility
Railo tries to adhere the CFML standard as good as possible, Still there are some differences like missing tags and functions or a slightly different behavior. This page and the ones below should describe the incompatibilities.
And I have to question what you are basing this comment on? "and especially it's very uncertain future with them". You are running ColdFusion 9. Adobe has implemented two major version releases since then (10 and 11) and are currently working on the future release.
There are two main areas that can prove problematic when migrating from Adobe ColdFusion to Railo:
Use of feature areas that are not supported by Railo
Sloppy CFML code
The former includes integration with Microsoft technologies, such as Exchange and Sharepoint, as well as Office document manipulation; PDF forms and some of the more sophisticated document manipulations; UI "widget" integration. There are third party extensions for some of the Microsoft integrations, e.g., cfSpreadsheet, but for PDF-related stuff you'll need to roll your own using Java libraries (PDF forms and high quality HTML to PDF conversion are Adobe specialties so be prepared to do quite a bit of work in your migration if you rely on these). As for the UI "widgets", you're better off doing that the "right way" so if you rely on those, you should read ColdFusion UI The Right Way.
The latter is a harder issue to nail down. The differences are not well documented - except in experience posts to mailing lists and blogs by people who've made the transition to Railo - but they include things like:
Using scope names as variables (Railo treats scopes as reserved names for performance reasons)
Embedding comments inside tags, e.g., <cfif x gt y <!--- check boundary --->> (I've seen things like this in older CFML code and was surprised it worked).
Reliance on automatic creation of nested struct elements, e.g., a.b.c = 0 when a has not been declared.
Reliance on long-deprecated features, e.g., parameterExists().
There are many other small differences: Railo is generally stricter about syntax and semantics than Adobe ColdFusion, and often those decisions are driven by performance concerns in that compatibility with Adobe ColdFusion would make Railo slower.
Full disclosure here: I have used Railo pretty much exclusively for five years and I used to run the US arm of Railo's consulting business. That said, you need to consider that Railo is a small company (despite the backing of five fairly large former Adobe partners) with just a handful of people working on the engine, and very little awareness of the product outside the more leading edge portion of the CFML community. By comparison, Adobe have a large team and a marketing budget. Your concerns about the difficulty of finding developers will not be addressed by switching to Railo - to gain access to a larger developer pool, you'd really need to switch to a more popular language, not just a different engine.
Finally, a word about Blue Dragon's engine, specifically Open BlueDragon: the maintainers of that project have stated publicly several times that compatibility with the other engines (Adobe, Railo) is not a primary concern for them, and indeed there are a lot of modern language features that they still don't support or at least don't support in a compatible manner. Last I checked, full-script components were on that list despite having been supported in Adobe ColdFusion and Railo for many years (by which I mean using component { ... } rather than the <cfcomponent><cfscript> .. </cfscript></cfcomponent> form). The BlueDragon dialect of CFML has been steadily diverging over the years so unless you have very old school CFML, that would still run on CFMX7 / ACF8, you probably won't have much success trying to migrate to Open BlueDragon.
There are a couple good answers here and I appreciate the advice given in them. When I asked this question I was looking for something a little more specific, so now that I've had the chance to really play around with migrating our app to Railo I thought I should come back and list out the issues we've run into and, just as importantly, the severity and workarounds. Hopefully this will help others considering making the jump:
cfMessageBox:
cfMessageBox is not a supported tag in Railo. The best solution we've come up with is to create a new custom tag called MessageBox.cfm, then drop it into “{railo-install}/lib/railo-server/context/library/tag/”. This will allow it to be recognized as a core tag and referenced via “”, which saves us from updating hundreds of templates that call it. This, of course, requires us to create a message box custom tag from the ground up.
cfDiv:
cfDiv seems to be throwing a JS error when used to bind to a JS function. I'm going to guess that this is because JS binding is not officially supported (given that I can't find any reference in the official docs), and while ACF allows it as delayed execution, Railo simply doesn’t accept it. We could just create a custom tag that generates a JS setTimeout as described in (1) above, which solved our problem, but applications that actually use this tag for its intended purpose may have a more difficult road ahead.
cfWindow:
There appears to be limited support for cfWindow in Railo. Specifically, new windows need manually shown, and the destroy methods do not exist. Various other bugs appeared as well. We decided that it made more sense to just move to JQuery based modals.
cfLayout:
cfLayout support is questionable. It is based on JQuery and not Ext-JS like ACF’s version. This causes a problem because we run JQuery 1.10 right now and the built-in tag doesn’t appear to work beyond JQuery 1.8. In fact, I could not find any JQuery version within which the tag worked perfectly. We decided that it may be best to, again, just write our own custom tag based on JQuery.
cfDocument:
cfDocument works differently in Railo and seems to require more strict HTML. I found a lot of helpful information here, though as of yet I haven't actually gotten any of my cfDocument calls to work as expected.
Relative cfLocations:
cfLocations that began with a “../” and backtracked beyond the webroot would throw a weird Java error. This ended up being a bug in Tomcat, and was patched by the Railo team in version 4.3.1.003. If you download an older Railo version you may run into this issue and need to update all of your cfLocation calls.
Oracle Thin Client:
Our database guy reported to me that he setup the Oracle Thin Client, because the OCI client is not natively supported in Railo. I found this, which might be relevant, but I don't have the expertise to say for sure.
Documentation:
ACF Livedocs are sometimes aggravating as they don't touch on the more important intricacies of how some tags are implemented, but Railo's version is the definition of minimalist. I think it's fair to say that Railo has no docs specifying each tag and function and that they leave you to rely on Adobe for that, which causes a serious issue when you need to know how the two implementations differ.
In the end it seems like, as predicted by previous answers, the UI tags were the bulk of our issues. Based on previous comments I was hoping for better implementations of them that may just require a tweak here and there, but (at least for our needs) the Railo versions seem borderline non-functional and it looks like we would need to replace them completely. For us, this may not be realistic, though we are still tossing the idea around.
To be fair, here are some of the good points from our research and testing:
Performance:
Although compatibility problems have prevented me from doing much performance testing, initial spot checks show approximately a 50% decrease in execution time for most pages.
Debugging:
The debugging options in Railo are quite amazing. There are far more options for formatting, including specifying different formats for different developers (IP addresses). One incredible feature is the inclusion of a comma delimited list of query fields that were actually used in the page: this could allow you to effectively develop based on a "select *" query and simply copy and paste the fieldlist into the query at the end of development, which would save a lot of time with views as large as the ones we're using.
Cost:
This is one of the larger reasons we decided to look into alternatives. Switching just a few Enterprise licensed ACF servers over to Railo would save $20k+ over upgrading to the newest version of ACF. Further, with the performance increases you could see an even greater savings in hardware requirements. A side effect of this point is that one can keep far more up to date without the constant cost/benefit analysis of licensing costs holding up upgrades.
Support:
Without a support contract, it doesn't seem like Adobe responds to user concerns. I've had a production impacting bug reported since ACF 9 which still hasn't been fixed. Yet the Railo community is one of the most helpful and responsive I've ever seen, and developers have even responded directly to concerns and bug reports I've raised.
Longevity:
This is a highly opinionated point, of course, but while Adobe seems to be relegating ACF to the shadows more and more with each new version, Railo appears to be dedicated to growing the community. Combined with its open source nature I think this makes it a safer bet for future support in the long term, even if that support is just us taking development into our own hands when needed.
For a number of reasons, including divergent CFML compatibility, we did not even get to the testing stage with Blue Dragon.

How hard will it be to upgrade a ColdFusion application from 5.0 to 8.0?

I have a Windows 2000 server running ColdFusion 5.0 and one rather large legacy application. The original developer has long since come and gone.
The server needs to be retired, and none of the ColdFusion media can be found. The course of action will be too purchase ColdFusion 8 and use that (Unless anyone has a suggestion on an alternative).
Can anybody comment as to how much backwards incompatibility exists between ColdFusion 5.0 and 8.0? Will I be able to just copy and run the website or will I need to trawl through the code changing syntax or references?
Within the ColdFusion Administrator is a Code Analyzer for help with situations like this.
Download the (Free) ColdFusion 8 Developer Edition
Open up the Administrator and go to Debugging & Logging > Code Analyzer
Run your code through that and it should identify any problems.
I'm not exactly sure on the amount of backwards compatibility, but you should download the developer edition and give it a test run plus its free since its only for development.
ColdFusion Developer
You shouldn't have any problems (insert standard disclaimers here . . . ) ColdFusion has always been excellent about maintaining backwards compatibility.
The only thing I know that has been dropped, and I think it was version 5 when it was dropped was doing
<cfset x = QueryNew()>
<cfif x>
has been depricated. So you might have to do some code trawling.
Another thing that may not be picked up by the Code Analyzer, and may or may not be an issue, is nesting of cfsetting enablecfoutputonly="True" or "False". It was a while ago, but I remember some crazy output issues with where those were set and where it was turned off.
The behavior of that setting with includes changed in that upgrade from 5, IIRC.
For ColdFusion 10, is Adobe documentation on the changes in since 5
Tag changes since CF5
New Functions in ColdFusion 10
Script functions implemented as CFCs
Script functions implemented as CFCs are all new since CF 9

What pitfalls await me when I migrate from CF6.1 to CF8 or Railo3.1?

Google does not really deliver much content (or my query sucks). Has anyone made the switch and can share the experience?
We found that when we upgraded to CF 8:
Carraige returns are stripped in plain text emails. We found we had to be explicit about line feed characters by creating a var like so <cfset CRLF = "#Chr(13)##Chr(10)#"> and inserting it in the plain text email where we needed the line feed. We eventually went to HTML emails.
Third party jar files caused problems due to the order in which jar files are loaded. Certain jar files must appear first in the java classpath as defined in cfroot/runtime/bin/jvm.config. This was a messy workaround and we have discontinued using that jar.
Also make sure to patch immediately to 8.0.1. We had a performance nightmare becuase of this issue.
Best of luck!
I haven't had any CFMX 6.1 apps to switch across, but Railo is definitely my CFML engine of choice.
Compatibility-wise, there is very unlikely to be any significant issues migrating from CFMX 6.1, and you can easily test this with the Express version - no installation required!
Railo can be stricter about certain aspects of CFML, so you might get a few errors if you exploit bugs/weaknesses with CF, but nothing really to worry about.
And, if you do get stuck on anything, the Railo mailing list is active with plenty of friendly helpful people who can help to get you going again.
We made the switch about a year ago and if you are talking about only on the code side, then the change from cf6 to cf8 shouldn't require any changes as long as your setup remains the same. One change is the way that CF handles verity collections, so if you make use of cfsearch then it might be something you look into. There are a number of improvements from cf6 that you should look to implement. The few that we have found especially helpful are cfdocument, cfimage, cfpdf, and cffeed. Here is a good link with other key points... http://www.adobe.com/products/coldfusion/upgrade/
If you are upgrading from CFMX 6.1 to Railo 3.1 almost no problems should occur. There are some things that we do not support (like CFREPORT or C++ CFX tags). Besides that it should be very easy to migrate existing CFMX 6.1 code over to Railo. By default Railo is configured to be as compatible as possible with CFMX.
There are some other things you might watch out for:
If you create a struct like this in CF: <cfset a["image.x"]> you will be able to call that variable by using the "." notation, although it's misleading. So in CF you could do <cfoutput>#a.image.x#</cfoutput> whereas in Railo you would have to write: <cfoutput>#a["image.x"]#</cfoutput>
Inside functions creating variables in the local scope that are named like scopes will work in CFMX but not in Railo. So this: <cfset var url = "whatever"> will work in CF but not in Railo.
In Railo you cannot use the application scope or the session scope before it was initialized with cfapplication. Well in CF you couldn't either but there CF will create a local variable in the variables scope called "application" or "session". This sometimes leads to confusion.
Besides these things, it should go flawlessly. If you have of course any problems, just contact our Railo Google group or us directly at www.getrailo.com
Gert Franz
Railo Professional Open Source
I'm not aware of any depreciated tags or functions from CF6.1 to CF8. CF8 has been optimized for performance so you will most likely see an improvement in your application depending on what was used.
I successfully upgraded a large application from CF4.5 to CF8 with no problems. If the application consists of pretty straight forward use of ColdFusion tags and functions, you shouldn't have much problem.
However, since the developer version is free to use, you should really setup a test environment and determine the answer to this question yourself by testing your application. All datasources, custom tags, etc will have to be migrated and tested. If any CF6.1 applications used any of the lower level java api available in some things, you may need to test that thoroughly to make sure the underlying implementation of the coldfusion hasn't changed and fix what's necessary.
As for Railo3.1, there may be some tags or functions not implemented yet. You will again need to setup a test environment and determine this yourself. Somewhere on the Railo site there should be a list of compatibilities between the difference versions of CF and Railo.

Is OpenBD or Railo a viable replacement for ColdFusion?

Has anyone here had any experience with running OpenBD or Railo in production? We have some legacy CF6.1 apps that need to be hosted somewhere and I'm wondering if OpenBD or Railo is stable enough for production use, won't require a great deal effort to migrate to, etc.
I'll chime in as the 'Adobe' guy and say that yes, both OpenBD and Railo are viable CFML engines. The main hurdles are around CFML compatibility. For the last decade Allaire/Macomedia/Adobe has been driving the CFML standard, but we've formed an open CFML Advisory board made up of various experts in the field to help drive the future of the language.
Today it seems that ColdFusion 7 is the foundational standard. From there the CFML standard seems to splinter between vendors. ColdFusion 8 added a number of exclusive features that haven't been added to the other engines and vice-versa with Railo and OpenBD. In the future, the CFML Advisory should solve this problem.
Using ColdFusion as the standard, I find the following two link to be the best places to understand the compatibility differences.
OpenBD Compatibility
Railo Compatability
Here is the url for the CFML Advisory group. They just started the site so there isn't too much info up there yet.
OpenCFML.org
The CFML compatibility in Railo is a major focus for us. If there are things in Railo that aren't compatible with Adobe CF, then please let us know about them and then we'll try to fix them asap. We are of course trying to get all the requirements of the CFML Advisory Committee implemented in Railo 3.1.x so that we can call ourselves CFML 2009 compatible.
AFAIK an engine should implement the core and the extended core to be called CFML 2009 compatible, but I guess the Advisory Committee hasn't agreed on this. In fact the vendors (like we are) should obey these standards and implement them accordingly.
If of course you experience any problems, just let the Railo Google group know or contact us at www.getrailo.com
Gert Franz
Railo Professional Open Source
Both are on par with CFMX 7 compatability so you shouldn't have any problems migrating a cf6.1 site to either.
Be for warned through that OpenBD DOES NOT support the CFDOCUMENT tag so PDF generation is going to be a problem. Railo on the other hand does.
Railo has an express version, which doesn't require an install and makes it real easy to see if an existing application works with it or not.
OpenBD also has a download and ready to run version, though I haven't tried it out, it should be as easy to setup as the Railo Express version.
It seems that there is project started for OpenBD to integrate the Flying Saucer project as a replacement for CFDOCUMENT support. More can be found here about this.
Absolutely! Both are enterprise class solutions and shouldn't pose too many problems. As rip747 mentions there are copies you can download to quickly test your applications compatibility.
As for performance it's generally believed that Railo is the fastest of the three engines while BlueDragon is the slowest. Although it's not currently in production I'm developing an application against Railo 3.0 and intend to deploy to Railo 3.1 once it's released.
Support for cfdocument will be included in the next "major" versioned release of OpenBD.
Just to give folks a bit of background on cfdocument support in OpenBD, a commercial library was used for cfdocument in New Atlanta BlueDragon, so that had to be removed when OpenBD went open source. The "hooks" are still in the OpenBD engine, however, so it's really just a matter of implementing the underlying functionality using an open source document engine, of which there are many.
I think replacedirect.nl recently migrated their webshop to railo.
Railo virtually has no documentation. It does not seem to be a priority for the core team, they have not managed the Railo open source project well. It is a case of lost momentum due to incompetency.
Railo is quite difficult to deploy on account of very weak documentation and consequently cannot be taken seriously. Furthermore the tag and function tags are empty when you scroll down to usage examples. This open source project and the team running it are a joke, completely out of touch with the recurrinfg complaints of install/config difficulties over the past 2 years.
Stick with Adobe Coldfusion which has good documentation or switch to another language.
Rob, mind if I try to solve your problem by providing a different solution than your question asks?
In that you mention an interest in hosting, just keep in mind that if you mean shared hosting, then you don't need to worry about the cost of the CFML engine. That will be born by the hosting provider, and amortized over the folks on the server. As such, you will find many low- (and even no-) cost CF hosting providers running on Adobe CF (and you'll find a range of them running different versions to suit one's taste, from CF 6, 7, 8, or 9, as I write today.)
There are various lists of CF hosting providers. I offer one (and also provide pointers to still other lists) at a category of my CF411 site: http://www.cf411.com/#cfhost