Welcome!

Linux Containers Authors: Stackify Blog, XebiaLabs Blog, Pat Romanski, Elizabeth White, Liz McMillan

Related Topics: ColdFusion, Linux Containers

ColdFusion: Article

A Wedding Invitation: CF & Java

A perfect marriage between ColdFusion and Java

If you missed this year's CFUN conference (June 26-27), you missed a lot. In addition to the great time spent meeting and talking with other ColdFusion programmers, Ben Forta gave a keynote demo of the next version of ColdFusion, code-named "Blackstone".

I haven't been this excited about the release of a version of ColdFusion in quite some time. Blackstone has new features for using Flash to produce very sophisticated, very user-friendly forms with advanced features such as tabs and accordions. It adds excellent support for producing PDF files from native ColdFusion code, and it introduces a new, very powerful report writer. And of course, it does all this with the trademark ease of programming for which we've come to depend on ColdFusion. It will, in short, make you a coding hero.

This makes ColdFusion the best presentation language available and this is important - very important - because to the users, the user interface is the application. I have been puzzling for some time over the question of where ColdFusion fits in the enterprise space increasingly dominated by the J2EE and .NET platforms, and with Ben's presentation I think I see how perfect a marriage ColdFusion is with Java.

Java is the proverbial 800-pound gorilla in the enterprise computing space. It runs on virtually every processor (given its "write once; run anywhere" ability) and is used for everything from running Mars rovers to cellphones to gas station pumps. But Java is primarily a server-side language, which is where it excels. Adoption of Java applets on the other hand, has slowed to a crawl.

ColdFusion - particularly the Blackstone version - excels at providing the presentation layer, but is much weaker than Java on the server side, where it lacks such Java features as constructors, interfaces, abstract classes, overloading, and a null object - all undergirded by Java's strong data typing that virtually eliminates runtime exceptions.

In this article, I want to demonstrate how ColdFusion and Java can work beautifully together. First, though, I must apologize for the ColdFusion presentation layer shown here. Due to space considerations, my presentation code is going to be woefully simple, but I hope it will show how easily ColdFusion can work with Java.

First, let's look at the Java code. I've used several of Java's features that ColdFusion lacks to create a more robust "domain model." (A domain model is a scale model code representation of the "domain" under study.) I start with a Pet interface. In Java, an interface provides the specification for a data type (including methods), but provides no implementation. Here's the code:


package pettingZoo;

public interface Pet {
	public String getName();	
}

Now any class that wishes to can declare itself to be of type Pet. The requirement, set forth in the Pet interface, is that all "implementing classes" must implement a getName method that returns a string. The Java compiler will ensure that all implementing classes will be well behaved.

Next, I'll create an abstract class, Animal, that won't be used to create actual Animal objects, but is meant to be used by subclasses, where it will provide a base of inherited code:


package pettingZoo;

public abstract class Animal {
	private String food = null;
	
	public Animal(String food){
		setFood(food);
	}
	
	public String eat(){
		return "Thanks for the " + getFood();
	}
	
	public String getFood(){
		return this.food;
	}
	private void setFood(String food){
		this.food = food;
	}	
}

Two more Java classes, Dog and Cat, will extend Animal while implementing the Pet interface by providing a getName method:


package pettingZoo;

public class Dog extends Animal implements Pet {
	private String name = null;
	
	public Dog(String name){
		super("kibbles and bits");
		setName(name);
	}

	public String getName() {
		return this.name;
	}
	private void setName(String name){
		this.name = name;
	}
}
__________________________________________
package pettingZoo;

public class Cat extends Animal implements Pet{
	private String name = null;
	
	public Cat(String name){
		super("fish nibblies");
		setName(name);
	}
	
	public String getName(){
		return this.name;
	}
	public void setName(String name){
		this.name = name;
	}
}

Next, we have a RoboDog class that, while not extending Animal, implements Pet:


package pettingZoo;

public class RoboDog implements Pet{
	private String name = null;
	
	public RoboDog(String name){
		setName(name);
	}
	
	public String getName(){
		return this.name;
	}
	private void setName(String name){
		this.name = name;
	}
}

Our last Java class, PettingZoo, provides a way of modeling a very simple petting zoo. It has a method that allows us to add a pet to the collection and another method to return all of the pets:


package pettingZoo;

import java.util.*;

public class PettingZoo {
	private List pets = null;
	
	public PettingZoo(){
		setPets(new ArrayList());
	}
	
	public void addPet(Pet pet){
		getPets().add(pet);
	}
	
	public List getPets(){
		return this.pets;
	}
	private void setPets(List pets){
		this.pets = pets;
	}
}

"But wait!" you say. "I don't understand all that Java stuff."

Well, that's the whole point. You don't need to. You're going to make use of a domain model written in Java to produce ColdFusion applications. The Java classes don't do anything by themselves: they just wait to be called upon. All you need to do is understand the API (the Application Programming Interface) for the classes you'll be using. In simpler terms, you need only understand what methods are available to call and what these will return. It's the same process you use when calling a built-in ColdFusion function (though with a different syntax). Java has a wonderful tool called "Javadoc" that automatically produces the API documentation you'll need from the underlying Java code.

With the Java out of the way, we can get down to our ColdFusion application code. First, I created an Application.cfm file:


<!--- set up application framework --->
<cfapplication name="CFandJavaDemo" />

<!--- create an application-scoped Java class, Petting Zoo --->
<cfif NOT IsDefined('Application.pettingZoo')>
	<cfset Application.pettingZoo = CreateObject('java',
	'pettingZoo.PettingZoo').init() />
</cfif>

We're creating an object called pettingZoo from the Java class, PettingZoo, and placing it in the application scope. Now, for a main menu from MainMenu.cfm:


<h1>Main Menu</h1>

<p><a href="NewPetForm.cfm">Create</a> a new pet to add to the Petting
Zoo</p>

<p>Ask each of the pets in the zoo for their <a
href="PetGreeter.cfm">name</a></p>

It looks like that shown in Figure 1. If the user elects to create a new pet, the NewPetForm page is displayed:


<h2>New Pet Form</h2>
<p>What kind of pet would you like to add to the Petting Zoo?
<form action="ProcessNewPetForm.cfm" method="post">
<ul>
	<li><input type="Radio" name="petClass" value="Dog" checked> Dog</li>
	<li><input type="Radio" name="petClass" value="Cat"> Cat</li>
	<li><input type="Radio" name="petClass" value="RoboDog"> Robot Dog</li> 
</ul>
</p>
<p>What would you like to name them? <input type="Text" name="petName"></p>
<p><input type="Submit" value="ok "></p>
</form>

The code produces the page shown in Figure 2: This forms asks the user the type of pet to be created and the new pet's name. When the form is submitted, ProcessNewPetForm is run:


<cfset newPet = CreateObject('java',
'pettingZoo.#form.petClass#').init(form.petName) />
<cfset Application.pettingZoo.addPet(newPet) />
<cflocation url="MainMenu.cfm" />

It's very short, letting Java do the heavy lifting of creating Pet objects and storing them in the petting zoo's collection. It then returns to the main menu.

If the user chooses to ask each of the pets for their name, PetGreeter is called:


<!--- Ask each pet in the pettingZoo for their name --->
<cfset pets = Application.pettingZoo.getPets() />
<cfloop from="1" to="#ArrayLen(pets)#" index="i">
	<cfoutput>
   	#pets[i].getName()#<br />
   </cfoutput>
</cfloop>

PetGreeter loops over the pets returned by Java's PetZoo object, asking each pet - each Java Pet object, that is - for its name (see Figure 3).

With code understandable by any ColdFusion programmer, we've created a ColdFusion application that ties into a Java domain model.

The possibilities offered by the marriage of Java and ColdFusion are tremendous. It allows enterprises to call on the strength of each language and allows for the separation of the very different skills of server-side programming and presentation layer programming.

When Blackstone is released, ColdFusion programmers will have an entirely new set of features and tools to work with, empowering them to produce richly interactive applications while integrating with Java enterprise domain models. It promises to be a lovely wedding - and we're all invited to the party.

More Stories By Hal Helms

Hal Helms is a well-known speaker/writer/strategist on software development issues. He holds training sessions on Java, ColdFusion, and software development processes. He authors a popular monthly newsletter series. For more information, contact him at hal (at) halhelms.com or see his website, www.halhelms.com.

Comments (3) View Comments

Share your thoughts on this story.

Add your comment
You must be signed in to add a comment. Sign-in | Register

In accordance with our Comment Policy, we encourage comments that are on topic, relevant and to-the-point. We will remove comments that include profanity, personal attacks, racial slurs, threats of violence, or other inappropriate material that violates our Terms and Conditions, and will block users who make repeated violations. We ask all readers to expect diversity of opinion and to treat one another with dignity and respect.


Most Recent Comments
Robert Wilson 08/02/04 09:31:52 AM EDT

I do understand that your code was designed to be simple, but In my many years of programming I have not found a problem that I could not solve using CF. Most problems, that some may think, need super languages and big powerful computers etc... almost always can be solved by re-thinking the problem at hand, When you really look at a problem objectively, without personal bias and other adjendas, and really ask what is the problem we are trying to solve, undoubtly you would come up with something much different than the orginial problem. Ask the question, "What is the root problem", not what is the problem, only then will you will solve the real problem with a real solution.

Bryan Tidd 07/15/04 08:34:52 AM EDT

I think that many CF Developers who have worked with the last two releases of Coldfusion have found quite a bit of use for using Java for heavy lifting in applications that require it. I also think that CF Developers who have become Certified have spent time learning some Java.

I also think many developers have always used different languages and platforms based on the problem they are out to solve. This article just provides additional proof that Macromedia is more than willing to assist in blurring the lines between Internet, Intranet & Enterprise applications. This will add value to CF Developers and demonstraights Macromedia''s continued support to the develops'' needs.

Steve Nelson 07/15/04 06:36:00 AM EDT

I''m sorry Hal, but this is the craziest thing I''ve ever read:

"With code understandable by any ColdFusion programmer, we''ve created a ColdFusion application that ties into a Java domain model."

What *might* be correct is this:

"With code understandable by 1% of the ColdFusion community, we''ve created a ColdFusion application that ties into a Java domain model."

@ThingsExpo Stories
SYS-CON Events announced today that Juniper Networks (NYSE: JNPR), an industry leader in automated, scalable and secure networks, will exhibit at SYS-CON's 20th International Cloud Expo®, which will take place on June 6-8, 2017, at the Javits Center in New York City, NY. Juniper Networks challenges the status quo with products, solutions and services that transform the economics of networking. The company co-innovates with customers and partners to deliver automated, scalable and secure network...
The age of Digital Disruption is evolving into the next era – Digital Cohesion, an age in which applications securely self-assemble and deliver predictive services that continuously adapt to user behavior. Information from devices, sensors and applications around us will drive services seamlessly across mobile and fixed devices/infrastructure. This evolution is happening now in software defined services and secure networking. Four key drivers – Performance, Economics, Interoperability and Trust ...
Five years ago development was seen as a dead-end career, now it’s anything but – with an explosion in mobile and IoT initiatives increasing the demand for skilled engineers. But apart from having a ready supply of great coders, what constitutes true ‘DevOps Royalty’? It’ll be the ability to craft resilient architectures, supportability, security everywhere across the software lifecycle. In his keynote at @DevOpsSummit at 20th Cloud Expo, Jeffrey Scheaffer, GM and SVP, Continuous Delivery Busin...
With major technology companies and startups seriously embracing Cloud strategies, now is the perfect time to attend @CloudExpo | @ThingsExpo, June 6-8, 2017, at the Javits Center in New York City, NY and October 31 - November 2, 2017, Santa Clara Convention Center, CA. Learn what is going on, contribute to the discussions, and ensure that your enterprise is on the right path to Digital Transformation.
Multiple data types are pouring into IoT deployments. Data is coming in small packages as well as enormous files and data streams of many sizes. Widespread use of mobile devices adds to the total. In this power panel at @ThingsExpo, moderated by Conference Chair Roger Strukhoff, panelists will look at the tools and environments that are being put to use in IoT deployments, as well as the team skills a modern enterprise IT shop needs to keep things running, get a handle on all this data, and deli...
New competitors, disruptive technologies, and growing expectations are pushing every business to both adopt and deliver new digital services. This ‘Digital Transformation’ demands rapid delivery and continuous iteration of new competitive services via multiple channels, which in turn demands new service delivery techniques – including DevOps. In this power panel at @DevOpsSummit 20th Cloud Expo, moderated by DevOps Conference Co-Chair Andi Mann, panelists will examine how DevOps helps to meet th...
The 20th International Cloud Expo has announced that its Call for Papers is open. Cloud Expo, to be held June 6-8, 2017, at the Javits Center in New York City, brings together Cloud Computing, Big Data, Internet of Things, DevOps, Containers, Microservices and WebRTC to one location. With cloud computing driving a higher percentage of enterprise IT budgets every year, it becomes increasingly important to plant your flag in this fast-expanding business opportunity. Submit your speaking proposal ...
@GonzalezCarmen has been ranked the Number One Influencer and @ThingsExpo has been named the Number One Brand in the “M2M 2016: Top 100 Influencers and Brands” by Analytic. Onalytica analyzed tweets over the last 6 months mentioning the keywords M2M OR “Machine to Machine.” They then identified the top 100 most influential brands and individuals leading the discussion on Twitter.
The Internet of Things is clearly many things: data collection and analytics, wearables, Smart Grids and Smart Cities, the Industrial Internet, and more. Cool platforms like Arduino, Raspberry Pi, Intel's Galileo and Edison, and a diverse world of sensors are making the IoT a great toy box for developers in all these areas. In this Power Panel at @ThingsExpo, moderated by Conference Chair Roger Strukhoff, panelists discussed what things are the most important, which will have the most profound e...
SYS-CON Events announced today that T-Mobile will exhibit at SYS-CON's 20th International Cloud Expo®, which will take place on June 6-8, 2017, at the Javits Center in New York City, NY. As America's Un-carrier, T-Mobile US, Inc., is redefining the way consumers and businesses buy wireless services through leading product and service innovation. The Company's advanced nationwide 4G LTE network delivers outstanding wireless experiences to 67.4 million customers who are unwilling to compromise on ...
In his keynote at @ThingsExpo, Chris Matthieu, Director of IoT Engineering at Citrix and co-founder and CTO of Octoblu, focused on building an IoT platform and company. He provided a behind-the-scenes look at Octoblu’s platform, business, and pivots along the way (including the Citrix acquisition of Octoblu).
@ThingsExpo has been named the Most Influential ‘Smart Cities - IIoT' Account and @BigDataExpo has been named fourteenth by Right Relevance (RR), which provides curated information and intelligence on approximately 50,000 topics. In addition, Right Relevance provides an Insights offering that combines the above Topics and Influencers information with real time conversations to provide actionable intelligence with visualizations to enable decision making. The Insights service is applicable to eve...
SYS-CON Events announced today that Grape Up will exhibit at SYS-CON's 21st International Cloud Expo®, which will take place on Oct. 31 – Nov 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA. Grape Up is a software company specializing in cloud native application development and professional services related to Cloud Foundry PaaS. With five expert teams that operate in various sectors of the market across the U.S. and Europe, Grape Up works with a variety of customers from emergi...
With major technology companies and startups seriously embracing IoT strategies, now is the perfect time to attend @ThingsExpo 2016 in New York. Learn what is going on, contribute to the discussions, and ensure that your enterprise is as "IoT-Ready" as it can be! Internet of @ThingsExpo, taking place June 6-8, 2017, at the Javits Center in New York City, New York, is co-located with 20th Cloud Expo and will feature technical sessions from a rock star conference faculty and the leading industry p...
Bert Loomis was a visionary. This general session will highlight how Bert Loomis and people like him inspire us to build great things with small inventions. In their general session at 19th Cloud Expo, Harold Hannon, Architect at IBM Bluemix, and Michael O'Neill, Strategic Business Development at Nvidia, discussed the accelerating pace of AI development and how IBM Cloud and NVIDIA are partnering to bring AI capabilities to "every day," on-demand. They also reviewed two "free infrastructure" pr...
SYS-CON Events announced today that Hitachi, the leading provider the Internet of Things and Digital Transformation, will exhibit at SYS-CON's 20th International Cloud Expo®, which will take place on June 6-8, 2017, at the Javits Center in New York City, NY. Hitachi Data Systems, a wholly owned subsidiary of Hitachi, Ltd., offers an integrated portfolio of services and solutions that enable digital transformation through enhanced data management, governance, mobility and analytics. We help globa...
SYS-CON Events announced today that SoftLayer, an IBM Company, has been named “Gold Sponsor” of SYS-CON's 18th Cloud Expo, which will take place on June 7-9, 2016, at the Javits Center in New York, New York. SoftLayer, an IBM Company, provides cloud infrastructure as a service from a growing number of data centers and network points of presence around the world. SoftLayer’s customers range from Web startups to global enterprises.
The buzz continues for cloud, data analytics and the Internet of Things (IoT) and their collective impact across all industries. But a new conversation is emerging - how do companies use industry disruption and technology enablers to lead in markets undergoing change, uncertainty and ambiguity? Organizations of all sizes need to evolve and transform, often under massive pressure, as industry lines blur and merge and traditional business models are assaulted and turned upside down. In this new da...
SYS-CON Events announced today that Hitachi, the leading provider the Internet of Things and Digital Transformation, will exhibit at SYS-CON's 20th International Cloud Expo®, which will take place on June 6-8, 2017, at the Javits Center in New York City, NY. Hitachi Data Systems, a wholly owned subsidiary of Hitachi, Ltd., offers an integrated portfolio of services and solutions that enable digital transformation through enhanced data management, governance, mobility and analytics. We help globa...
20th Cloud Expo, taking place June 6-8, 2017, at the Javits Center in New York City, NY, will feature technical sessions from a rock star conference faculty and the leading industry players in the world. Cloud computing is now being embraced by a majority of enterprises of all sizes. Yesterday's debate about public vs. private has transformed into the reality of hybrid cloud: a recent survey shows that 74% of enterprises have a hybrid cloud strategy.