Transcript Document
Case Study: HotelsCorp.com
Successfully Blending OO With
Fusebox (and Other Cool Tricks)
Fusebox Conference
Maxim Porges
HotelsCorp.com At A Glance
The Business Plan
Generate hotel bookings online, undercut big
names (Expedia, Travelocity)
Convert a percentage of bookings to tours
Market through PPC on Search Engines
Hotel revenue pays for the advertising
Create location “skin-able” web sites
N Landing Pages - Cater to Special Interests
Sell hotels for revenue, tours for Timeshare
Brings cost-per-tour down to $60 from $150+
Fusebox Conference
Maxim Porges
HotelsCorp.com At A Glance
Technical Challenges
Legacy Integration - Reservation System
and Sales and Marketing System
(S.A.M.S)
No API to S.A.M.S. - closed system
First CFMX Project
First OO with Fusebox Project
Delivery expected in 3 months (!)
Fusebox Conference
Maxim Porges
Implementation Choices
FB 3.0 on ColdFusion MX
Multi Aliased Circuits (from 2002 FB Conf)
Oracle back end (for web site)
Oracle PL/SQL API to legacy system
CFC Abstraction Layer
Java for Asynchronous Search and Form
Validation System
A smattering of JavaScript (ugh)
Fusebox Conference
Maxim Porges
Legacy System - SAMS
SAMS System
Problems
Business Logic in
Forms
Intimate Knowledge
of DB required
No clean separation
between systems
Fusebox Conference
Maxim Porges
Why Objects?
Fusebox App
…don’t
force
changes
here!
Changes
here…
Fusebox Conference
Maxim Porges
HotelsCorp.com Architecture
SAMS
SAMS Web API
HotelsCorp
API
Fusebox Conference
Maxim Porges
Creating the Object Model
Fusebox Conference
Maxim Porges
Fusebox 3.0 Architecture
Designed in Adalon
Architecture diagram available for
questioning
Fusebox Conference
Maxim Porges
Skinning The Site
Each web site is “skinned” through LAF and
code
orlando.hotelscorp.com
smokies.hotelscorp.com
vegas.hotelscorp.com (coming soon)
All Fusebox code is reusable between
destinations
Identical process flows
Changes to codebase affect all sites at once
Fusebox Conference
Maxim Porges
Skinning The Site
Code sample from main fbx_Settings
<!--------------------------------------------Set up destination resource bundle variables
This includes the default market effort
---------------------------------------------->
<cfset request.G_DESTINATION_ID = 2>
<cfset request.G_LP_COOKIE_DOMAIN = ".wgresorts.com">
<cfset request.G_SECURE_SERVER_URL = "http://webdev1mx.wgresorts.com/…
<cfset request.G_SECURE_SERVER_DOMAIN = ".wgresorts.com">
<cfset request.G_DEFAULT_LP_TEXT_ID = "gatlinburg">
<cfset request.G_AREA_ATTRACTION_ID_LIST = "28,31,33,47,50,51,35,…
<cfset request.G_DESTINATION_DOMAIN = "http://webdev1mx.wgresorts…
<cfset request.G_LP_ATTRACTION_TICKET_LINK = "#request.G_SELF_FUSE…
Fusebox Conference
Maxim Porges
Skinning The Site
Sample Resource Bundle
Fusebox Conference
Maxim Porges
Tying the Objects To Fusebox
Main objects stored in the
application scope as Singletons
The request scope is your friend
JSP forwarding in CFMX
Abstracts persistence implementation (i.e.
session, cookie, DB)
Fusebox Conference
Maxim Porges
Asynchronous Search
Asynchronous Processes/Threads
ColdFusion doesn’t allow you to kick off
your own threads
Wrote a simple Java object that would
open a URL in a Java Thread and die on
completion
Used for asynchronous search in
HotelsCorp.com.
Fusebox Conference
Maxim Porges
Search Process Diagram
Search
Submitted
ColdFusion Server
Store Search
Java Thread
CFM
Search
Code
Search
Ends
Search Complete?
Search Results
Fusebox Conference
Maxim Porges
Lessons Learned
In Fuses, don’t explicitly reference object
scope
<cfset object = request.objectName>
In Fuse:
<cfset object = getSomeObject()>
In Application File:
<cfscript>
// //
return
return
object
object
stored
that’s
persistently
brand new in application scope
function getSomeObject()
{
return application.someObject;
CreateObject(“component”, com.mywebsite.object”);
}
</cfscript>
Fusebox Conference
Maxim Porges
That’s All, Folks!
Thanks for watching!
Please ask me any questions that you
might have
Fusebox Conference
Maxim Porges