Migrating from ColdFusion 2016 to Lucee

Hello everybody,

This is my first post in the community. As ColdFusion pricing continues to go up, despite using CF since 1998, I am considering migrating to Lucee, of which I have to admit I know nothing at all about.

Could anybody give me some insight into how Lucee compares to CF, as-in is it comparable to CF2013 for example, or is it just not possible to compare?

From what I have read, I’m optimistic that my code will work with no issues, as I only use the standard tags and nothing too complex within the code.

With that being said, are there any tools to validate the code will function or is it just a case of test…test…test?

Thanks

Mark

Don’t forget to tell us about your stack!

OS: ???
Java Version: ???
Tomcat Version: ???
Lucee Version: ???

Hi Aspirenet Welcome!

What do you mean exactly with that? Performance? Tag Support? Function Support? Since the Lucee dev team tries to keep ACF compatibility with high priority, it should work with standard cfml. But there may be differences here and there. Some of what I’ve heard most about here are issues:

  • cfpdf with having differences in the output/layout
  • cfchart

I also know that the Lucee dev team will not try to support buggy code that works in ACF: E.g. if for some reason your cfml code returns something in ACF that is just wrong, they/we will very likely tell you to correct your CFML code.

I hadn’t had any experience for quite a while with ACF now. But what I can see from the cfml community here, I’d say most of the CFML standard tag and function base just works. However, if your app has some fancy UI generating cfml tags like cfcalendar, cfgrid, etc (that is not recommended at all by the CFML community anymore), you might have some work to do.

You can find a list about all unsupported CFML tags and functions in Lucee here: ACF cfml tags and functions that are not supported in Lucee.

If you want to have a CFML list of the supported Lucee tags and functions, you can use the own Lucee code to retrieve it with:

<cfscript>
getTagList().cf.map(
    function( key, value ){
        dump( [
            "cf" & getTagData("cf", key ).name , 
            getTagData("cf", key ).status
        ] ) ;
    });

dump(getFunctionList());
</cfscript>

Note:

  • “deprecated” doesn’t necessarily mean it doesn’t work. At this point deprecated tags and functions (while all the important stuff just works) should be avoided whenever it’s possible.
  • What I’ve seen is that some of the (supported) fancy UI stuff doesn’t have a high priority for the Lucee dev team. Avoid it. Instead use one fancy maintained JavaScript framework or plain HTML5/CSS3 to do such stuff.

A very important resource for combability issues is JIRA:
If you want to see what compatibility issues Lucee has with ACF, the best is to check up and search in Lucee Jiras label “ACF compatibility” here:
https://luceeserver.atlassian.net/issues/?filter=-4&jql=labels%20in%20(acf-compat%2C%20compat)%20order%20by%20created%20DESC
You might find workarounds for your issue there.

Some of the best available migrations guides can be found here:

I haven’t heard of any. I think the best would be to have Testbox installed with all your code set up with test cases. But you probably won’t have that (just like I haven’t it myself). This example is another reason to start Test Drive Development myself.

However, if you face any issue, we all will be glad to hear about and try to help. Post it here, and somebody will chime in and give some usable advice, and others will find that for future migrations

Happy coding!

@aspirenet : how Lucee compares to CF, as-in is it comparable to CF2013

You mean 2023, right?

@aspirenet : is it just a case of test…test…test?

Yes, in any case.
Expect the testing to take months.

Thanks for both the replies. I have existing sites up and running right now on CF2016, and I’m developing a new platform again on CF2016. Unfortunately I need/want to get it up and running asap so I’m a little concerned of any learning curve/issues I might encounter that could delay me.

Somewhat of a dilemma, move the new build to Lucee, so I don’t have to go over it all, try to debug, or just build it and go back to it. Due to time constraints I think I’m going to have to do the latter and try to get it running once it’s built. So I’m not going to be able to get stuck into this for a few months.

I am somewhat optimistic that as my code is simple that I’ll be good, but you never know.

