This page intentionally left blank Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com... First printing, February 2009 Simpo PDF Merge and Split Unregistered Versi
Trang 1ptgSimpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Trang 2Seam Framework
Second Edition
Trang 3This page intentionally left blank
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Trang 4Upper Saddle River, NJ • Boston • Indianapolis • San Francisco New York • Toronto • Montreal • London • Munich • Paris • Madrid
Capetown • Sydney • Tokyo • Singapore • Mexico City
Trang 5Many of the designations used by manufacturers and sellers to distinguish their products are claimed as
trademarks Where those designations appear in this book, and the publisher was aware of a trademark
claim, the designations have been printed with initial capital letters or in all capitals.
The authors and publisher have taken care in the preparation of this book, but make no expressed or implied
warranty of any kind and assume no responsibility for errors or omissions No liability is assumed for
incidental or consequential damages in connection with or arising out of the use of the information or
programs contained herein.
The publisher offers excellent discounts on this book when ordered in quantity for bulk purchases or special
sales, which may include electronic versions and/or custom covers and content particular to your business,
training goals, marketing focus, and branding interests For more information, please contact:
U.S Corporate and Government Sales
Visit us on the Web: informit.com/ph
Library of Congress Cataloging-in-Publication Data
Yuan, Michael Juntao.
Seam framework : experience the evolution of Java EE / Michael Juntao Yuan,
Jacob Orshalick, Thomas Heute.—2nd ed.
p cm.
Includes index.
ISBN 978-0-13-712939-3 (pbk : alk paper)
1 JBoss 2 Web servers—Management 3 Java (Computer program language)
I Orshalick, Jacob II Heute, Thomas III Title
TK5105.8885.J42Y832 2009
005.2'762—dc22
2008047478
Copyright © 2009 Pearson Education, Inc.
All rights reserved Printed in the United States of America This publication is protected by copyright,
and permission must be obtained from the publisher prior to any prohibited reproduction, storage in a
retrieval system, or transmission in any form or by any means, electronic, mechanical, photocopying,
recording, or likewise For information regarding permissions, write to:
Pearson Education, Inc.
Rights and Contracts Department
501 Boylston Street, Suite 900
Boston, MA 02116
Fax (617) 671-3447
ISBN-13: 978-0-13-712939-3
ISBN-10: 0-13-712939-4
Text printed in the United States on recycled paper at R.R Donnelley in Crawfordsville, Indiana.
First printing, February 2009
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Trang 6Michael dedicates the book to Ju.
Jacob dedicates the book to Jennifer and Talia.
Thomas dedicates the book to Isabelle.
Trang 7This page intentionally left blank
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Trang 8xvii About This Book .
xix About the Authors .
xxi Acknowledgments .
1 Getting Started .
PART I
3 What Is Seam? .
Chapter 1
1.1 Integrating and Enhancing Java EE Frameworks 41.2 A Web Framework That Understands ORM 51.3 Supporting Stateful Web Applications 61.4 Web 2.0 Ready 7
1.5 POJO Services via Dependency Bijection 71.6 Convention over Configuration 8
1.7 Avoiding XML Abuse 81.8 Designed for Testing 91.9 Great Tools Support 101.10 Let’s Start Coding! 10
11 Seam Hello World .
Chapter 2
2.1 Create a Data Model 132.2 Map the Data Model to a Web Form 132.3 Handle Web Events 14
2.4 Navigate to the Next Page 152.5 EJB3 Bean Interface and Mandatory Method 162.6 More on the Seam Programming Model 172.6.1 Seam Built-in Components 17
2.6.2 Ease of Testing 182.6.3 Getter/Setter-Based Bijection 182.6.4 Avoid Excessive Bijection 192.6.5 Accessing Database via the EntityManager 20
Contents
vii
Trang 9Chapter 3
3.1 An Introduction to Facelets 283.1.1 Why Facelets? 29
3.1.2 A Facelets Hello World 303.1.3 Use Facelets as a Template Engine 313.1.4 Data List Component 34
3.2 Seam JSF Enhancements 343.2.1 Seam UI Tags 343.2.2 Seam JSF EL Enhancement 363.2.3 Use EL Everywhere 373.2.4 Seam Filter 37
3.2.5 Stateful JSF 383.3 Add Facelets and Seam UI Support 383.4 PDF, Email, and Rich Text 403.4.1 Generate PDF Reports 403.4.2 Template-Based Email 423.4.3 Display Rich Text 443.5 Internationalization 46
47 Seam without EJB3 .
Chapter 4
4.1 A Seam POJO Example 474.2 Configuration 48
4.3 Packaging 504.4 POJO Trade-Offs 52
53 Rapid Application Development Tools .
Chapter 5
5.1 Prerequisites 545.2 A Quick Tutorial 545.2.1 Setting Up Seam-gen 545.2.2 Generating a Skeleton Application 575.2.3 Understand the Profiles 59
5.2.4 Developing the Application 615.2.5 Building and Deploying 615.2.6 Running Test Cases 635.3 Working with IDEs 635.3.1 NetBeans 63
CONTENTS
viii
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Trang 105.3.2 Eclipse 675.3.3 JBoss Tools and JBoss Developer Studio 685.4 Generating a CRUD Application from a Database 725.5 Seam-gen Command Reference 73
75 Stateful Applications Made Easy .
6.5 High Granularity Component Lifecycle 836.6 Reducing Boilerplate Code 84
87 Thinking in Components .
Chapter 7
7.1 Stateful Components 877.1.1 Stateful Entity Bean 907.1.2 Stateful Session Bean 907.2 Managing Stateful Components 927.2.1 Stateful Component Lifecycle 927.2.2 Factory Methods 94
7.2.3 Manager Components 967.3 Configuring Components through XML 977.4 Page Navigation Flow 99
101 Conversations .
Chapter 8
8.1 What Is a Conversation? 1028.1.1 The Default Conversation Scope 1028.1.2 Displaying JSF Messages 1048.2 Long-Running Conversations 1068.2.1 Introducing the Hotel Booking Example 1068.2.2 The Lifecycle of a Long-Running Conversation 1108.2.3 Conversation Timeout 111
8.3 Managing Long-Running Conversations 1128.3.1 The Annotation Approach 112
8.3.2 The Navigation Approach 1138.3.3 Beginning a Long-Running Conversation 1158.3.4 Inside the Conversation 117
8.3.5 Ending a Long-Running Conversation 1198.3.6 Links and Buttons 123
8.4 New Frontiers 124
Trang 11125 Workspaces and Concurrent Conversations .
Chapter 9
9.1 What Is a Workspace? 1259.2 Workspace Management 1299.2.1 Workspace Switcher 1309.2.2 Carrying a Conversation across Workspaces 1329.2.3 Managing the Conversation ID 133
9.3 Natural Conversations 1349.3.1 Beginning a Natural Conversation via Links 1359.3.2 Redirecting to a Natural Conversation 1379.3.3 Resuming a Natural Conversation 1389.3.4 Rewriting to User-Friendly URLs 1399.4 Workspace Timeout 140
9.5 Desktop Features in a Stateless Web 143
145 Nested Conversations .
10.3.3 Nested Conversation Timeout 15610.4 Fine-Grained State Management 157
159 Transactions and Persistence .
Chapter 11
11.1 Seam-Managed Transactions 16011.1.1 Transactional Attributes 16211.1.2 Forcing a Transaction Rollback 16411.2 Atomic Conversation (Web Transaction) 16511.2.1 Managing the Persistence Context 16511.2.2 Seam-Managed Persistence Contexts 16711.2.3 One Transaction per Conversation 172
175 Integrating Web and Data Components .
PART III
177 Validating Input Data .
Chapter 12
12.1 Form Validation Basics 17712.2 Validation Annotations on Entity Beans 17912.3 Triggering the Validation Action 18112.4 Displaying Error Messages on the Web Form 18312.5 Using JSF Custom Validators 185
CONTENTS
x
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Trang 12187 Clickable Data Tables .
Chapter 14
14.1 The Observer Pattern 19314.2 Component-Driven Events 19614.2.1 Raising Events Declaratively 19614.2.2 Observing Events 198
14.2.3 Event Processing and the Events API 199
203 Bookmarkable Web Pages .
Chapter 15
15.1 Using Page Parameters 20415.2 The Java-Centric Approach 20715.2.1 Obtaining Query Parameters from an HTTP GET Request 20815.2.2 Loading Data for the Page 208
15.2.3 Further Processing from the Bookmarked Page 21015.3 RESTful Web Services 211
213 The Seam CRUD Application Framework .
Chapter 16
16.1 Data Access Objects (DAOs) 21316.2 Seam CRUD DAOs Are POJOs 21416.3 A Declarative Seam DAO Component 21516.3.1 Using Simpler Names for the Entity Object 21616.3.2 Retrieving and Displaying an Entity Object 21716.3.3 Initializing a New Entity Instance 217
16.3.4 Success Messages 21716.4 Queries 218
16.4.1 Dynamic Queries 21916.4.2 Displaying Multipage Query Results 221
223 Failing Gracefully .
Chapter 17
17.1 Why Not Standard Servlet Error Pages? 22317.2 Setting Up the Exception Filter 225
17.3 Annotating Exceptions 22517.4 Using pages.xml for System Exceptions 22717.5 The Debug Information Page 229
17.5.1 The Facelets Debug Page 22917.5.2 The Seam Debug Page 230
Trang 13233 Seam Security .
Chapter 18
18.1 Authentication and User Roles 23418.2 Declarative Access Control 23718.2.1 Page Access 238
18.2.2 UI Components 23918.2.3 Component Access Control 24018.2.4 Type-Safe Role Annotations 24218.3 Identity Management 243
18.3.1 Using the JpaIdentityStore 24418.3.2 Using the LdapIdentityStore 25018.4 Additional Security Features 25118.4.1 Simplified SSL 251
18.4.2 Telling Humans and Computers Apart with CAPTCHA 253
257 AJAX Support .
PART IV
259 Custom and AJAX UI Components .
Chapter 19
19.1 Autocompletion Text Input Example 26119.2 Rich Input Control Examples 26319.3 A Scrollable Data Table 26419.4 Using RichFaces with Seam 26519.5 Other JSF Component Libraries 266
269 Enabling AJAX for Existing Components .
Chapter 20
20.1 AJAX Validator Example 27020.2 Programmatic AJAX 27220.3 AJAX Buttons 27420.4 AJAX Containers 27620.5 Other Goodies 27620.6 Using Ajax4jsf with Seam 27720.7 Pros and Cons 278
279 Direct JavaScript Integration .
21.3.1 Visual Effects 28821.3.2 Input Widgets 289
CONTENTS
xii
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Trang 14293 Business Processes and Rules .
PART V
295 Rule-Based Security Framework .
Chapter 22
22.1 Rule-Based Access Control 29522.2 Configuring Rule-Based Permissioning 29622.3 Simple Access Rules 297
22.4 Per-Instance Access Rules 29922.5 Securing Your Entities 302
305 Integrating Business Rules in Web Applications .
Chapter 23
23.1 Embedded Rules 30523.1.1 Rule-Based Behavior 30623.1.2 Applying Rules 30623.2 Generic Rules 30923.2.1 The Working Memory 30923.2.2 Using the Working Memory 31023.2.3 Dynamically Updatable Rules 31123.3 Building and Deployment 31223.4 Conclusions 313
315 Managing Business Processes .
Chapter 24
24.1 jBPM Concepts and Vocabulary 31624.2 Application Users and jBPM Actors 31824.3 Creating a Business Process 32024.3.1 Defining the Process 32024.3.2 Creating a Business Process Instance 32324.3.3 Binding Data Objects in Process Scope 32324.4 Managing Tasks 325
24.4.1 Implementing Business Logic for Tasks 32524.4.2 Specifying a Task to Work On 327
24.4.3 Selecting a Task in the UI 32824.5 Business Process-Based Page Navigation Flow 33024.6 jBPM Libraries and Configuration 333
335 Integrating Business Processes and Rules .
Chapter 25
25.1 The Process 33525.2 The Rules 33725.3 Conclusions 338
339 Testing Seam Applications .
PART VI
341 Unit Testing .
Chapter 26
26.1 A Simple TestNG Test Case 34326.2 Simulating Dependency Bijection 344
Trang 1526.3 Mocking the Database and Transaction 34526.4 Loading the Test Infrastructure 347
351 Integration Testing .
Chapter 27
27.1 Simulating JSF Interactions 35227.2 Using JSF EL Expressions 35327.3 Transactional Data Source 355
357 Production Deployment .
PART VII
359 Using a Production Database .
Chapter 28
28.1 Installing and Setting Up the Database 35928.2 Installing the Database Driver 36128.3 Defining a Data Source 36128.4 Configuring the Persistence Engine 36228.5 How about Tomcat? 362
365 Java EE 5.0 Deployment .
Chapter 29
29.1 JBoss AS 4.0.5 36529.2 JBoss AS 4.2.x and 5.x 36629.3 GlassFish 367
371 Performance Tuning and Clustering .
Chapter 30
30.1 Tuning Performance on a Single Server 37230.1.1 Avoid Calling by Value 372
30.1.2 JVM Options 37230.1.3 Reducing Logging 37330.1.4 Tuning the HTTP Thread Pool 37430.1.5 Choosing Between Client- and Server-Side State Saving 37530.1.6 Using a Production Data Source 376
30.1.7 Using a Second-Level Database Cache 37630.1.8 Using Database Transactions Carefully 37830.2 Clustering for Scalability and Failover 37930.2.1 Sticky Session Load Balancing 38030.2.2 State Replication 380
30.2.3 Failover Architectures 381
383 Emerging Technologies .
PART VIII
385 Scheduling Recurring Jobs from a Web Application .
Chapter 31
31.1 Simple Recurring Events 38631.2 Configuring the Quartz Scheduler Service 38731.3 Scheduling Cron Jobs 389
CONTENTS
xiv
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Trang 1631.4 Scheduling Jobs When Starting Up 39031.5 Conclusion 391
393 Improving Scalability with Multilayered Caching .
Chapter 32
32.1 Multilayered Caching 39432.2 Integrating a Cache Provider through Seam 39632.3 Simplified Caching with Seam 398
401 Making Seam Groovy .
Chapter 33
33.1 Groovy Entities 40233.2 Groovy Actions 40533.3 Integrating Groovy 406
409 Introduction to Web Beans .
Chapter 34
34.1 Defining a Web Beans Component 41034.2 Component Injection 411
34.3 Producer Methods 41434.4 The Context Model 41634.5 Component Stereotyping 41934.6 Implementing Cross-Cutting Behavior 42134.7 Conclusion 423
425 Installing and Deploying JBoss AS .
Appendix A
A.1 JDK 5.0 Is Required 425A.2 Installing JBoss AS 426A.3 Deploying and Running Applications 426
427 Using Example Applications as Templates .
Appendix B
B.1 Simple EJB3-Based Web Applications 428B.2 POJO-Based Web Applications 433B.3 More Complex Applications 438
441 Using Maven .
Appendix C
451 Direct Access to the Hibernate API .
Appendix D
D.1 Using the Hibernate API 451D.2 Configuration 453
455 Index .
Trang 17This page intentionally left blank
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Trang 18Six months after its initial release, JBoss Seam has already become one of the hottest
frameworks in enterprise Java, with more than 10,000 downloads per month Seam
in-tegrates standard Java EE technologies with several nonstandard but interesting
tech-nologies into a consistent, unified programming model These techtech-nologies include
JSF, EJB3, JPA, Hibernate, Facelets, jBPM, JBoss Rules (Drools), iText, and more
Seam runs on almost all leading Java application servers, including but not limited
to JBoss AS and Tomcat
This book is the first comprehensive guide to Seam written by developers from the
Seam team We bring you the latest information on Seam, explain the rationales behind
its design, and discuss alternative approaches within Seam Based on our real-world
experiences, we also give you tips and best practices on how to use Seam
Of course, given the fast-evolving nature of Seam, the book will be playing catch-up
with new Seam releases, which come out almost every month This book covers Seam
release 2.1.0 Subsequent releases of Seam should be at least compatible with 2.1.0 for
the foreseeable future For readers who want to stay on the bleeding edge, we
main-tain blogs for the book at www.michaelyuan.com/blog and www.solutionsfit.com/blog
to bring you the latest updates on Seam Come visit us there!
This book uses a series of example applications to illustrate how to write Seam
applica-tions To download the source code for these sample applications, visit the book’s web
site at http://solutionsfit.com/seam
About This Book
xvii
Trang 19This page intentionally left blank
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Trang 20Michael Juntao Yuan is cofounder of Ringful, LLC, a company that develops
RESTful APIs for telephone voice and mobile messaging solutions He contributes
code to the Seam project and writes about Seam at www.michaelyuan.com/blog
Formerly technical product manager at Red Hat’s JBoss division, Yuan is author of
five books on software development
Jacob Orshalick is an independent consultant and the owner of Focus IT Solutions,
LLC He has developed enterprise software solutions that span the retail, financial,
media, and telecommunications industries He specializes in developing enterprise Java
solutions utilizing open source technologies and agile techniques He is a committer to
the Seam project, and you can find Jacob writing about Seam, Web Beans, and related
Java EE technologies in his blog, www.solutionsfit.com/blog
Thomas Heute was a contributor to the pre-JBoss Portal project before being hired by
JBoss, Inc., in 2004 He started as a member of the JBoss Portal team but became
a JBoss Seam coleader in 2005, with a plan to bring EJB3 closer to JSF (where it really
should be) At the end of 2006, Thomas returned to the JBoss Portal team to work on
a range of tasks
About the Authors
xix
Trang 21This page intentionally left blank
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Trang 22First of all, we would like to thank the entire JBoss Seam community for their great
work Like many other successful open source projects, Seam is a collaborative effort
It would have been impossible without a very active and dedicated user community
We have learned a great deal from Seam users on discussion forums, blogs, and mailing
lists Thanks, guys, and keep up the good work!
Gavin King, Seam’s creator and lead developer, deserves special thanks Seam would
never exist if not for his vision, brilliance, and hard work Gavin was very supportive
of the book from the beginning He patiently helped us with many of our newbie
ques-tions, reviewed the content, and offered encouragement along the way Aside from
Gavin, other Seam developers, including Norman Richards, Pete Muir, Emmanuel
Bernard, Max Andersen, Shane Bryzak, James Williams, Christian Bauer, and Steve
Ebersole, were also very helpful Seam is truly a team effort in the spirit of Open Source
We’d also like to thank the following people for reviewing early editions of this book
and giving us great feedback: Ian White, Tony Herstell, Rich Rosen, Wes Boudville,
Bil Lewis, Gregory Pierce, David Geary, Bruce Scharlau, Kito Mann, Daniel Brum,
Chris Mills, Pete Muir, Srinivasan Raguraman, Ajay Gupta, and Chris Dempsey Thank
you all for the help!
Our editorial team at Prentice Hall was extremely professional and supportive
throughout the process Our editor, Greg Doench, and production staff, Anna Popick
and John Fuller, put up with our numerous delays and guided us through the complex
publishing process Our production project managers, Alina Kirsanova and Dmitry
Kirsanov, worked tirelessly to enhance the look of the chapters and ensure their accuracy
The book would not have been possible without their dedication
Finally, and most importantly, we would like to thank our families for their love and
support They are truly the unsung heroes behind any achievement we might have
Acknowledgments
xxi
Trang 23This page intentionally left blank
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com
Trang 24In this part, we provide an overview of JBoss Seam and its key features and benefits
A simple Hello World example illustrates how Seam ties together the database, the web
UI, and the transactional business logic to form an application We discuss the JSF
en-hancements Seam and Facelets provide that make JSF one of the best web application
frameworks around and ideal for Seam applications For readers who do not want to
waste time setting up common Seam/Java EE configuration files, we introduce a tool
called seam-gen which generates projects with Eclipse and NetBeans IDE support It’s
the best way to jump-start your Seam application
Part I
Getting Started
1
Trang 25This page intentionally left blank
Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com