fusebox conferencemaxim porges case study: hotelscorp.com successfully blending oo with fusebox (and...
TRANSCRIPT
Fusebox Conference Maxim Porges
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
SAMS System
Legacy System - SAMS
DB Links
Problems Business Logic in
Forms Intimate Knowledge
of DB required No clean separation
between systems
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
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 DiagramSearch
Submitted
ColdFusion Server
Store Search
Java Thread
CFM Search Code
Returns
Search Complete?
META Refresh
Search Results
Search Ends
Fusebox Conference Maxim Porges
<cfscript> // return object that’s brand new function getSomeObject() { return CreateObject(“component”, com.mywebsite.object”); }
</cfscript>
In Fuses, don’t explicitly reference object scope<cfset object = request.objectName>
In Fuse:<cfset object = getSomeObject()>
In Application File:
<cfscript> // return object stored persistently in application scope function getSomeObject() { return application.someObject; }
</cfscript>
Lessons Learned