Title: Case Study: HotelsCorp.com
1Case Study HotelsCorp.com
- Successfully Blending OO With Fusebox (and Other
Cool Tricks)
2HotelsCorp.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
3HotelsCorp.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 (!)
4Implementation 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)
5Legacy System - SAMS
SAMS System
DB Links
- Problems
- Business Logic in Forms
- Intimate Knowledge of DB required
- No clean separation between systems
6Why Objects?
Changes here
dont force changes here!
7HotelsCorp.com Architecture
SAMS
SAMS Web API
HotelsCorp API
8Creating the Object Model
9Fusebox 3.0 Architecture
- Designed in Adalon
- Architecture diagram available for questioning
10Skinning 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
11Skinning The Site
- Code sample from main fbx_Settings
lt!---------------------------------------------
Set up destination resource bundle variables
This includes the default market
effort -------------------------------------------
---gt ltcfset request.G_DESTINATION_ID 2gt ltcfset
request.G_LP_COOKIE_DOMAIN ".wgresorts.com"gt ltcf
set request.G_SECURE_SERVER_URL
"http//webdev1mx.wgresorts.com/ ltcfset
request.G_SECURE_SERVER_DOMAIN
".wgresorts.com"gt ltcfset request.G_DEFAULT_LP_TEXT
_ID "gatlinburg"gt ltcfset request.G_AREA_ATTRACTI
ON_ID_LIST "28,31,33,47,50,51,35, ltcfset
request.G_DESTINATION_DOMAIN "http//webdev1mx.w
gresorts ltcfset request.G_LP_ATTRACTION_TICKET_LI
NK "request.G_SELF_FUSE
12Skinning The Site
13Tying 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)
14Asynchronous Search
- Asynchronous Processes/Threads
- ColdFusion doesnt 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.
15Search Process Diagram
ColdFusion Server
Search Submitted
Store Search
Returns
Java Thread
?
Opens URL
CFM Search Code
Search Ends
META Refresh
Search Complete?
Search Results
16Lessons Learned
- In Fuses, dont explicitly reference object scope
- ltcfset object request.objectNamegt
- In Fuse
- ltcfset object getSomeObject()gt
- In Application File
ltcfscriptgt // return object thats brand
new function getSomeObject()
return CreateObject(component,
com.mywebsite.object) lt/cfscriptgt
ltcfscriptgt // return object stored
persistently in application scope function
getSomeObject() return
application.someObject lt/cfscriptgt
17Thats All, Folks!
- Thanks for watching!
- Please ask me any questions that you might have