CFC’s In ColdFusion 8 Use Java’s Serialization API

One of the handy new features in ColdFusion 8 is that CFC’s are now serializable.

There isn’t a whole lot of information about this new feature in the docs, but I did some playing around and it does appear that they have used Java’s serialization API. This means that you can use java’s java.io.ObjectOutputStream to serialize your CFC’s…

Here’s an example of how you might write serialize a CFC to a file:

<cfset myCFCInstance = CreateObject("component", "test")>
<cfset myCFCInstance.setName("something")>
<cfset fileOut = CreateObject("java", "java.io.FileOutputStream")>
<cfset fileOut.init(ExpandPath("./serialized_cfc.txt"))>
<cfset objOut = CreateObject("java", "java.io.ObjectOutputStream")>
<cfset objOut.init(fileOut)>
<cfset objOut.writeObject(myCFCInstance)>
<cfset objOut.close()>

You will now have a file called serialized_cfc.txt that you can open up. The file is actually a binary file, but you can read it with a text editor and see the values of your CFC instance variables inside this file.

Now suppose you want to read that file and reconstruct your CFC instance (deserialize it). We just use a FileInputStream and a ObjectInputStream:

<cfset fileIn = CreateObject("java", "java.io.FileInputStream")>
<cfset fileIn.init(ExpandPath("./serialized_cfc.txt"))>
<cfset objIn = CreateObject("java", "java.io.ObjectInputStream")>
<cfset objIn.init(fileIn)>
<cfset newCFCInstance = objIn.readObject()>
<cfset objIn.close()>

<cfoutput>#newCFCInstance.getName()#</cfoutput>

Now suppose you didn’t want to write the CFC instance to a file, but rather store it as a value somewhere else… We can use a ByteArrayOutputStream and then turn turn the Byte Array into a Base64 string.

<cfset byteOut = CreateObject("java", "java.io.ByteArrayOutputStream")>
<cfset byteOut.init()>
<cfset objOut = CreateObject("java", "java.io.ObjectOutputStream")>
<cfset objOut.init(byteOut)>
<cfset objOut.writeObject(myCFCInstance)gt;
<cfset objOut.close()>

<cfdump var=”#ToBase64(byteOut.toByteArray())#”>

Handy Stuff. Are there any functions or new features that I have missed that make this process any easier?

*Originally published at Pete Freitag’s Homepage.

Pete Freitag
About Pete Freitag
Pete Freitag (http://www.petefreitag.com/) is a software engineer, and web developer located in central new york. Pete specializes in the HTTP protocol, web services, xml, java, and coldfusion. In 2003 Pete published the ColdFusion MX Developers Cookbook with SAMs Publishing. Pete owns a Firm called Foundeo (http://foundeo.com/) that specializes in Web Consulting, and Products for Web Developers.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>