I was asking about comparison with the latest version of CF, the 2023 version, whoops, I see I put 2013, how time flies :slight_smile:

I’m stuck with JVM-11.0.8 on CF2016, I was wondering if Lucee uses the latest and greatest.

I’m trying to get a general idea of what I’ll have aside from the massive win of open source, if I move over with regards to performance and features, but as I only code at basic level using standard CF tags I’m going to guess I won’t notice from a feature standpoint, so it’ll just be about performance/security and how up to date it is with JVM.

Thanks

I switched from ACF to lucee in 2020. My applications were quite complex, but they all worked with very little tweaking.

1 Like

@aspirenet I bet you‘ll be very surprised in a very positive way. I remember when I switched over to Railo a good while back, most of the work was setting up the server (locking down OS, etc). All I had to do with my cfml code base back then was some workaround to get cgi.path_info working. It didn‘t take more then 10 minutes to fix it with a one liner and a search and replace. Today I would just copy the cfml code base over and it would just work, because that has been fixed for quite a while now. The second thrill was when the code went to production… couldn‘t believe the performance boost it got. Felt like a big hardware upgrade.
.
Also, there is a lot of stuff and guides that have been added to the docs in the past years. Many of the previous installation pitfalls have been documented, in the docs as well as here in the community forum. You shouldn‘t miss anything anymore. You just need to search the docs or google it. And if that doesn‘t help, post it here.

What I really like the most is, that you are directly in touch with the Lucee dev crew through this forum. They may not be able to answer immediately, but here you will very likely get help.

If you are developing a new application, use the admin just to help you export the configuration. Use the application.cfc or environment variables for the admin settings, or use commandbox cfconfig tool to backup/update the admim settings. It will make your application more portable.

Java 11 still is the recommended version in Lucee and the installer ships a dedicated Java 11 for runnning Tomcat/Lucee.

I just have an important request in case you migrate successfully: become a sponsor and adhere to the Lucees Open Collective to contribute to Lucee and CFML with an ammount you can afford, or that is compatible with your application or business. The Lucee projekt is a great cfml engine that deserves it.

1 Like

Thanks again for all the input. I’m keen to make this move and if I had to place a bet from what I’ve heard here now, with it being so simple I’d say my code will probably work :slight_smile:

I was surprised to hear that it’s running on Java 11, which is rather old now, and active support stops in a month Java/OpenJDK | endoflife.date . Are there no security concerns? Is anybody running successfully on a higher version?

1 Like

No concerns. Java 11 is LTS and has its security support officially until 30 Sep 2026 (see in your linked overview).

Java 17 is on Lucee 6 roadmap.
Please see Java 17 support status update

And see:
https://luceeserver.atlassian.net/browse/LDEV-3807

1 Like

Got it. I just read a good article on Oracles site explained the releases, I see why Java 17 is the next viable candidate.

https://blogs.oracle.com/javamagazine/post/java-long-term-support-lts

I’m sure it will all work out the first time.
The only problem I encountered was in the .htaccess rules as they are ignored by tomcat.
Of course you have to adjust to that. Also if you use nginx you need to configure it correctly.
At the cfml code level I didn’t have to change almost anything (apart the pdf that I had to respect a certain order in the parameters in cfdocument tag).

1 Like

Certainly sounding more and more like I won’t have any compatibility issues. I am running on Windows Server 2016, so should be good in that dept.

I thought I’d give Lucee a try using a cloned VM. I took a look at the hardware requirements ( System requirements :: Lucee Documentation )

I see that it does not list Windows Server 2022 (Standard edition). Does anybody know if there are any capability issues?

I did just test my current CF2016 with JVM 11 on WS 2022 and it appears to work just fine

Thanks

Should be totally fine on Windows Server 2022, haven’t heard of any problems

Great. I suspected that would be the case as the upgrade from 2016 to 2022 was seamless and ACF 2016 appears to also work flawlessly. I just need to figure out how to install it next :slight_smile:

