17
Fusebox Conference Maxim Porges Case Study: HotelsCorp.com Successfully Blending OO With Fusebox (and Other Cool Tricks)

Fusebox ConferenceMaxim Porges Case Study: HotelsCorp.com Successfully Blending OO With Fusebox (and Other Cool Tricks)

Embed Size (px)

Citation preview

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

Why Objects?

Changes here…

Fusebox App

…don’t force

changes here!

Fusebox Conference Maxim Porges

HotelsCorp.com ArchitectureSAMS SAMS Web API

HotelsCorpAPI

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 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

Fusebox Conference Maxim Porges

That’s All, Folks!

Thanks for watching! Please ask me any questions that you

might have