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 ALLCAPITALLETTERS. 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, MA01923, (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, NY10158-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 CO NTE NTS 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:ABank 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:AProduct 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