The documentation, as this is an open source project is out of date.

It does RUN on Windows 2022, both GUI & non GUI, the install procedure is slightly different.

The only issue you will have with 2022 is depending on how you have installed it, be it “Desktop Experience” or command line experience.

You can use the express version to unzip and move the lucee files over to your windows device… Open up your file port(s)

“New-NetFirewallRule -DisplayName ‘LuceeRawIn’ -Profile ‘Private’ -Direction Inbound -Action Allow -Protocol TCP -LocalPort 8888”
“New-NetFirewallRule -DisplayName ‘LuceeRawOut’ -Profile ‘Private’ -Direction Outbound -Action Allow -Protocol TCP -LocalPort 8888”

Or configure what ever app proxy you want in front of it then start the service with .configure.bat and start.bat in \path\tp\lucee\

I just spent a little time looking at the documents and found that they were not complete when it came to the install. I like an interface so I do have it installed with desktop experience.

I’m planning on trying the installer shortly to see how I go. I’m not a hardcore guru dev, I can find my way through an installer, but if I have to get stuck into a lot of hacking and command prompt work to get it going it might be a challenge :frowning:

@aspirenet would be great if you could share your experience afterwards.

From what I can see… You’re a studied man in that you study things intensely before doing them. Everyone has their own way of going about things. Mine is to just do it. Just be committed and you’ll be fine. The only things I ran into in conversion around 2020 was compound statements in script. And I wasn’t doing a conversion like it sounds like you are. I’m rarely under time pressure so I get to play around a lot any you may have a more pressing idea of time. I just slowly worked my way over to lucee and haven’t looked back. Point being… I got to take my time… and I wasn’t stressed about anyting going wrong.

On compound statements I’m not sure if it was isolated to just script or not but it was compound statements. And, it was no big deal just reorder the statement or breakdown a level or 2 (small sacrifice) such as

FunctionA(FunctionB(FunctionC(String,“whatever”,“whatever”)));
typiclly redoring things would do…
FunctionC(FunctionA(FunctionB(String,“whatever”,“whatever”)));

My decision to come to Lucee was primarily driven by the Malicious and reckless behavior of Adobe. Price was a irrelevant. I was running enterprise an in perpetual fear of a license attack base on SAAS. Adobe as a company is a Straight Up SCAM. And the only reason I still have it loaded on a VM is to deal with legacy clients.

So, Dive in, and don’t look back. I don’t regret leaving ACF … AT ALL…

And the support here has been great. I apologize for not being more active.

@Jay.MC actually I’m more like yourself, jump in there and see where it takes me :slight_smile:

However, in this case I decided to gather as much info upfront so the jumping in there is not as painful. I’m not in a rush to do it. I’m playing around with a cloned server at the moment to test an OS upgrade from Win 2016 to Win 2022 and a SQL version update, so I thought now would be a good time to go all in and see where Lucee takes me.

I’ve replicated my game platform onto an unused domain and config’d it to function on that domain, so I’m able to give it a good test.

I’mn juggling lots of things right now, and might not be able to do a production release of this until late this month, but the testing in the clone I am doing now. I’ll be happy to report back how it goes and also update on any gotchas that I come across.

2 Likes

Stack

  • Microsoft Windows Server 2022 Standard edition (Desktop Experience)
  • Microsoft SQL 2017
  • Lucee 5.4.3.2
  • CF2016 (uninstalled)

I thought I’d give it a go today by utilizing an unused domain and replicating one of my active sites along with cloning the server so I could test it out.

Lucee installed with no issues, super easy. I managed to get an “OK” on a connection to my MS SQL, although as I’m not a guru it was a little worrying looking at all the options for a SQL connection.

Then the problem started, the site throws a 500 error.

I tried some simple code, setting a value to a variable and outputing and it worked. However when I did a simple cfquery it failed It was also failing on other parts of the code which I’ve not investigated yet, I think it was a CFFILE.

And this is where I’m a little stuck :frowning: