Mastering Enterprise Javabeans™
Total Page:16
File Type:pdf, Size:1020Kb
Mastering Enterprise JavaBeans™ Second Edition Mastering Enterprise JavaBeans™ Second Edition Ed Roman Scott Ambler Tyler Jewell Wiley Computer Publishing John Wiley & Sons, Inc. NEW YORK • CHICHESTER • WEINHEIM • BRISBANE • SINGAPORE • TORONTO Publisher: Robert Ipsen Editor: Robert M. Elliott Developmental Editor: Emilie Herman Managing Editor: John Atkins Associate New Media Editor: Brian Snapp Text Design & Composition: MacAllister Publishing Services, LLC Designations used by companies to distinguish their products are often claimed as trade- marks. In all instances where John Wiley & Sons, Inc., is aware of a claim, the product names appear in initial capital or ALL CAPITAL LETTERS. Readers, however, should con- tact the appropriate companies for more complete information regarding trademarks and registration. This book is printed on acid-free paper. Copyright © 2002 by The Middleware Company. All rights reserved. Published by John Wiley & Sons, Inc. Published simultaneously in Canada. No part of this publication may be reproduced, stored in a retrieval system or transmitted in any form or by any means, electronic, mechanical, photocopying, recording, scanning or otherwise, except as permitted under Sections 107 or 108 of the 1976 United States Copy- right Act, without either the prior written permission of the Publisher, or authorization through payment of the appropriate per-copy fee to the Copyright Clearance Center, 222 Rosewood Drive, Danvers, MA 01923, (978) 750-8400, fax (978) 750-4744. Requests to the Publisher for permission should be addressed to the Permissions Department, John Wiley & Sons, Inc., 605 Third Avenue, New York, NY 10158-0012, (212) 850-6011, fax (212) 850- 6008, E-Mail: [email protected]. This publication is designed to provide accurate and authoritative information in regard to the subject matter covered. It is sold with the understanding that the publisher is not engaged in professional services. If professional advice or other expert assistance is required, the services of a competent professional person should be sought. Library of Congress Cataloging-in-Publication Data: ISBN: 0-471-41711-4 Printed in the United States of America. 10 9 8 7 6 5 4 3 2 1 To my wonderful wife, Younhi. —Ed Roman CONTENTS Acknowledgments xix Preface xxi Introduction xxv About the Author xxxi Part One Overview 1 Chapter 1 Overview 3 The Motivation for EJB 4 Divide and Conquer to the Extreme 5 Component Architectures 12 Introducing Enterprise JavaBeans 13 Why Java? 14 EJB as a Business Solution 14 The EJB Ecosystem 16 The Bean Provider 17 The Application Assembler 17 The EJB Deployer 18 The System Administrator 19 The Container and Server Provider 19 The Tool Vendors 20 Summary of Roles 20 The Java 2 Platform, Enterprise Edition (J2EE) 22 The J2EE Technologies 23 Summary 26 Chapter 2 EJB Fundamentals 29 Enterprise Beans 29 Types of Beans 30 Distributed Objects: The Foundation for EJB 32 Distributed Objects and Middleware 34 Explicit Middleware 34 Implicit Middleware 35 What Constitutes an Enterprise Bean? 37 The Enterprise Bean Class 37 vii viii CONTENTS The EJB Object 38 The Home Object 44 The Local Interfaces 46 Deployment Descriptors 50 Vendor-Specific Files 51 Ejb-Jar File 51 Summary of Terms 52 Summary 54 Chapter 3 Writing Your First Bean 55 How to Develop an EJB Component 55 The Remote Interface 57 The Local Interface 58 The Home Interface 58 The Local Home Interface 59 The Bean Class 62 The Deployment Descriptor 66 The Vendor-Specific Files 67 The Ejb-jar File 67 Deploying the Bean 68 The Optional EJB Client JAR file 68 Understanding How to Call Beans 69 Looking up a Home Object 70 Running the System 74 The Server-Side Output 75 The Client-Side Output 75 Implementing Component Interfaces 75 A Solution 76 Summary 77 Part Two The Triad of Beans 79 Chapter 4 Introduction to Session Beans 81 Session Bean Lifetime 81 Session Bean Subtypes 82 Stateful Session Beans 82 Stateless Session Beans 83 Special Characteristics of Stateful Session Beans 84 Achieving the Effect of Pooling with Stateful Beans 85 The Rules Governing Conversational State 86 Activation and Passivation Callbacks 87 CONTENTS ix Method Implementation Summary 89 A Simple Stateful Session Bean 89 Life Cycle Diagrams for Session Beans 100 Summary 103 Chapter 5 Introduction to Entity Beans 105 Persistence Concepts 105 Java Object Serialization 106 Object-Relational Mapping 106 Object Databases 109 What Is an Entity Bean? 109 About the Files that Make up an Entity Bean 112 Features of Entity Beans 112 Entity Beans Survive Failures 112 Entity Bean Instances Are a View into a Database 113 Several Entity Bean Instances May Represent the Same Underlying Data 114 Entity Bean Instances Can Be Pooled 116 There Are Two Ways to Persist Entity Beans 118 Creation and Removal of Entity Beans 119 Entity Beans Can Be Found 121 You Can Modify Entity Bean Data without Using EJB 123 Entity Contexts 124 getEJBLocalObject() / getEJBObject() 124 getPrimaryKey() 125 Summary 126 Chapter 6 Writing Bean-Managed Persistent Entity Beans 127 Entity Bean Coding Basics 127 Finding Existing Entity Beans: ejbFind() 129 Bean-Managed Persistence Example: A Bank Account 136 Account.java 137 AccountLocal.java 138 AccountHome.java 138 AccountLocalHome.java 138 AccountPK.java 139 AccountBean.java 143 AccountException.java 156 Client.java 156 The Deployment Descriptor 156 The Container-Specific Deployment Descriptor 161 Setting up the Database 161 Running the Client Program 161 Server-Side Output 162 Client-Side Output 163 x CONTENTS Putting It All Together: Walking through a BMP Entity Bean’s Life Cycle 163 Summary 166 Chapter 7 Writing Container-Managed Persistent Entity Beans 167 Features of CMP Entity Beans 167 CMP Entity Beans Are Subclassed 167 CMP Entity Beans Have No Declared Fields 168 CMP Get/Set Methods Are Defined in the Subclass 170 CMP Entity Beans Have an Abstract Persistence Schema 172 CMP Entity Beans Have a Query Language 173 CMP Entity Beans Can Have ejbSelect() Methods 175 Implementation Guidelines for Container-Managed Persistence 176 Container-Managed Persistence Example: A Product Line 180 Product.java 181 ProductLocal.java 182 ProductHome.java 182 ProductLocalHome.java 184 ProductPK.java 184 ProductBean.java 187 The Deployment Descriptor 191 The Container-Specific Deployment Descriptor 195 Client.java 196 Running the Client Program 196 The Life Cycle of a CMP Entity Bean 200 Summary 200 Chapter 8 Introduction to Message-Driven Beans 201 Motivation to Use Message-Driven Beans 201 The Java Message Service (JMS) 203 Messaging Domains 204 The JMS API 206 Integrating JMS with EJB 211 What Is a Message-Driven Bean? 212 Developing Message-Driven Beans 214 The Semantics 214 A Simple Example 215 Advanced Concepts 223 Message-Driven Bean Gotchas 225 Message Ordering 225 Missed ejbRemove() Calls 226 Poison Messages 228 CONTENTS xi How to Return Results Back to Message Producers 230 The Future: Asynchronous Method Invocations 235 Summary 236 Chapter 9 Adding Functionality to Your Beans 237 Calling Beans from Other Beans 237 Default JNDI Lookups 238 Understanding EJB References 239 Resource Factories 241 Environment Properties 244 Understanding EJB Security 245 Security Step 1: Authentication 246 Security Step 2: Authorization 257 Security Propagation 266 Understanding Handles 268 Home Handles 269 Summary 270 Part Three Advanced Enterprise JavaBeans Concepts 271 Chapter 10 Transactions 275 Motivation for Transactions 276 Atomic Operations 276 Network or Machine Failure 277 Multiple Users Sharing Data 278 Benefits of Transactions 279 The ACID Properties 280 Transactional Models 282 Flat Transactions 282 Nested Transactions 284 Other Transactional Models 286 Enlisting in Transactions with Enterprise JavaBeans 286 Underlying Transaction System Abstraction 287 Declarative, Programmatic, and Client-Initiated Transactions 287 Choosing a Transaction Style 290 Container-Managed Transactions 292 EJB Transaction Attribute Values 294 Programmatic Transactions in EJB 300 CORBA’s Object Transaction Service (OTS) 300 The Java Transaction Service (JTS) 301 The Java Transaction API (JTA) 301 Declarative versus Programmatic Transactions Example 304 xii CONTENTS Transactions from Client Code 306 Transactional Isolation 307 The Need for Concurrency Control 308 Isolation and EJB 309 The Dirty Read Problem 311 The Unrepeatable Read Problem 312 The Phantom Problem 313 Transaction Isolation Summary 314 Isolation and EJB 315 Pessimistic and Optimistic Concurrency Control 316 Distributed Transactions 316 Durability and the Two-Phase Commit Protocol 317 The Transactional Communications Protocol and Transaction Contexts 318 Designing Transactional Conversations in EJB 320 Summary 323 Chapter 11 BMP and CMP Relationships 325 The CMP and BMP Difference 326 Cardinality 326 1:1 Relationships 328 1:N Relationships 332 M:N Relationships 336 Directionality 344 Implementing Directionality with BMP 344 Implementing Directionality with CMP 345 Directionality May Not Map to Database Schemas 347 Bidirectional or Unidirectional? 349 Lazy Loading 349 Aggregation vs. Composition and Cascading Deletes 350 Relationships and EJB-QL 352 Recursive Relationships 353 Circular Relationships 354 Referential Integrity 355 Relationships, Referential Integrity, and Client Code 357 Summary 360 Chapter 12 Persistence Best Practices 361 When to Use Entity Beans 362 Control 362 Parameter Passing Analogy 362 Procedural Versus Object-Oriented 363 Caching 363 CONTENTS xiii Enforcement of Schema Independence 364 Ease of Use 364 Migration