YOUR FEEDBACK
Using My HDTV as a Second Monitor
kenk wrote: When you open up your displays in the system preferences, you ...
SOA World Conference
Virtualization Conference
$50 Savings Expire May 23, 2008... – Register Today!


2007 West
GOLD SPONSORS:
Active Endpoints
Your SOA Needs BPEL for Orchestration
BEA
Virtualized SOA: Adaptive Infrastructure for Demanding Applications
Nexaweb
Overcoming Bandwidth Challenges with Nexaweb
TIBCO
What is Service Virtualization?
SILVER SPONSORS:
WSO2
Using Web Services Technologies and FOSS Solutions
Click For 2007 East
Event Webcasts

2008 East
PLATINUM SPONSORS:
Appcelerator
Think Fast: Accelerate AJAX Development with Appcelerator
GOLD SPONSORS:
DreamFace Interactive
The Ultimate Framework for Creating Personalized Web 2.0 Mashups
ICEsoft
AJAX and Social Computing for the Enterprise
Kaazing
Enterprise Comet: Real–Time, Real–Time, or Real–Time Web 2.0?
Nexaweb
Now Playing: Desktop Apps in the Browser!
Sun
jMaki as an AJAX Mashup Framework
POWER PANELS:
The Business Value
of RIAs
What Lies Beyond AJAX?
KEYNOTES:
Douglas Crockford
Can We Fix the Web?
Anthony Franco
2008: The Year of the RIA
Click For 2007 Event Webcasts
SYS-CON.TV
TOP COLDFUSION LINKS


Working with the Apache Derby Database and ColdFusion
A basic introduction

Digg This!

Page 1 of 2   next page »

Early releases of Cold Fusion (under Allaire) focused on the Windows market and it was common to include example Access databases. It was common for entry-level developers to take this example to heart and build systems on Access back-ends. One didn't have to install, set up, admin, or most importantly pay for anything. With the beta release of ColdFusion 8, Adobe is providing support for an array of open source databases. Now using PostgreSQL, MySQL, or Apache Derby (formerly IBM Cloudscape) has been made that simpler for CF developers since JDBC drivers for all of them are included. Any of these solutions can be used for the free distribution of databases on either Windows or *nix. The same can't be said of Access. Adobe has made moving to open source more convenient by including Derby in the base install of Scorpio. It will now likely become common for systems to be distributed with Derby databases because of their operating system independence, royalty-free distribution, small footprint, and ease of installation. This article attempts to help early adopters try Derby out with ColdFusion 8.

Terminology
Apache Derby is a pure Java database that supports almost all of the SQL-92 standard. It fits in about 2MB of memory, a nice efficient footprint for memory-constrained environments like mobile applications (or your desktop masquerading as a server). With ColdFusion it runs on J2SE 1.6 and the shipping driver is a native protocol, a pure Java (level 4) driver. There are two flavors of Derby: embedded and network. Simply put, embedded is a direct-connect (you have to run it in the same JVM as the code connecting to it), single-client database while network adds networking and multi-client support.

The Embedded Database
Once you install Scorpio and find your way to the Data Sources section of the Administrator, you'll see four Derby Embedded example databases (and zero Access databases). The example databases are installed in /ColdFusion8/db. (Note: File references in this article assume that ColdFusion is installed at the root of your filesystem. If you're on Windows, the default install path is C:\ColdFusion8 and the references below should be changed accordingly.)

One of these examples is the CFBookClub database. One can query this database in the same way as any other in ColdFusion, using the CFQuery, CFQueryParam, CFStoredProc, and CFProcParam tags. Create a new page called testDatabase.cfm in your webroot and code:

<cfquery name="test" datasource="cfbookclub" >
select books.title
from app.books books
inner join app.authors authors on books.authorid=authors.authorid
where authors.lastname =
<cfqueryparam cfsqltype="cf_sql_varchar" value="Miro" />
</cfquery>

<cfdump var="#test#" />

Run it and you should see CF8's new query dump format which gives you metadata about the query including execution time.

Creating Embedded Databases
To create a new embedded database, enter the directory where you want the database files kept. Do not create a new directory yourself and then browse to it. Select or enter the directory you'd like to contain the database subdirectory. Now write the subdirectory name you'd like after this. For example, Browse to "C:\ColdFusion8\db\" then enter "mytestdatabase" in the entry box. The Database Folder field now reads "C:\ColdFusion8\db\mytestdatabase". (Figure 1)

If you're creating a new Derby database, open the Advanced tab and enter 'create=true' in the Connection String field. If the directory specified already exists and doesn't contain a Derby database, datasource creation will fail writing an error 'XBM0J' to the Derby log file (in /ColdFusion8/logs). (Figure 2)

It's not great interface design to have the file browser come up to help you locate the target directory when the activity fails if the directory already exists and doesn't contain a Derby database. The only time this will work is when you point to a directory that does contain a Derby database. If you want to create a datasource for a Derby database someone has given you, you can point the file browser at the directory that contains it. You must still open the Advanced tab and enter 'create=true' in the Connection String field. (Figure 3)

The ColdFusion server doesn't seem to like to let go of Derby embedded databases once you connect to them. Restarting the CF service is very slow after creating and verifying the new embedded Derby database. This is a bit problematical since it currently appears that the Advanced Options "Maintain connections across client requests," "Timeout," and "Interval" don't work: connections are maintained indefinitely. Restarting the server is the only way to release a connection. You can't have multiple connections open to an embedded database, so you can't use other tools (such as Eclipse or ij, discussed below) to work with it while running your CF application. This is one of many good reasons to think about using Derby Network instead.

Creating Network Databases
Creating a Derby network database is just as easy. First start up the Derby server: "java -jar /ColdFusion8/lib/derbynet.jar -start." Now go to CF Administrator and create a new Derby client datasource. There's currently a bug in this dialog, so in the Advanced/Connection String box, you'll have to start with a semicolon ";create=true" to get it to work. Hit submit and your new database directory will be created in the same directory in which the server started up (/ColdFusion8/lib). There's nothing to say that you have to run the Derby server on the same box as CF, in fact if you want your app to scale across multiple servers it's better not to.

Installing a Derby Network Server
While CF8 ships with the latest Derby (10.2.2), Adobe's not going to notify you when new features or minor patches come out. You'll have to go to Apache to keep up-to-date. (http://db.apache.org/derby/derby_downloads.html.) Download the latest version and unpack it on the server of your choice. Set the JAVA_HOME environment variable to the location of your Java runtime. If you want to use the runtime shipping with the CF server (JavaSE 1.6) to try this out, run 'set JAVA_HOME = [coldfusion install dir]\runtime' (Windows) or 'export JAVA_HOME="[coldfusion install dir]/runtime"' (*nix). (If you're smart and installing this on another machine, you should have downloaded the latest JRE from Sun and installed it there already.) Navigate to the Derby bin subdirectory and run the setNetworkServerCP script, which adds Derby's info to your CLASSPATH environment variable then run the startNetworkServer script. Scripts are included for *nix and Windows. Your Derby server will now tell you that it's listening on port 1527 and is ready to accept connections. When you use the ColdFusion Datasources dialog to tell the Derby server to make new databases (with the create=true directive), Derby will create new subdirectories in its startup directory (/Derby/bin directory) by default. When you want to stop your new server - you guessed it, run stopNetworkServer.



Page 1 of 2   next page »

About Chip Temm
Over the past decade, Chip Temm moved from North America to Europe and on to Africa where his company anthroLogik solutions provided analysis and development services to non-governmental organizations across seven timezones. He is currently back in Washington, DC where "remote development" means working from home and "wildlife" means raccoon.

CFDJ LATEST STORIES . . .
3rd International Virtualization Conference & Expo: Themes & Topics
From Application Virtualization to Xen, a round-up of the virtualization themes & topics being discussed in NYC June 23-24, 2008 by the world-class speaker faculty at the 3rd International Virtualization Conference & Expo being held by SYS-CON Events in The Roosevelt Hotel, in midtown
AJAX World – Personal Branding Checklist
This is a checklist of items you need for an all-encompassing personal branding strategy. Personal branding is the process of marketing and selling yourself as a brand in order to gain success in business. Personal branding is a continual process just as knowing yourself is a continual
What Is ColdFusion in the Age of Java?
As CFML developers start to learn Java and move into the realm of Spring and Hibernate, it is very important to stop and ask 'What Is ColdFusion?'. ColdFusion, since CFMX, has been a J2EE application running within a J2EE server (JRun, JBoss, Tomcat, Websphere, etc.). This is important
Opinion: Give ColdFusion Some Room to Breathe
My personal approach has become to to let ColdFusion do what it does best, and no more. No AJAX generation or any of that silly UI stuff. Leave that to the AJAX frameworks, or Flex, or whatever your UI is going to be on the front-end. That's what the UI tool was designed for, CF wasn't
Viewpoint: Not Every ColdFusion Developer Should Be A Flex Developer
I am going to go ahead and contend that although a good number of ColdFusion developers can grasp and understand Flex very well, there are also a good number of ColdFusion developers who have no business going anywhere near Flex. Why do I say this? I am a big fan of Flex. I use it dail
JavaOne 2008: Sun Talks Up its Late-to-the-Party AIR-Silverlight Rival
At Java One this week Sun has been selling its year -old-but-still-upcoming - and definitely late-to-the-party - Adobe AIR- and Microsoft Silverlight-competitive JavaFX Rich Client environment as a potential revenue-generator capable of putting ads on mobile applications and JavaFX Scri
SUBSCRIBE TO THE WORLD'S MOST POWERFUL NEWSLETTERS
SUBSCRIBE TO OUR RSS FEEDS & GET YOUR SYS-CON NEWS LIVE!
Click to Add our RSS Feeds to the Service of Your Choice:
Google Reader or Homepage Add to My Yahoo! Subscribe with Bloglines Subscribe in NewsGator Online
myFeedster Add to My AOL Subscribe in Rojo Add 'Hugg' to Newsburst from CNET News.com Kinja Digest View Additional SYS-CON Feeds
Publish Your Article! Please send it to editorial(at)sys-con.com!

Advertise on this site! Contact advertising(at)sys-con.com! 201 802-3021

SYS-CON FEATURED WHITEPAPERS

ADS BY GOOGLE