| About the Author | p. xiii |
| About the Technical Reviewer | p. xv |
| Acknowledgments | p. xvii |
| Introduction | p. xix |
| Introducing Seam | p. 1 |
| Seam Simplifies Java EE | p. 1 |
| The Seam Component Model | p. 3 |
| Running Example: A Gadget Catalog | p. 4 |
| The Gadget Catalog Without Seam | p. 5 |
| The Gadget Catalog with JBoss Seam | p. 15 |
| Seam Extends Java EE | p. 16 |
| Seam Component Services | p. 16 |
| Integrated Pageflow with jPDL | p. 18 |
| Integrated Business Processes with jBPM and JBoss Rules | p. 18 |
| Rich Internet Applications (aka Web 2.0) | p. 19 |
| Read On | p. 19 |
| Summary | p. 20 |
| Seam Configuration and Administration | p. 21 |
| Preparing the Application Server | p. 21 |
| Java 5.0 Required | p. 21 |
| JavaServer Faces | p. 22 |
| Enterprise JavaBeans 3.0 | p. 22 |
| Configuring JBoss 4 | p. 25 |
| Installation in a Generic Java EE 5.0 Environment | p. 26 |
| Installation in a Generic J2EE 1.4 Environment | p. 28 |
| Configuring a Seam Application | p. 28 |
| Install Seam Core Libraries | p. 29 |
| Configure Facelets | p. 30 |
| Web Component Configuration | p. 31 |
| EJB Component Configuration | p. 33 |
| Seam Configuration Files | p. 37 |
| Summary | p. 37 |
| Component Fundamentals | p. 39 |
| Seam Component Types | p. 39 |
| Form Backing Beans | p. 40 |
| Action Listeners | p. 41 |
| Browser-Accessible Components | p. 41 |
| Extending the Gadget Catalog: Managing Types | p. 42 |
| Component Services | p. 43 |
| Component Name Binding | p. 43 |
| Life Cycle and Callbacks | p. 47 |
| Using EJBs As JSF Managed Beans | p. 49 |
| Bijection | p. 60 |
| Summary | p. 66 |
| Contexts and Conversations | p. 67 |
| Seam Component Contexts | p. 67 |
| Seam Contexts and the JSF Life Cycle | p. 69 |
| Gadget Catalog: Conversational Gadgets | p. 72 |
| Conversation Basics | p. 74 |
| The Motivation for Conversations | p. 74 |
| Conversations and Other Contexts | p. 75 |
| Conversation Life Cycle | p. 75 |
| Implicit vs. Explicit Conversations | p. 77 |
| Starting and Ending Conversations | p. 78 |
| Joining Conversations | p. 88 |
| Nesting Conversations | p. 90 |
| Workspaces: Managing Concurrent Conversations | p. 93 |
| Summary | p. 98 |
| Structured Pageflow | p. 99 |
| The Basics of Pageflow with jPDL | p. 100 |
| The Language of jPDL | p. 100 |
| When to Use jBPM Pageflow | p. 103 |
| Gadget Catalog: The "New Gadget" Wizard | p. 105 |
| Seam's Pageflow Model | p. 106 |
| Configuring jPDL Pageflows | p. 106 |
| Making Sense of "Pages" in Seam, jBPM, and JSF | p. 107 |
| Initiating Pageflows | p. 108 |
| Starting Pageflows with Annotations | p. 109 |
| Starting Pageflows with Page Links | p. 111 |
| Defining Page Nodes and Transitions | p. 113 |
| Conditional Flow | p. 117 |
| Managing the Back Button | p. 119 |
| Ending Pageflows | p. 121 |
| Advantages of jPDL | p. 122 |
| Flexible Pageflow Through Encapsulation | p. 122 |
| Expressiveness of jPDL | p. 124 |
| Summary | p. 124 |
| Security | p. 127 |
| Seam Security Support | p. 127 |
| Authentication | p. 127 |
| Authorization | p. 128 |
| Seam Security vs. Java EE Security | p. 128 |
| Gadget Catalog: Expansion Through Security | p. 129 |
| User Interface Access Control | p. 130 |
| Data Model Changes | p. 131 |
| Configuring Seam Security | p. 132 |
| Minimal Configuration | p. 132 |
| Security EL Expressions | p. 133 |
| JBoss Rules | p. 134 |
| Authentication Services | p. 134 |
| Enabling the Authentication Services | p. 134 |
| Creating the Login Form | p. 135 |
| Creating the Login Handler | p. 137 |
| Adding Login and Logout Links | p. 142 |
| Restricting Pages | p. 143 |
| Handling Authentication Exceptions | p. 144 |
| Making a Smarter Login | p. 145 |
| Authorization Services | p. 146 |
| Assigning Roles to Users | p. 147 |
| Specifying Page Access Rights | p. 150 |
| Component-Level Restrictions | p. 151 |
| Advanced Authorization | p. 153 |
| Summary | p. 156 |
| Business Process Management | p. 159 |
| Business Processes, jBPM, and Seam | p. 159 |
| Business Process Concepts | p. 159 |
| Business Processes + Java = jBPM | p. 161 |
| Integration of jBPM and Seam | p. 165 |
| Gadget Catalog: Verifying New Gadgets | p. 167 |
| Configuring jBPM in Seam | p. 170 |
| Avoiding Conflicts with JBoss Transaction Management | p. 171 |
| Setting the Hibernate DataSource | p. 173 |
| Defining Process Flows | p. 174 |
| Starting a Business Process | p. 177 |
| Business Process Data | p. 178 |
| Executing Tasks | p. 183 |
| Assigning Tasks to Users | p. 183 |
| Starting and Ending Tasks | p. 188 |
| Summary | p. 191 |
| Rich Web Clients | p. 193 |
| What Is a Rich Web Client? | p. 193 |
| Seam's Remoting Services | p. 194 |
| Gadget Catalog: Improving the User Experience | p. 196 |
| Configuring Seam Remoting | p. 196 |
| Server-Side Configuration | p. 196 |
| Client-Side Configuration | p. 197 |
| Enabling Access to Server Components | p. 198 |
| Basic Java Type Mappings | p. 198 |
| Executable Stubs | p. 199 |
| Type Stubs | p. 207 |
| The Seam JavaScript Object | p. 208 |
| Seam.Component | p. 208 |
| Seam.Remoting | p. 209 |
| Implementing the Auto-Complete Search Box | p. 210 |
| Integration with AJAX Libraries | p. 214 |
| Summary | p. 217 |
| Index | p. 219 |
| Table of Contents provided by Ingram. All Rights Reserved. |