Designing Enterprise Applications with the Java TM 2 Platform, Enterprise Edition Nicholas Kassem and the Enterprise Team Version 1.0.1 Final Release October 3, 2000 Copyright 2000 Sun Microsystems, Inc. 901 San Antonio Road, Palo Alto, CA 94303, U.S.A. All rights reserved. This product or document is protected by copyright and distributed under licenses restricting its use, copying, distribution, and decompilation. No part of this product or documentation may be reproduced in any form by any means without prior written authorization of Sun and its licensors, if any. Third party software, including font technology, is copyrighted and licensed from Sun suppliers. Sun, Sun Microsystems, the Sun Logo, Java, JavaServer Pages, Enterprise JavaBeans, Java Compatible, JDK, JDBC, J2EE, J2SE, EJB, JavaBeans, JavaMail, Write Once, Run Anywhere, and Java Naming and Directory Interface are trademarks or registered trademarks of Sun Microsystems, Inc in the U.S. and other countries. UNIX is a registered trademark in the United States and other countries, exclusively licensed through X/Open Company, Ltd. DOCUMENTATION IS PROVIDED "AS IS" AND ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS ARE HELD TO BE LEGALLY INVALID. Copyright 2000 Sun Microsystems, Inc., 901 San Antonio Road, Palo Alto, CA 94303, Etats-Unis. Tous droits réservés. Ce produit ou document est protégé par un copyright et distribué avec des licences qui en restreignent l’utilisation, la copie, la distribution, et la décompilation. Aucune partie de ce produit ou de sa documentation associée ne peut être reproduite sous aucune forme, par quelque moyen que ce soit, sans l’autorisation préalable et écrite de Sun et de ses bailleurs de licence, s’il y en a. Le logiciel détenu par des tiers, et qui comprend la technologie relative aux polices de caractères, est protégé par un copyright et licencié par des fournisseurs de Sun. Sun, Sun Microsystems, le logo Sun Logo, Java, JavaServer Pages, Enterprise JavaBeans, Java Compatible, JDK, JDBC, J2EE, J2SE, EJB, JavaBeans, JavaMail, Write Once, Run Anywhere, et Java Naming and Directory Interface sont des marques de fabrique ou des marques déposées de Sun Microsystems, Inc. aux Etats-Unis et dans d’autres pays. UNIX est une marque enregistree aux Etats-Unis et dans d’autres pays et licenciée exclusivement par X/Open Company Ltd. LA DOCUMENTATION EST FOURNIE "EN L’ETAT" ET TOUTES AUTRES CONDITIONS, DECLARATIONS ET GARANTIES EXPRESSES OU TACITES SONT FORMELLEMENT EXCLUES, DANS LA MESURE AUTORISEE PAR LA LOI APPLICABLE, Y COMPRIS NOTAMMENT TOUTE GARANTIE IMPLICITE RELATIVE A LA QUALITE MARCHANDE, A L’APTITUDE A UNE UTILISATION PARTICULIERE OU A L’ABSENCE DE CON- TREFACON. Contents v Foreword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xiii Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xvii 1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 1.1 Challenges of Enterprise Application Development. . . . . . . . . . . . . . 3 1.1.1 Programming Productivity . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1.2 Response to Demand. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.1.3 Integration with Existing Systems. . . . . . . . . . . . . . . . . . . . . 5 1.1.4 Freedom to Choose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.1.5 Maintaining Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2 The Platform for Enterprise Solutions . . . . . . . . . . . . . . . . . . . . . . . . 6 1.2.1 J2EE Platform Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.2.2 J2EE Platform Benefits . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.3 J2EE Application Scenarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.3.1 Multitier Application Scenario . . . . . . . . . . . . . . . . . . . . . . 16 1.3.2 Stand-Alone Client Scenario. . . . . . . . . . . . . . . . . . . . . . . . 18 1.3.3 Web-Centric Application Scenario . . . . . . . . . . . . . . . . . . . 19 1.3.4 Business-to-Business Scenario . . . . . . . . . . . . . . . . . . . . . . 20 1.3.5 A Note on the MVC Architecture . . . . . . . . . . . . . . . . . . . . 21 1.4 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2 J2EE Platform Technologies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25 2.1 Component Technologies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.1.1 Applets and Application Clients . . . . . . . . . . . . . . . . . . . . . 26 2.1.2 Web Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.1.3 Enterprise JavaBeans Components . . . . . . . . . . . . . . . . . . . 28 2.1.4 Components, Containers, and Services . . . . . . . . . . . . . . . . 29 2.2 Platform Roles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 2.2.1 J2EE Product Provider . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.2.2 Application Component Provider . . . . . . . . . . . . . . . . . . . . 31 2.2.3 Application Assembler . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 CONTENTS vi 2.2.4 Deployer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.2.5 System Administrator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.2.6 Tool Provider. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.3 Platform Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 2.3.1 Naming Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 2.3.2 Deployment Services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 2.3.3 Transaction Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 2.3.4 Security Services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.4 Service Technologies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 2.4.1 JDBC API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.4.2 Java Transaction API and Service. . . . . . . . . . . . . . . . . . . . 40 2.4.3 Java Naming and Directory Interface . . . . . . . . . . . . . . . . . 40 2.4.4 Connector Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 2.5 Communication Technologies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 2.5.1 Internet Protocols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2.5.2 Remote Method Invocation Protocols. . . . . . . . . . . . . . . . . 42 2.5.3 Object Management Group Protocols. . . . . . . . . . . . . . . . . 43 2.5.4 Messaging Technologies. . . . . . . . . . . . . . . . . . . . . . . . . . . 44 2.5.5 Data Formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 2.6 Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 3 The Client Tier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49 3.1 Requirements and Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3.1.1 Operating Environment. . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3.1.2 Deployment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 3.1.3 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 3.2 Overview of Client Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 3.3 Web Clients. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3.3.1 Protocols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 3.3.2 Content Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 3.3.3 Types of Web Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 3.4 EJB Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 3.4.1 Protocols and Facilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 3.4.2 Strengths and Weaknesses . . . . . . . . . . . . . . . . . . . . . . . . . 63 3.4.3 Types of EJB Clients. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 3.5 Enterprise Information System Clients. . . . . . . . . . . . . . . . . . . . . . . 67 3.6 Designing for Multiple Types of Client . . . . . . . . . . . . . . . . . . . . . . 68 3.6.1 Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 3.6.2 View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 CONTENTS vii 3.6.3 Controller. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 3.7 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 4 The Web Tier. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75 4.1 Web Applications and Web Containers . . . . . . . . . . . . . . . . . . . . . . 75 4.2 Dynamic Content Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 4.2.1 Common Gateway Interface . . . . . . . . . . . . . . . . . . . . . . . . 76 4.2.2 Servlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 4.2.3 JavaServer Pages Technology. . . . . . . . . . . . . . . . . . . . . . . 78 4.3 Servlets and JSP Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 4.3.1 Web Component Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 4.3.2 Servlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 4.3.3 JSP Pages Versus Servlets. . . . . . . . . . . . . . . . . . . . . . . . . . 85 4.4 JSP Page Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 4.4.1 JavaBeans Components. . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 4.4.2 Custom Tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 4.4.3 Using Scriptlets and Expressions . . . . . . . . . . . . . . . . . . . . 88 4.5 Internationalization and Localization . . . . . . . . . . . . . . . . . . . . . . . . 88 4.5.1 Internationalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 4.5.2 Localization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 4.6 Application Designs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 4.6.1 Applications with Basic JSP Pages and Servlets. . . . . . . . . 97 4.6.2 Applications with Modular Components. . . . . . . . . . . . . . . 98 4.6.3 EJB-Centric Applications . . . . . . . . . . . . . . . . . . . . . . . . . 103 4.7 Application Migration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 4.7.1 Migrating a Web-Centric Application to Use Enterprise Beans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 4.8 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 5 The Enterprise JavaBeans Tier. . . . . . . . . . . . . . . . . . . . . . . . . . . . .113 5.1 Business Logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 5.1.1 Common Requirements of Business Objects . . . . . . . . . . 115 5.2 Enterprise Beans as J2EE Business Objects . . . . . . . . . . . . . . . . . . 117 5.2.1 Enterprise Beans and EJB Containers. . . . . . . . . . . . . . . . 118 5.3 Entity Beans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 5.3.1 Guidelines for Using Entity Beans . . . . . . . . . . . . . . . . . . 122 5.3.2 Persistence in Entity Beans . . . . . . . . . . . . . . . . . . . . . . . . 124 5.4 Session Beans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 5.4.1 Stateful Session Beans. . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 CONTENTS viii 5.4.2 Stateless Session Beans. . . . . . . . . . . . . . . . . . . . . . . . . . . 128 5.5 Design Guidelines. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 5.5.1 Data Access Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 5.5.2 Value Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 5.5.3 Session Beans as a Facade to Entity Beans. . . . . . . . . . . . 135 5.5.4 Master-Detail Modeling Using Enterprise Beans . . . . . . . 136 5.6 Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 6 The Enterprise Information System Tier. . . . . . . . . . . . . . . . . . . .141 6.1 Enterprise Information System Capabilities and Limitations. . . . . 142 6.2 Enterprise Information System Integration Scenarios . . . . . . . . . . 143 6.2.1 An Internet E-Store Application . . . . . . . . . . . . . . . . . . . . 143 6.2.2 An Intranet Human Resources Application . . . . . . . . . . . 144 6.2.3 A Distributed Purchasing Application . . . . . . . . . . . . . . . 145 6.3 Relational Database Management System Access . . . . . . . . . . . . . 146 6.4 Other Enterprise Information System Access. . . . . . . . . . . . . . . . . 146 6.5 Application Component Provider Tasks. . . . . . . . . . . . . . . . . . . . . 147 6.6 Application Programming Model . . . . . . . . . . . . . . . . . . . . . . . . . . 148 6.7 Programming Access to Data and Functions . . . . . . . . . . . . . . . . . 149 6.7.1 Client API for Enterprise Information System Access . . . 149 6.7.2 Tools for Application Development . . . . . . . . . . . . . . . . . 150 6.7.3 Access Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 6.8 Connections. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 6.8.1 Establishing a Connection. . . . . . . . . . . . . . . . . . . . . . . . . 154 6.8.2 Guidelines for Connection Management. . . . . . . . . . . . . . 155 6.9 Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 6.9.1 Security Architecture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 6.9.2 Application Programming Model . . . . . . . . . . . . . . . . . . . 158 6.9.3 Resource Signon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 6.10 J2EE Connector Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 6.11 Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 7 Packaging and Deployment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .165 7.1 Roles and Tasks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 7.2 Packaging J2EE Applications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 7.2.1 EJB Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 7.2.2 Packaging Components Into EJB Modules. . . . . . . . . . . . 170 7.2.3 Web Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 7.2.4 Packaging Components Into Web Modules . . . . . . . . . . . 173 CONTENTS ix 7.2.5 Application Client Modules . . . . . . . . . . . . . . . . . . . . . . . 174 7.3 Deployment Descriptors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 7.3.1 Specifying Deployment Descriptor Elements . . . . . . . . . . 176 7.4 Deployment Tools. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 7.4.1 Deployment Tool Actions . . . . . . . . . . . . . . . . . . . . . . . . . 187 7.4.2 Deployment Tool Requirements . . . . . . . . . . . . . . . . . . . . 189 7.5 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 8 Transaction Management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .197 8.1 Properties of Transactions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 8.2 J2EE Platform Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 8.3 Scenarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 8.3.1 Accessing Multiple Databases. . . . . . . . . . . . . . . . . . . . . . 199 8.3.2 Accessing Multiple Enterprise Information Systems From Multiple EJB Servers. . . . . . . . . . . . . . . . . . . . . . . . 200 8.4 JTA Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 8.4.1 JTA and JTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 8.5 Transactions in Applets and Application Clients . . . . . . . . . . . . . . 202 8.6 Transactions in Web Components . . . . . . . . . . . . . . . . . . . . . . . . . 202 8.7 Transactions in Enterprise Beans . . . . . . . . . . . . . . . . . . . . . . . . . . 203 8.7.1 Bean-Managed Transaction Demarcation. . . . . . . . . . . . . 204 8.7.2 Container-Managed Transaction Demarcation . . . . . . . . . 204 8.7.3 Transaction Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 8.8 Transactions in Enterprise Information Systems . . . . . . . . . . . . . . 208 8.8.1 JTA Transactions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 8.8.2 Resource Manager Local Transactions . . . . . . . . . . . . . . . 209 8.8.3 Choosing Between JTA and Local Transactions. . . . . . . . 209 8.8.4 Compensating Transactions. . . . . . . . . . . . . . . . . . . . . . . . 210 8.8.5 Isolation Level. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 8.9 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 9 Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .215 9.1 Security Threats and Mechanisms . . . . . . . . . . . . . . . . . . . . . . . . . 215 9.2 Authentication. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 9.2.1 Protection Domains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 9.2.2 Authentication Mechanisms . . . . . . . . . . . . . . . . . . . . . . . 220 9.2.3 Authentication Call Patterns . . . . . . . . . . . . . . . . . . . . . . . 223 9.2.4 Auto-Registration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 9.2.5 Exposing Authentication Boundaries with References. . . 225 CONTENTS x 9.3 Authorization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 9.3.1 Declarative Authorization . . . . . . . . . . . . . . . . . . . . . . . . . 226 9.3.2 Programmatic Authorization. . . . . . . . . . . . . . . . . . . . . . . 227 9.3.3 Declarative Versus Programmatic Authorization . . . . . . . 228 9.3.4 Isolation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 9.3.5 Identity Selection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 9.3.6 Encapsulation for Access Control. . . . . . . . . . . . . . . . . . . 229 9.3.7 Controlling Access to J2EE Resources. . . . . . . . . . . . . . . 230 9.3.8 Example. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 9.4 Protecting Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 9.4.1 Integrity Mechanisms . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 9.4.2 Confidentiality Mechanisms . . . . . . . . . . . . . . . . . . . . . . . 235 9.4.3 Identifying Sensitive Components . . . . . . . . . . . . . . . . . . 236 9.4.4 Ensuring Confidentiality of Web Resources. . . . . . . . . . . 236 9.5 Auditing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 9.6 Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 10 The Sample Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .241 10.1 Application Functionality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 10.1.1 Scenarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 10.1.2 Functional Specification . . . . . . . . . . . . . . . . . . . . . . . . . . 247 10.2 Application Architecture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 10.2.1 Application Modules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 10.2.2 Application Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 10.3 The View. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 10.3.1 Shopping Interaction Interface . . . . . . . . . . . . . . . . . . . . . 256 10.3.2 JSP Pages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 10.3.3 Examples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 10.4 The Model. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 10.4.1 State in the J2EE Platform . . . . . . . . . . . . . . . . . . . . . . . . 273 10.4.2 Persistent Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 10.5 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 10.6 The Controller. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 10.6.1 Main . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 10.6.2 RequestProcessor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 10.6.3 RequestToEventTranslator . . . . . . . . . . . . . . . . . . . . . . . . 285 10.6.4 ShoppingClientControllerWebImpl . . . . . . . . . . . . . . . . . 287 10.6.5 ShoppingClientController . . . . . . . . . . . . . . . . . . . . . . . . . 288 10.6.6 StateMachine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 CONTENTS xi 10.6.7 ScreenFlowManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 10.6.8 Model-View Synchronization . . . . . . . . . . . . . . . . . . . . . . 294 10.7 MVC Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 10.8 Stateless Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 10.8.1 Example: A Mailer Bean. . . . . . . . . . . . . . . . . . . . . . . . . . 298 10.9 Deployment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 10.10 Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 10.11 Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 10.11.1 Requirements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 10.11.2 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 10.12 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 Afterword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .313 Glossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .315 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .333 [...]... multitier enterprise applications refer to the J2EE Developer’s Guide, available at: http:/ /java. sun.com/j2ee/j2sdkee/techdocs/index.html The J2EE technologies cited in this book are described in their specifications: • Java 2 Platform, Enterprise Edition Specification, Version 1 .2 (J2EE specification) Copyright 1999, Sun Microsystems, Inc Available at http:/ /java. sun.com/j2ee/download.html • Java 2 Platform,... their foresight and commitment In many ways, this book represents the culmination of these collective efforts Designing Enterprise Applications with the Java 2 Platform, Enterprise Edition effectively demonstrates how this new platform simplifies and streamlines the design, development, and deployment of a new generation of enterprise applications Jon Kannegaard Vice President and Deputy Director Sun... ENTERPRISE SOLUTIONS Figure 1.1 J2EE Environment 1 .2. 1 .2 Container-Based Component Management Central to the J2EE component-based development model is the notion of containers Containers are standardized runtime environments that provide specific component services Components can expect these services to be available on any J2EE platform from any vendor For example, all J2EE Web containers provide runtime... SOLUTIONS 1 .2. 2.1 Simplified Architecture and Development The J2EE platform supports a simplified, component-based development model Because it’s based on the Java programming language and the Java 2 Platform, Standard Edition (J2SETM platform), this model offers Write Once, Run Anywhere portability, supported by any server product that conforms to the J2EE standard The component-based J2EE development model... FOREWORD applications The key J2EE specifications are published in Java 2 Platform, Enterprise Edition : Platform and Components Specifications (also from Addison-Wesley), while supplemental specifications are available at http:/ /java. sun.com/ j2ee The reference implementation used to create the examples in this book is available on the Sun Microsystems Java Software Web site at http:// java. sun.com/j2ee/download.html... California March 20 , 20 00 xv Preface THIS book describes a standard approach to designing multitier enterprise applications with the Java 2 Platform, Enterprise Edition The book does not contain information on how to use individual J2EE™ technologies to develop applications, but rather focuses on guidelines for distributing application functionality across tiers and choosing among design options within each... The J2EE client tier provides support for a variety of client types, both within the enterprise firewall and outside Clients can be offered through Web browsers by using plain HTML pages, dynamic HTML generated with JavaServer PagesTM (JSPTM) technology, or Java applets Clients can also be offered as stand-alone Java language applications J2EE clients are assumed to access the middle tier primarily using... present J2EE services to users Since the service is presented by servlets in the middle tier to THE PLATFORM FOR ENTERPRISE SOLUTIONS first-tier clients using the standard HTTP protocol, it is easy to access it from practically any program running on any operating system 1 .2. 1.4 Support for Business Logic Components In the J2EE platform, middle-tier business logic is implemented in the middle tier as Enterprise. .. platform complements the EJB specification by: • Fully specifying the APIs that an enterprise bean developer can use to implement enterprise beans • Defining the larger, distributed programming environment in which enterprise beans are used as business logic components 1 .2. 1.5 Support for the J2EE Standard The J2EE standard is defined through a set of related specifications, key among these the J2EE specification,... provide server-side and client-side support for developing enterprise, multitier applications Such applications are typically configured as a client tier to provide the user interface, one or more middle-tier modules that provide client services and business logic for an application, and backend enterprise information systems providing data management Figure 1.1 illustrates the various components and services . Designing Enterprise Applications with the Java TM 2 Platform, Enterprise Edition Nicholas Kassem and the Enterprise Team Version 1.0.1 Final Release October 3, 20 00 Copyright 20 00 Sun. . . . 21 7 9 .2. 2 Authentication Mechanisms . . . . . . . . . . . . . . . . . . . . . . . 22 0 9 .2. 3 Authentication Call Patterns . . . . . . . . . . . . . . . . . . . . . . . 22 3 9 .2. 4 Auto-Registration. Microsystems, le logo Sun Logo, Java, JavaServer Pages, Enterprise JavaBeans, Java Compatible, JDK, JDBC, J2EE, J2SE, EJB, JavaBeans, JavaMail, Write Once, Run Anywhere, et Java Naming and Directory