TicketMonsterTutorial i Ticket Monster Tutorial TicketMonsterTutorial ii Contents I WhatisTicketMonster? 1 1 Preamble 2 2 Usecases 3 2.1 Whatcanendusersdo? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.2 Whatcanadministratorsdo? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3 Architecture 6 4 Howcanyourunit? 7 4.1 BuildingTicketMonster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 4.2 RunningTicketMonster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 4.2.1 RunningTicketMonsterlocally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 4.2.2 RunningTicketMonsterinOpenShift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 5 Learnmore 9 II Introduction&GettingStarted 10 6 PurposeandTargetAudience 11 7 Installation 13 8 CreatinganewJavaEE6projectwithMaven 15 9 Exploringthenewlygeneratedproject 25 10 AddinganewentityusingForge 31 11 Reviewingpersistence.xml&updatingimport.sql 37 12 AddinganewentityusingJBossDeveloperStudio 38 13 Deployment 45 TicketMonsterTutorial iii 14 AddingaJAX-RSRESTfulwebservice 50 15 AddingajQueryMobileclientapplication 60 16 Conclusion 81 16.1 Cleaningupthegeneratedcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 III BuildingthepersistencelayerwithJPA2andBeanValidation 83 17 Whatwillyoulearnhere? 84 18 Yourfirstentity 85 19 Databasedesign&relationships 91 19.1 Mediaitems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 19.2 Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 19.3 Shows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 19.4 Performances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 19.5 Venue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 19.6 Sections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 19.7 Booking,Ticket&Seat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 20 Connectingtothedatabase 114 21 Populatingtestdata 116 22 Conclusion 118 IV BuildingTheBusinessServicesWithJAX-RS 119 23 WhatWillYouLearnHere? 120 24 BusinessServicesAndTheirRelationships 121 25 Preparations 122 25.1 AddingJacksonCore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 25.2 VerifyingtheversionsoftheJBossBOMs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 25.3 EnablingCDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 25.4 Addingutilityclasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 26 InternalServices 124 26.1 TheMediaManager. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 26.2 TheSeatAllocationService . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 TicketMonsterTutorial iv 27 JAX-RSServices 130 27.1 InitializingJAX-RS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 27.2 ABaseServiceForReadOperations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 27.3 RetrievingVenues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 27.4 RetrievingEvents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 27.5 Creatinganddeletingbookings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 28 Testingtheservices 141 28.1 ABasicDeploymentClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 28.2 WritingRESTfulservicetests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 28.3 Runningthetests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 28.3.1 Executingtestsfromthecommandline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 28.3.2 RunningArquilliantestsfromwithinEclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 V BuildingTheUserUIUsingHTML5 149 29 WhatWillYouLearnHere? 150 30 First,thebasics 151 30.1 Client-sideMVCSupport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 30.2 Modularity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 30.3 Templating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 30.4 Mobileanddesktopversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 31 Settingupthestructure 154 31.1 Routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 32 Settinguptheinitialviews 160 33 DisplayingEvents 162 33.1 TheEventmodel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 33.2 TheEventscollection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 33.3 TheEventsViewview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 34 Viewingasingleevent 166 35 CreatingBookings 172 36 Mobileview 181 36.1 Settingupthestructure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 36.2 Thelandingpage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 36.3 Theeventsview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 36.4 Displayinganindividualevent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 36.5 Bookingtickets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 TicketMonsterTutorial v 37 MoreResources 198 VI BuildingtheAdministrationUIusingForge 199 38 WhatWillYouLearnHere? 200 39 SettingupForge 201 39.1 JBossEnterpriseApplicationPlatform6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 39.2 JBossAS7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 39.3 RequiredForgePlugins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 40 GettingstartedwithForge 202 41 GeneratingtheCRUDUI 204 41.1 GeneratetheRESTresourcesfromtheJPAentities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 41.2 Updatetheproject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 41.3 ScaffoldtheAngularJSUIfromtheJPAentities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 42 TesttheCRUDUI 206 43 MakesomechangestotheUI 207 VII BuildingTheStatisticsDashboardUsingHTML5andJavaScript 212 44 WhatWillYouLearnHere? 213 45 ImplementingtheMetricsAPI 214 46 CreatingtheBotservice 218 47 DisplayingMetrics 226 47.1 TheMetricsmodel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 47.2 TheMetricscollection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 47.3 TheMetricsViewview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 48 DisplayingtheBotinterface 229 48.1 TheBotmodel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 48.2 TheBotViewview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 49 Creatingthedashboard 233 49.1 CreatingacompositeMonitorview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 49.2 Configuretherouter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 TicketMonsterTutorial vi VIII CreatinghybridmobileversionsoftheapplicationwithApacheCordova 235 50 Whatwillyoulearnhere? 236 51 Whatarehybridmobileapplications? 237 52 Tweakyourapplicationforremoteaccess 238 53 DownloadingApacheCordova 240 54 CreatinganAndroidhybridmobileapplication 241 54.1 CreatinganAndroidprojectusingApacheCordova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 54.2 AddingApacheCordovatoTicketMonster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 55 CreatinganiOShybridmobileapplication 250 55.1 CreatinganiOSprojectusingApacheCordova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 55.2 AddingApacheCordovaforiOStoTicketMonster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 56 Conclusion 253 IX Addingadatagrid 254 57 WhatWillYouLearnHere? 255 58 Theproblemathand 256 59 AddingInfinispan 257 60 Configuringtheinfrastructure 259 61 Usingcachesforseatreservations 261 62 Implementingcarts 264 63 Conclusion 286 X Addingafull-textsearchengine 287 64 Whatwillyoulearnhere? 288 65 Settinguptheinfrastructure 289 65.1 Setupthedependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 65.2 Addsomeconfiguration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 TicketMonsterTutorial vii 66 Buildthecoresearchengine 291 66.1 Indexingthedomainmodel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 66.1.1 Addingthemetadatatoourdomainmodel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 66.1.2 Indexingexistingdata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 66.2 Writingthesearchengine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 66.2.1 BuildtheApacheLucenequery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 66.2.2 Buildtheobjectquery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 66.3 ExposingsearchtotheUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 67 Filterresultsbylocation 302 68 Enableandexposenavigationbyfacets 307 68.1 Indexingdataforfaceting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 68.2 Createthefacetingrequests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 68.3 Returnthefacetinginformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 68.4 Selectingafacet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 68.5 ExposingfacetingtotheUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 69 Moreresources 319 TicketMonsterTutorial 1/319 Part I What is TicketMonster? TicketMonsterTutorial 2/319 Chapter 1 Preamble TicketMonsterisanexampleapplicationthatfocusesonJavaEE6-JPA2,CDI,EJB3.1andJAX-RSalongwithHTML5and jQueryMobile. Itisamoderatelycomplexapplicationthatdemonstrateshowtobuildmodernwebapplicationsoptimizedfor mobile & desktop. TicketMonster is representative of an online ticketing broker - providing access to events (e.g. concerts, shows,etc)withanonlinebookingapplication. Apartfrombeingademo, TicketMonsterprovidesanalreadyexistingapplicationstructurethatyoucanuseasastartingpoint foryourapp. Youcouldtryoutyourusecases,testyourownideas,or,contributeimprovementsbacktothecommunity. ForkusonGitHub! The accompanying tutorials walk you through the various tools & technologies needed to build TicketMonster on your own. AlternativelyyoucandownloadTicketMonsterasacompletedapplicationandimportitintoyourfavoriteIDE. Beforewediveintothecode,let’sdiscusstherequirementsfortheapplication. TicketMonsterTutorial 3/319 Chapter 2 Use cases Wehavegroupedthecurrentusecasesintwomajorcategories: enduseroriented,andadministrative. 2.1 What can end users do? Theendusersoftheapplicationwanttoattendsomecoolevents.Theywilltrytofindshows,createbookings,orcancelbookings. Theusecasesare: • lookforcurrentevents; • lookforvenues; • selectshows(eventstakingplaceatspecificvenues)andchooseaperformancetime; • booktickets; • viewcurrentbookings; • cancelbookings;
Description: