About This Book xvii
About the Authors xix
Acknowledgments xxi
Part I: Getting Started 1
Chapter 1: What Is Seam? 3
1.1: Integrating and Enhancing Java EE Frameworks 4
1.2: A Web Framework That Understands ORM 5
1.3: Supporting Stateful Web Applications 6
1.4: Web 2.0 Ready 7
1.5: POJO Services via Dependency Bijection 7
1.6: Convention over Configuration 8
1.7: Avoiding
1.8: Designed for Testing 9
1.9: Great Tools Support 10
1.10: Let’s Start Coding! 10
Chapter 2: Seam Hello World 11
2.1: Create a Data Model 13
2.2: Map the Data Model to a Web Form 13
2.3: Handle Web Events 14
2.4: Navigate to the Next Page 15
2.5: EJB3 Bean Interface and Mandatory Method 16
2.6: More on the Seam Programming Model 17
2.7: Configuration and Packaging 20
2.8: How Is This Simple? 25
Chapter 3: Recommended JSF Enhancements 27
3.1: An Introduction to Facelets 28
3.2: Seam JSF Enhancements 34
3.3: Add Facelets and Seam UI Support 38
3.4: PDF, Email, and Rich Text 40
3.5: Internationalization 46
Chapter 4: Seam without EJB3 47
4.1: A Seam POJO Example 47
4.2: Configuration 48
4.3: Packaging 50
4.4: POJO Trade-Offs 52
Chapter 5: Rapid Application Development Tools 53
5.1: Prerequisites 54
5.2: A Quick Tutorial 54
5.3: Working with IDEs 63
5.4: Generating a CRUD Application from a Database 72
5.5: Seam-gen Command Reference 73
Part II: Stateful Applications Made Easy 75
Chapter 6: An Introduction to Stateful Framework 77
6.1: Correct Usage of ORM 77
6.2: Better Performance 79
6.3: Better Browser Navigation Support 81
6.4: Fewer Memory Leaks 82
6.5: High Granularity Component Lifecycle 83
6.6: Reducing Boilerplate Code 84
Chapter 7: Thinking in Components 87
7.1: Stateful Components 87
7.2: Managing Stateful Components 92
7.3: Configuring Components through
7.4: Page Navigation Flow 99
Chapter 8: Conversations 101
8.1: What Is a Conversation? 102
8.2: Long-Running Conversations 106
8.3: Managing Long-Running Conversations 112
8.4: New Frontiers 124
Chapter 9: Workspaces and Concurrent Conversations 125
9.1: What Is a Workspace? 125
9.2: Workspace Management 129
9.3: Natural Conversations 134
9.4: Workspace Timeout 140
9.5: Desktop Features in a Stateless Web 143
Chapter 10: Nested Conversations 145
10.1: Why Are Nested Conversations Needed? 145
10.2: Continuing the Conversation 147
10.3: The Conversation Stack 152
10.4: Fine-Grained State Management 157
Chapter 11: Transactions and Persistence 159
11.1: Seam-Managed Transactions 160
11.2: Atomic Conversation (Web Transaction) 165
Part III: Integrating Web and Data Components 175
Chapter 12: Validating Input Data 177
12.1: Form Validation Basics 177
12.2: Validation Annotations on Entity Beans 179
12.3: Triggering the Validation Action 181
12.4: Displaying Error Messages on the Web Form 183
12.5: Using JSF Custom Validators 185
Chapter 13: Clickable Data Tables 187
13.1: Implementing a Clickable Data Table 188
13.2: Seam Data-Binding Framework 191
Chapter 14: Decoupling Components Using Events 193
14.1: The Observer Pattern 193
14.2: Component-Driven Events 196
Chapter 15: Bookmarkable Web Pages 203
15.1: Using Page Parameters 204
15.2: The Java-Centric Approach 207
15.3: RESTful Web Services 211
Chapter 16: The Seam CRUD Application Framework 213
16.1: Data Access Objects (DAOs) 213
16.2: Seam CRUD DAOs Are POJOs 214
16.3: A Declarative Seam DAO Component 215
16.4: Queries 218
Chapter 17: Failing Gracefully 223
17.1: Why Not Standard Servlet Error Pages? 223
17.2: Setting Up the Exception Filter 225
17.3: Annotating Exceptions 225
17.4: Using pages.
17.5: The Debug Information Page 229
Chapter 18: Seam Security 233
18.1: Authentication and User Roles 234
18.2: Declarative Access Control 237
18.3: Identity Management 243
18.4: Additional Security Features 251
Part IV: AJAX Support 257
Chapter 19: Custom and AJAX UI Components 259
19.1: Autocompletion Text Input Example 261
19.2: Rich Input Control Examples 263
19.3: A Scrollable Data Table 264
19.4: Using RichFaces with Seam 265
19.5: Other JSF Component Libraries 266
Chapter 20: Enabling AJAX for Existing Components 269
20.1: AJAX Validator Example 270
20.2: Programmatic AJAX 272
20.3: AJAX Buttons 274
20.4: AJAX Containers 276
20.5: Other Goodies 276
20.6: Using Ajax4jsf with Seam 277
20.7: Pros and Cons 278
Chapter 21: Direct JavaScript Integration 279
21.1: AJAX Validator Example (Reloaded) 280
21.2: AJAX Progress Bar 284
21.3: Integrating the Dojo Toolkit 287
Part V: Business Processes and Rules 293
Chapter 22: Rule-Based Security Framework 295
22.1: Rule-Based Access Control 295
22.2: Configuring Rule-Based Permissioning 296
22.3: Simple Access Rules 297
22.4: Per-Instance Access Rules 299
22.5: Securing Your Entities 302
Chapter 23: Integrating Business Rules in Web Applications 305
23.1: Embedded Rules 305
23.2: Generic Rules 309
23.3: Building and Deployment 312
23.4: Conclusions 313
Chapter 24: Managing Business Processes 315
24.1: jBPM Concepts and Vocabulary 316
24.2: Application Users and jBPM Actors 318
24.3: Creating a Business Process 320
24.4: Managing Tasks 325
24.5: Business Process-Based Page Navigation Flow 330
24.6: jBPM Libraries and Configuration 333
Chapter 25: Integrating Business Processes and Rules 335
25.1: The Process 335
25.2: The Rules 337
25.3: Conclusions 338
Part VI: Testing Seam Applications 339
Chapter 26: Unit Testing 341
26.1: A Simple TestNG Test Case 343
26.2: Simulating Dependency Bijection 344
26.3: Mocking the Database and Transaction 345
26.4: Loading the Test Infrastructure 347
Chapter 27: Integration Testing 351
27.1: Simulating JSF Interactions 352
27.2: Using JSF EL Expressions 353
27.3: Transactional Data Source 355
Part VII: Production Deployment 357
Chapter 28: Using a Production Database 359
28.1: Installing and Setting Up the Database 359
28.2: Installing the Database Driver 361
28.3: Defining a Data Source 361
28.4: Configuring the Persistence Engine 362
28.5: How about Tomcat? 362
Chapter 29: Java EE 5.0 Deployment 365
29.1: JBoss AS 4.0.5 365
29.2: JBoss AS 4.2.x and 5.x 366
29.3: GlassFish 367
Chapter 30: Performance Tuning and Clustering 371
30.1: Tuning Performance on a Single Server 372
30.2: Clustering for Scalability and Failover 379
Part VIII: Emerging Technologies 383
Chapter 31: Scheduling Recurring Jobs from a Web Application 385
31.1: Simple Recurring Events 386
31.2: Configuring the Quartz Scheduler Service 387
31.3: Scheduling Cron Jobs 389
31.4: Scheduling Jobs When Starting Up 390
31.5: Conclusion 391
Chapter 32: Improving Scalability with Multilayered Caching 393
32.1: Multilayered Caching 394
32.2: Integrating a Cache Provider through Seam 396
32.3: Simplified Caching with Seam 398
Chapter 33: Making Seam Groovy 401
33.1: Groovy Entities 402
33.2: Groovy Actions 405
33.3: Integrating Groovy 406
Chapter 34: Introduction to Web Beans 409
34.1: Defining a Web Beans Component 410
34.2: Component Injection 411
34.3: Producer Methods 414
34.4: The Context Model 416
34.5: Component Stereotyping 419
34.6: Implementing Cross-Cutting Behavior 421
34.7: Conclusion 423
Appendix A: Installing and Deploying JBoss AS 425
A.1: JDK 5.0 Is Required 425
A.2: Installing JBoss AS 426
A.3: Deploying and Running Applications 426
Appendix B: Using Example Applications as Templates 427
B.1: Simple EJB3-Based Web Applications 428
B.2: POJO-Based Web Applications 433
B.3: More Complex Applications 438
Appendix C: Using Maven 441
Appendix D: Direct Access to the Hibernate API 451
D.1: Using the Hibernate API 451
D.2: Configuration 453
Index 455