ColdFusion Summit Notes: ColdFusion For the Next Decade, Rakshith Naresh

October 03, 2019

Significant progress in new features in the language
CF 2020 - see how it’s evolved in the last few months.

Next year will be the 25 year anniversary of ColdFusion

At a crucial juncture in product transformation right now

Where is ColdFusion Headed?

if CF will stay relevant, it has to play in the space of containers, serverless, and the cloud

By 2022 90% of all new apps will feature micro-service architectures that will provide the ability to design, update and leverage 3rd party code

By 2022 35% of all production apps will be cloud native

By 2022 the top 4 clouds will host 90% of PaaS/IaaS deployments, while firms will work to avoid lock-in on 60% of their apps via multicloud - lead common denominator and cloud-native strategies.

(Source: IDC FutureScape: WorldWide IT Industry 2019 Predictions)

CF Wants to Be A Modern Platform

  • Coud Native
  • Microservice apps

Vision:

  • Modernization
  • Cloud
  • Micros-services

Micro-service support

  • Massive reduction in installer size
  • new installer - 1 GB reduced to 50MB
  • in that ZIP, you’ll have CF runtime as well as package mgr which knows how to get additional modules in

Modularity

  • Breaking up CF into tiny modules
  • Everything right now is baked in
  • PDF could be 1 module, schedule could be 1 module, .NET integration could be 1, etc.

CommandLine Modularization
and GUI based installation

can do “list” in CLI, and it will list the modules available
if I try to use, say, scheduleler, it will alert me saying that module is not available if i haven’t installed it yet.

“install scheduler” from CLI, and it will be installed

“uninstall scheduler” from CLI, will uninstall it

Rollout:
Full blown
Code scan
Runtime check

Significant shift in how this is done currently
will have a full blown “install all the modules” install option if you want it

Code Scan - scan your app code, will make a config file with a list of modules that your code needs, so it installs all the appropriate modules, but not unused modules

Runtime Check - maybe, still deciding on this one

Configuration Tool

  • CLI based tool
  • All your settings in 1 JSON file - tomcat, JVM, neo-* xml files, etc.
  • Show, set, add, list, import, export, transfer, diff - commands
  • Docker images will honor the JSON file

Beyond CF 2020

  • centralized config and administration
  • not just CLI, the next step would be a centralized config
  • instead of every server having it’s own CF Admin, have 1 Admin that manages all the nodes
  • not just server settings, but app settings as well
  • but not for CF 2020, maybe a later version

Cloud

  • On AWS and Azure
  • will have multi cloud common interface across various types of storage
  • Storage
  • Database
  • NoSQL
  • Caching
  • Messages / notifications
  • Storage:
    AWS S3
    Azure blog
storageService = cloudService( this.blogCred, this.blogConf );

list all the roots that storage service has
root => bucket (for s3
root = > container (for azure blob)
rootList = storageService.listAll();

get a root reference from authenticated storage service, it wont create a new root

filename = “c:\some path to a local.jpg”
key = “key1”;
root = storageService.root( “rootpoc” );
uploadRequest = { “srcfile” : filename, “key”: key };
uploadResponse = root.upoadfile( uploadRequest );
//list all keys in teh root
keys = root.listAll();
WriteDump( keys );
// list all keys starting w/ prefix
listRequest = { “prefix” : “foo” };
keys = root.listAll( listRequest );
writeDump( keys );

can also download a requested file, etc

NoSQL -
MongoDB
DynamoDB

modern interface for these coming, no longer will you have to use Java code to get to them

// retrieve database
db = mongoService( “cosmos” ).db( “mydb” );
collection = db.collection;
collection.drop();
collection.insert();
collection.insertMany();
collection.find().foreach();
collection.find().skip(1).limit(1).toArray();
// pass in a key and find the first entry available, etc
collection.find().first();
collection.distinct();
collection.deleteOne();
collection.deleteMany();
collection.drop();

virtually all the mongo db functionally will get exposed and made available

// getting a Dynamo DB
dymamo = cloudService( credentials, config );
// make yourTable Schema structs here
// then just do
dymamo.createTable( structOfTableSchma );
dynamo.putItem();
dynamo.getItem();
result = dynamo.query();

Messages / Notifications

  • SQS - consumer/notification style service
  • SNS - more of a pub/sub style, 1 thing that publishes, many subscribers
  • Azure Service Bus - performs both of the above

SQS

sqs = cloudServie( this.credentials, this.config );
sqs.createQueue( “my queue” );
sqs.sendMessage( message );
sqs.receiveMessage( metadata );
sqs.deleteQueue( .getQueueURL() );

Azure

svcBus = cloudService( credentials, config );
svcBus.createQueye();
svcBus.sendMessage();
svcBus.receiveMessage();
svcBus.deleteQueye();

SNS

sns = cloudService( credentials, config )
sns.createTopic( meta data );
sns.listTopics();
sns.deleteTopic();
topic.subscribe( metadata for an email addy, a phone number, etc );
topic.publish();

anything subscribing will get a notification when that .publish() happens

Serverless

  • Will have a tool in which you can build a Lambda runtime
  • Wrap your code in Lambda and deploy on AWS Lambda
  • build CF lambda runtime using the CF Packaged tool

Mondernization

  • really interesting language improvements in the recent Update 5 pack:
  • Some() and Every() functions for array, struct, query
  • Array function - splice
  • Query functions - append, prepend, new reverse, slice, insertAt
  • Lambdas using arrow / fat arrow operator

CFScript 2.0 - new streamlined syntax

instead of

cfhttp( ... ) {
cfHttpParam();
};

we can do:

new http( ... ).addParam( ... ).send();

Productivity

  • CFML’s inherent ability - do more with less
  • save setup time - scriptable config for server
  • and more

Performance

  • reduction in the start up time
  • because CF 2020 is significantly modularized
  • less than 5 seconds
  • Nimble runtime - less resources and scale better
  • will consume less memory, uses less resources, etc.

Security

Single sing-on support: SAML integration. Just use a couple functions to get that working:

if( isDefined( “form.saml_login” ) )
{
relaystate = “page”;
idp = {};
idp.name = “kta_url”;
sp = {};
sp.name = “okta_url”;
}

to get the authenticated name:

verifySAMLResponse().nameid;

will have a CF 2020 Alpha available soon

pre-release participation survey:
https://www.surveymonkey.com/r/CFPR2019