You are on page 1of 11

863-6 FM.

qxd

6/18/07

12:54 PM

Page i

Practical JBoss® Seam
Projects

Jim Farley

com. CA 94705.springeronline. with no intention of infringement of the trademark. Matt Wade. neither the author(s) nor Apress shall have any liability to any person or entity with respect to any loss or damage caused or alleged to be caused directly or indirectly by the information contained in this work. Dominic Shakeshaft. we use the names only in an editorial fashion and to the benefit of the trademark owner.com. For information on translations. Tom Welsh Project Manager: Kylie Johnston Copy Edit Manager: Nicole Flores Copy Editor: Ami Knox Assistant Production Director: Kari Brooks-Copony Production Editor: Elizabeth Berry Compositor: Gina Rexrode Proofreader: Nancy Riddiough Indexer: Julie Grady Artist: April Milne Cover Designer: Kurt Krames Author Cover Photo: Sandra Mallalieu Manufacturing Director: Tom Debolski Distributed to the book trade worldwide by Springer-Verlag New York.com. recording. Suite 600.apress. Gary Cornell. Berkeley. Rather than use a trademark symbol with every occurrence of a trademarked name.com. Ben Renow-Clarke. NY 10013. or visit http://www.863-6 FM. Ewan Buckingham. without the prior written permission of the copyright owner and the publisher. The information in this book is distributed on an “as is” basis. fax 201-348-4505. Phone 510-549-5930. Chris Mills. Jonathan Hassell. Jeffrey Pepper. Lead Editor: Steve Anglin Technical Reviewer: Floyd Carver Editorial Board: Steve Anglin. 6th Floor. 233 Spring Street. The source code for this book is available to readers at http://www. Although every precaution has been taken in the preparation of this work. Matthew Moodie. fax 510-549-5939. Jason Gilmore. e-mail info@apress. . New York. or visit http://www. or by any information storage or retrieval system.com in the Source Code/ Download section. please contact Apress directly at 2855 Telegraph Avenue. including photocopying.apress. ISBN-13 (pbk): 978-1-59059-863-4 ISBN-10 (pbk): 1-59059-863-6 Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1 Trademarked names may appear in this book. electronic or mechanical. without warranty. Jonathan Gennick. e-mail orders-ny@springer-sbm. Inc..qxd 6/18/07 12:54 PM Page ii Practical JBoss® Seam Projects Copyright © 2007 by Jim Farley All rights reserved. Phone 1-800-SPRINGER. No part of this work may be reproduced or transmitted in any form or by any means.

The world is better for her time in it. .qxd 6/18/07 12:54 PM Page iii This book is dedicated to Madeline.863-6 FM.

qxd 6/18/07 12:54 PM Page iv .863-6 FM.

. . 99 Security . . . . . . . . . . . . . . . . . . . . 1 Seam Configuration and Administration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Rich Web Clients. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 v . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 ■INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv Acknowledgments . . . . . . . . . . xix ■CHAPTER ■CHAPTER ■CHAPTER ■CHAPTER ■CHAPTER ■CHAPTER ■CHAPTER ■CHAPTER 1 2 3 4 5 6 7 8 Introducing Seam . . . . . . . . . . . . . . . . . . . . . . . . . . . .qxd 6/18/07 12:54 PM Page v Contents at a Glance About the Author . . . . . . . . 127 Business Process Management . . . . xvii Introduction . . . . . . . . . . . . . . . .863-6 FM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Contexts and Conversations . . . . . . . . . . . . . . . . . . 21 Component Fundamentals . . . . . . 67 Structured Pageflow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

qxd 6/18/07 12:54 PM Page vi .863-6 FM.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .0 Required . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Integrated Business Processes with jBPM and JBoss Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Preparing the Application Server . . . . . . . . . . 18 Rich Internet Applications (aka Web 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 Environment . . . . . . 19 Read On. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 JavaServer Faces. . 1 Seam Simplifies Java EE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 The Gadget Catalog with JBoss Seam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 The Seam Component Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .863-6 FM. . . . . . . . . . . . . . . . . . . . . . xv Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .0) . . . . . . 28 vii . . . . . . . . 25 Installation in a Generic Java EE 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Integrated Pageflow with jPDL . . . . . . . . . . . . . . . . . . . . . . . . . . .qxd 6/18/07 12:54 PM Page vii Contents About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix ■CHAPTER 1 Introducing Seam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Running Example: A Gadget Catalog . . . . . . . . . . 4 The Gadget Catalog Without Seam . . . . . . 22 Enterprise JavaBeans 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Installation in a Generic J2EE 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Seam Component Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 ■CHAPTER 2 Seam Configuration and Administration . . . 22 Configuring JBoss 4 . . . xvii Introduction . . . . . xiii About the Technical Reviewer . . . . . . . . . . . . . . . . 19 Summary . . . . . . . . . . . . . .0 Environment . . . . . . . . . . 21 Java 5. . . . . . . . . . . . . . . . . 15 Seam Extends Java EE . . . . . . . .

. . . . . . . . . . . . . . . . . . . . 98 . . . . . . . . . . . .863-6 FM. . . . . . . . . . . . . . . . 41 Browser-Accessible Components . . . . . . . . . 30 Web Component Configuration . . . . . . . . . 66 ■CHAPTER 4 Contexts and Conversations . . . . . . . . . . . . . . . . . 41 Extending the Gadget Catalog: Managing Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Seam Configuration Files . . . . . . . . . . . . . . . . Explicit Conversations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 ■CHAPTER 3 Component Fundamentals . . . . . . . . . . 88 Nesting Conversations . . . . . . . . . . . . . . 77 Starting and Ending Conversations . . . . . . . . . . . . . . . . . . . . . . 29 Configure Facelets . . . . . . . . . . . . . . . . . . . . . 33 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .qxd viii 6/18/07 12:54 PM Page viii ■CONTENTS Configuring a Seam Application . . . . . . . . . 47 Using EJBs As JSF Managed Beans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Component Name Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Component Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 Workspaces: Managing Concurrent Conversations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 EJB Component Configuration . . . . . . . . . . . . . . . . . . . . . . . . 74 Conversations and Other Contexts . . . . . 28 Install Seam Core Libraries . . 74 The Motivation for Conversations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Seam Component Types . . . . . 69 Gadget Catalog: Conversational Gadgets . . . . . . . . . . . . . . . . . . . . . . 67 Seam Component Contexts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Conversation Life Cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Action Listeners . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Life Cycle and Callbacks . . . . . . . . . . . . . . . . . . . . . . 67 Seam Contexts and the JSF Life Cycle. . . . 93 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Implicit vs. . . . . . . . . . . . 78 Joining Conversations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Bijection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Conversation Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Form Backing Beans . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Starting Pageflows with Annotations . . . . . . . . . . . . . 117 Managing the Back Button . 132 Security EL Expressions . . . . . . . 109 Starting Pageflows with Page Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 Minimal Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Java EE Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Advantages of jPDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .qxd 6/18/07 12:54 PM Page ix ■CONTENTS ■CHAPTER 5 Structured Pageflow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 ix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 User Interface Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 When to Use jBPM Pageflow . . . . . . . . . . . . . . . . . . . 113 Conditional Flow. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .863-6 FM. . . . . . 122 Flexible Pageflow Through Encapsulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Gadget Catalog: The “New Gadget” Wizard . . . . . . . . . . . . . . . . . . . . 122 Expressiveness of jPDL . . . . . . . . . . . 119 Ending Pageflows . 106 Making Sense of “Pages” in Seam. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Defining Page Nodes and Transitions . . . . . . . . . . . . jBPM. . . . . . . . . . . . . 99 The Basics of Pageflow with jPDL . . . . . . . . . . . . . . . 106 Configuring jPDL Pageflows . 124 ■CHAPTER 6 Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 Configuring Seam Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 JBoss Rules . . . . . . . . . 128 Gadget Catalog: Expansion Through Security . . . . . . . . . . . 127 Authentication . 100 The Language of jPDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 Authorization. . . . . . . 127 Seam Security Support . . . . . . . . . . . . . . . . . . . . . . . 105 Seam’s Pageflow Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . and JSF . . . . . . . . . . . . . . 124 Summary . . . 130 Data Model Changes . . . . . . . 128 Seam Security vs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Initiating Pageflows . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . 178 Executing Tasks . . . . . . . . . . . . . . . . . 174 Starting a Business Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Enabling the Authentication Services . . . . and Seam . . . . . . . 144 Making a Smarter Login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 . . . . . . . 147 Specifying Page Access Rights . . . . 135 Creating the Login Handler . . . . . . . . . . . . . . . .863-6 FM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Business Process Data . . . . . 137 Adding Login and Logout Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Avoiding Conflicts with JBoss Transaction Management . . 145 Authorization Services . . . . 153 Summary . . . . . . . . . . . . 183 Assigning Tasks to Users . . . . . . . . 151 Advanced Authorization . . . . . . . . . . . .qxd x 6/18/07 12:54 PM Page x ■CONTENTS Authentication Services . . 161 Integration of jBPM and Seam . . . . . . . . . . . . . . . . . . . . . 156 ■CHAPTER 7 Business Process Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Creating the Login Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 Restricting Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 Setting the Hibernate DataSource. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Defining Process Flows . . . . . . jBPM. 159 Business Processes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Business Processes + Java = jBPM . . . . . . . . . . . . . . . . . 167 Configuring jBPM in Seam . 143 Handling Authentication Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Component-Level Restrictions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Gadget Catalog: Verifying New Gadgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Business Process Concepts . . . . . . . . . . . . . . . . . . . . . 183 Starting and Ending Tasks . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 Assigning Roles to Users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . 196 Configuring Seam Remoting . . 207 The Seam JavaScript Object . . . . . . . . . . . . . . . . . . . . . 217 ■INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 Gadget Catalog: Improving the User Experience . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 Seam. . 209 Implementing the Auto-Complete Search Box . . . . . . . . . . . . . . . . . . . .863-6 FM. . . . . . 196 Server-Side Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 Seam’s Remoting Services . . . . . . . . . . . . . . . . 198 Basic Java Type Mappings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 Seam. . . . . . 214 Summary . . . . . . . . . . . . . . . . . . . 198 Executable Stubs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Remoting . . . . . . . . . . . . . . . . 210 Integration with AJAX Libraries . . . . . . . . . . . 199 Type Stubs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 xi . 193 What Is a Rich Web Client? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Enabling Access to Server Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .qxd 6/18/07 12:54 PM Page xi ■CONTENTS ■CHAPTER 8 Rich Web Clients . . . . . . . . . . . 196 Client-Side Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .