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