22
Process Information Facto SUN J2EE Architecture (Introduction, J2EE Patterns, Samples) -- Understanding the SUN J2EE Architecture -- © Josef Schiefer, IBM Watson

Process Information Factory SUN J2EE Architecture (Introduction, J2EE Patterns, Samples) -- Understanding the SUN J2EE Architecture -- © Josef Schiefer,

Embed Size (px)

Citation preview

Page 1: Process Information Factory SUN J2EE Architecture (Introduction, J2EE Patterns, Samples) -- Understanding the SUN J2EE Architecture -- © Josef Schiefer,

Process Information Factory

SUN J2EE Architecture(Introduction, J2EE Patterns, Samples)

-- Understanding the SUN J2EE Architecture --

© Josef Schiefer, IBM Watson

Page 2: Process Information Factory SUN J2EE Architecture (Introduction, J2EE Patterns, Samples) -- Understanding the SUN J2EE Architecture -- © Josef Schiefer,

SUN J2EE Architecture

Tiered Approach (5 Tiers)

Page 3: Process Information Factory SUN J2EE Architecture (Introduction, J2EE Patterns, Samples) -- Understanding the SUN J2EE Architecture -- © Josef Schiefer,

SUN J2EE Architecture

Page 4: Process Information Factory SUN J2EE Architecture (Introduction, J2EE Patterns, Samples) -- Understanding the SUN J2EE Architecture -- © Josef Schiefer,

SUN J2EE Architecture

Front Controller / Dispatcher

Page 5: Process Information Factory SUN J2EE Architecture (Introduction, J2EE Patterns, Samples) -- Understanding the SUN J2EE Architecture -- © Josef Schiefer,

SUN J2EE Architecture

Front Controller Interaction

Page 6: Process Information Factory SUN J2EE Architecture (Introduction, J2EE Patterns, Samples) -- Understanding the SUN J2EE Architecture -- © Josef Schiefer,

SUN J2EE Architecture

Front Controller Alternatives…

Page 7: Process Information Factory SUN J2EE Architecture (Introduction, J2EE Patterns, Samples) -- Understanding the SUN J2EE Architecture -- © Josef Schiefer,

SUN J2EE Architecture

Servlet Front Controller

Page 8: Process Information Factory SUN J2EE Architecture (Introduction, J2EE Patterns, Samples) -- Understanding the SUN J2EE Architecture -- © Josef Schiefer,

SUN J2EE Architecture

JSP Front Controller

Page 9: Process Information Factory SUN J2EE Architecture (Introduction, J2EE Patterns, Samples) -- Understanding the SUN J2EE Architecture -- © Josef Schiefer,

SUN J2EE Architecture

JSP Front Controller – JSP Code<%@page contentType="text/html"%> <%@ page import="corepatterns.util.*" %><html><head><title>JSP Front Controller</title></head><body><h3><center> Employee Profile </h3><% /**Control logic goes here... We either dispatch to another JSP at this point or simply allow the remaining portions of scriptlet code to execute**/String page;/**ApplicationResources provides a simple API forretrieving constants and other preconfigured values**/ApplicationResources resource = ApplicationResources.getInstance();try{

RequestHelper helper = new RequestHelper(request); // Use a helper object to gather parameterCommand cmdHelper= helper.getCommand(); // Command helper perform custom operationpage = cmdHelper.execute(request, response);

} catch (Exception e){request.setAttribute(resource.getMessageAttr(),"Exception occured : " + e.getMessage());page = resource.getErrorPage(e);

}// dispatch control to viewif(page!=null){

RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(page);dispatcher.forward(request, response);

}%><FORM method=POST ><table width="60%"><tr><td> Not detected next page </td></tr></table></FORM></body></html>

Page 10: Process Information Factory SUN J2EE Architecture (Introduction, J2EE Patterns, Samples) -- Understanding the SUN J2EE Architecture -- © Josef Schiefer,

SUN J2EE Architecture

Servlet Controller Strategy

Page 11: Process Information Factory SUN J2EE Architecture (Introduction, J2EE Patterns, Samples) -- Understanding the SUN J2EE Architecture -- © Josef Schiefer,

SUN J2EE Architecture

Command & Controller Strategy

Page 12: Process Information Factory SUN J2EE Architecture (Introduction, J2EE Patterns, Samples) -- Understanding the SUN J2EE Architecture -- © Josef Schiefer,

SUN J2EE Architecture

Screen Mappings

<request-mappings><screen-definition url="/WEB-INF/xml/screendefinitions.xml" language="en_US"/><screen-definition url="/WEB-INF/xml/ja/screendefinitions.xml" language="ja_JP"/><default-screen>MAIN</default-screen><signin-screen>SIGN_IN</signin-screen><signin-error-screen>SIGN_IN_ERROR</signin-error-screen><url-mapping url="/main" screen="MAIN"/><url-mapping url="/search" screen="SEARCH"/><url-mapping url="/category" screen="CATEGORY"/>

…..<url-mapping url="/verifysignin" screen="SIGN_IN_SUCCESS" useRequestHandler="true" useFlowHandler="true">

<request-handler-class>com.sun.j2ee.blueprints.petstore.control.web.handlers.SigninHandler</request-handler-class>

<flow-handler class="com.sun.j2ee.blueprints.petstore.control.web.handlers.SigninFlowHandler">

<handler-result result="2" screen="SIGN_IN_ERROR"/><handler-result result="1" screen="SIGN_IN_SUCCESS"/>

</flow-handler></url-mapping>

…..<exception-mapping exception-class="com.sun.j2ee.blueprints.petstore.control.exceptions.SigninFailedException" screen="SIGN_IN_ERROR"/>

</request-mappings>

Page 13: Process Information Factory SUN J2EE Architecture (Introduction, J2EE Patterns, Samples) -- Understanding the SUN J2EE Architecture -- © Josef Schiefer,

SUN J2EE Architecture

Screen Definitions

<screen-definitions><template>/template.jsp</template><screen>

<screen-name>main</screen-name><parameter key="title" value="Welcome to the BluePrints Petstore" direct="true"/><parameter key="banner" value="/banner.jsp" direct="false"/><parameter key="sidebar" value="/sidebar.jsp" direct="false"/><parameter key="body" value="/main.jsp" direct="false"/><parameter key="mylist" value="/mylist.jsp" direct="false"/><parameter key="advicebanner" value="/advice_banner.jsp" direct="false"/><parameter key="footer" value="/footer.jsp" direct="false"/>

</screen><screen>

<screen-name>cart</screen-name><parameter key="title" value="Cart" direct="true"/><parameter key="banner" value="/banner.jsp" direct="false"/><parameter key="sidebar" value="/sidebar.jsp" direct="false"/><parameter key="body" value="/cart.jsp" direct="false"/><parameter key="mylist" value="/mylist.jsp" direct="false"/><parameter key="footer" value="/footer.jsp" direct="false"/><parameter key="advicebanner" value="/advice_banner.jsp" direct="false"/>

</screen> ….</screen-definitions>

Page 14: Process Information Factory SUN J2EE Architecture (Introduction, J2EE Patterns, Samples) -- Understanding the SUN J2EE Architecture -- © Josef Schiefer,

SUN J2EE Architecture

Example – Flight Reservation

Page 15: Process Information Factory SUN J2EE Architecture (Introduction, J2EE Patterns, Samples) -- Understanding the SUN J2EE Architecture -- © Josef Schiefer,

SUN J2EE Architecture

Screen Flow Management / Controllers

MainServlet

rq : RequestProcessorsfm : ScreenFlowManager

init()doGet()doPost()doProcess()getRequestProcessor()getScreenFlowManager()

FlowHandlerException

toString()

FlowHandler

doStart()processFlow()doEnd()

<<throws>>

ScreenFlowManager

getNextScreen()getCurrentScreen()getExceptionScreen()

<<throws>>

WebControl ler

init()handleEvent()destroy()

<<Interface>>

RequestProcessor

processRequest()

WebAction

setServletContext()doStart()processRequest()doEnd()

<<Interface>>

WebControl lerImpl

ejbcontrol ler : EJBControl ler

init()handleEvent()destroy()

Event

getEventName()

<<Interface>><<creates>>

EJBControllerEJB

StateMachine stateMachine

handleEvent()

StateMachine

HashMap attributes

processEvent()

<<processes>>

EJBAction

init()doStart()processEvent()doEnd()

<<Interface>>

<<processes>>

Page 16: Process Information Factory SUN J2EE Architecture (Introduction, J2EE Patterns, Samples) -- Understanding the SUN J2EE Architecture -- © Josef Schiefer,

SUN J2EE Architecture

Class Model – Web Application

WebActionSupport

setServletContext()doStart()doEnd()

EventSupport

getEventName()

ServiceLocator

getWebClientController()

<<Interface>> HttpSessionListener<<Interface>>

M

EJBActionSupport

init()doStart()doEnd()

EventResponseSupport

payload : Object

getPayload()

FlowHandlerException

toString()

FlowHandler

doStart()processFlow()doEnd()

<<throws>>

ScreenFlowManager

getNextScreen()getCurrentScreen()getExceptionScreen()

<<throws>>

MainServlet

rq : RequestProcessorsfm : ScreenFlowManager

init()doGet()doPost()doProcess()getRequestProcessor()getScreenFlowManager()

ServiceLocatorImpl

webController : WebControllersession : HttpSession

getWebClientController()sessionCreated()sessionDestroyed()

WebController

init()handleEvent()destroy()

<<Interface>>

WebActionException

toString()

RequestProcessor

processRequest()

WebAction

setServletContext()doStart()processRequest()doEnd()

<<Interface>>

<<throws>>

WebControllerImpl

ejbcontroller : EJBController

init()handleEvent()destroy()

Event

getEventName()

<<Interface>>

<<creates>>

EJBControllerEJB

StateMachine stateMachine

handleEvent()

StateMachine

HashMap attributes

processEvent()<<processes>>

EventResponse

getEventName()

<<Interface>>

EJBAction

init()doStart()processEvent()doEnd()

<<Interface>>

<<processes>>

<<creates>>

Page 17: Process Information Factory SUN J2EE Architecture (Introduction, J2EE Patterns, Samples) -- Understanding the SUN J2EE Architecture -- © Josef Schiefer,

SUN J2EE Architecture

Class Diagram - Flight Management

TravelAgentEJB

travelAgency : String

MailerEJB

sendMail()

PaymentEJB

isCreditCardValid()chargeCreditCard()awardTravel()sendPaymentConfirmation()

LoginEJB

user : Stringpassword : String

SignOnEJB

authenticate()createUser()

AddressEJB

city : Stringcountry : Stringstate : StringstreetName1 : StringstreetName2 : StringzipCode : String

ContactInfoEJB

address : AddressLocaleMail : StringfirstName : StringlastName : Stringtelephone : String

ProfileEJB

bannerPreference : StringpreferredLanguage : StringfavoriteDestinations : String

FlightInformationEJB

findFlights()findAlternativeFlights()getFlight()getFlightPrice()calculateItineraryPrice()getAvailableSeats()

FlightTransactionEJB

processPayment()makeReservation()getFlight()

PersonEJB

userID : Stringprofile : ProfilecontractInfo : ContractInfo

FlightManagementFacadeEJB

userID : StringpersonEJB : PersonflightInformation : FlightInformationflightTransaction : FlightTransaction

getPerson()getUserID()setUserID()getFlightInformation()getFlightTransaction()

MileageAccountEJB

number : Stringmileage : intstatus : String

addMiles()

CreditCardEJB

cardNumber : StringcardType : StringexpiryDate : String

CustomerEJB

creditCards : CreditCard[]mileageAccount : MileageAccountreservations : Reservation[]

ReservationEJB

reservationNumber : Stringcustomer : CustomerhcreditCard : CreditCardseatClass : StringseatNumber : intdate : Dateitineraries : Itinerary[]roundTrip : boolean

0..n0..n

AirplaneEJB

number : Stringtype : Stringmanufacturer : StringmaxSeats : int

SeatsInfoEJB

seatsClass : StringmaxSeats : intavailableSeats : intprice : double

ItineraryEJB

number : StringdepartureAirport : AirportdestinationAirport : Airportflights : Flight[]mileage : int

1..21..2

FlightEJB

flightNumber : Stringairline : Stringduration : intdepartureDateTime : DatearrivalDateTime : DateseatsInfos : SeatsInfo[]distance : intflightLegs : FlightLeg[]

AirportEJB

airportCode : StringairportName : String

FlightLegEJB

departureAirportdestinationAirport

Page 18: Process Information Factory SUN J2EE Architecture (Introduction, J2EE Patterns, Samples) -- Understanding the SUN J2EE Architecture -- © Josef Schiefer,

SUN J2EE Architecture

Controllers/Events/Actions

WebActionSupport

setServletContext()doStart()doEnd()

FMWebControllerImpl

init()handleEvent()destroy()

FMControllerEJB

handleEvent()

WebControllerImplejbcontroller : EJBController

init()handleEvent()destroy()

EJBControllerEJBStateMachine stateMachine

handleEvent()

LogonEventuserName : Stringpassword : String

EventSupport

getEventName()

UserProfileEventAT_CREATE : StringAT_UPDATE : StringAT_DELETE : StringUT_CUSTOMER : StringUT_TRAVELAGENT : StringactionType : StringuserType : StringcontractInfo : ContractInfoEJBcreditCard : CreditCardEJBprofile : ProfileEJBtravelAgency : String

FlightInfoEventAT_AVAILABLEFLIGHTS : StringAT_PRICEDFLIGHTS : StringAT_ITINERARYPRICE : StringAT_LISTITINERARIES : StringactionType : StringitineraryNumber : StringcustomerNumber : StringdepartureCity : StringdepartureDateTime : DatereturnDateTime : DatedestinationCity : StringroundTrip : booleanselectedFlights : String[]

FlightTransactionEventAT_PAYMENTMETHODAT_CREDITCARDSELECTIONAT_CHANGEITINERARYAT_RESERVEFLIGHTactionType : StringpaymentMethod : StringselectedFlights : String[]itineraryNumber : StringreservationNumber : StringPM_CREDITCARD : StringPM_AWARDTRAVEL : String

LogonWebAction

processRequest()

UserProfileWebAction

processRequest()

FlightInfoWebAction

processRequest()

FlightTransactionWebAction

processRequest()LogonEJBAction

processEvent()

LogoffWebAction

processRequest()

EJBActionSupport

init()doStart()doEnd()

UserProfileEJBAction

processEvent()

FlightInfoEJBAction

processEvent()

FlightTransactionEJBAction

processEvent()

ServiceLocatorImplwebController : WebControllersession : HttpSession

getWebClientController()sessionCreated()sessionDestroyed()

FMServiceLocatorImpl

getWebClientController()

Page 19: Process Information Factory SUN J2EE Architecture (Introduction, J2EE Patterns, Samples) -- Understanding the SUN J2EE Architecture -- © Josef Schiefer,

SUN J2EE Architecture

Typical Web Request : ScreenFlowManager

: WebAction

: RequestDispatcher : Customerh

: MainServlet : RequestProcessor : WebController : EJBControl lerEJB : StateMachine

: EJBAction

Here is the business logic executed.

doPost()

forward(nextScreen)

Web Page

getNextScreen()

nextScreen

processRequest()

doStart()

processRequest()

Event

doEnd()

handleEvent()handleEvent()

processEvent

processEvent()

EventResponseEventResponse

EventResponse

EventResponse

Page 20: Process Information Factory SUN J2EE Architecture (Introduction, J2EE Patterns, Samples) -- Understanding the SUN J2EE Architecture -- © Josef Schiefer,

SUN J2EE Architecture

Price Itinerary : FlightManagementFacadeEJB : FlightInformationEJB : FlightEJB : SeatsInfoEJB : FlightInfoEJBAction

getFlightInformation()

FlightInformation

calculateItineraryPrice()

* getSeatsInfos()

The information which fl ights are part of the itinerary are contained in the event information.

SeatsInfos

*getPrice()

Price

summarized flight prices

* getFlight()

Page 21: Process Information Factory SUN J2EE Architecture (Introduction, J2EE Patterns, Samples) -- Understanding the SUN J2EE Architecture -- © Josef Schiefer,

SUN J2EE Architecture

Component Diagram

CustomerTavelAgent.JAR<<fil...

MainServlet<<Servle...

FlightManager.EAR<<fil...

FlightManager.WAR<<fil...

SignOn.JAR<<fil...

FlightManagement.JAR<<fil...

JSP Pages

webactions

actions

events

controller

ejb

web

screenflow

RequestProcessor

ServiceLocator

WebController

ScreenFlowManager

FlowHandler

FlowHandlerException

WebAction

WebActionSupport

WebActionExceptionEJBControllerEJB<<SessionBea...

StateMachine

EJBAction

EJBActionSupport

FlightInformation.JAR<<fil...

Page 22: Process Information Factory SUN J2EE Architecture (Introduction, J2EE Patterns, Samples) -- Understanding the SUN J2EE Architecture -- © Josef Schiefer,

SUN J2EE Architecture

Summary

5 Tiers Architecture Event objects are used to pass data between the layers Heavy usage of local interfaces for EJBs (support of fine-grained

objects) Web Action / EJB Actions Web Controller / EJB Controller EJB/Web Packaging Screen Dispatchers / Screen Management / Screen Mappings J2EE Patterns

http://developer.java.sun.com/developer/technicalArticles/J2EE/patterns

J2EE Blueprintshttp://java.sun.com/blueprints