THE EXPERT'S VOICE IN JAVA Beginning EJB 3 Java EE 7 Edition GET STARTED WITH ENTERPRISE JAVABEANS FOR YOUR ENTERPRISE APPLICATIONS Jonathan Wetherbee,Chirag Rathod,Raghu Kodali,and Peter Zadrozny N111F111111717722227- Apress
Contents at a Glance Ab0 ut the Authors… XX About the Technical Reviewer.......... ..xxiii Preface........ …Xxn Acknowledgments..... ....xxvii Chapter 1:Introduction to the EJB Architecture... .1 ■Chapter2:EJB Session Beans… 25 Chapter 3:Entities and the Java Persistence API........ 61 Chapter 4:Advanced Persistence Features........ 103 Chapter 5:EJB Message-Driven Beans...... .151 Chapter 6:EJB and Web Services............. 17n Chapter 7:Integrating Session Beans,Entities,Message-Driven Beans, and Web Services.......... .205 Chapter 8:Transaction Support in EJB. .239 Chapter9:EJB3 Performance and Testing... 281 Chapter 10:Contexts and Dependency Injection.. 305 Chapter 11:EJB Packaging and Deployment.... 329 Chapter 12:EJB Client Applications..... 347 Chapter 13:Testing in an Embeddable EJB Container. 395 Index..... …415 v
v Contents at a Glance About the Authors�������������������������������������������������������������������������������������������������������������� xxi About the Technical Reviewer ����������������������������������������������������������������������������������������� xxiii Preface ����������������������������������������������������������������������������������������������������������������������������� xxv Acknowledgments���������������������������������������������������������������������������������������������������������� xxvii ■Chapter 1: Introduction to the EJB Architecture ���������������������������������������������������������������1 ■Chapter 2: EJB Session Beans�����������������������������������������������������������������������������������������25 ■Chapter 3: Entities and the Java Persistence API������������������������������������������������������������61 ■Chapter 4: Advanced Persistence Features�������������������������������������������������������������������103 ■Chapter 5: EJB Message-Driven Beans �������������������������������������������������������������������������151 ■Chapter 6: EJB and Web Services����������������������������������������������������������������������������������177 ■Chapter 7: Integrating Session Beans, Entities, Message-Driven Beans, and Web Services ����������������������������������������������������������������������������������������������������������205 ■Chapter 8: Transaction Support in EJB��������������������������������������������������������������������������239 ■Chapter 9: EJB 3 Performance and Testing �������������������������������������������������������������������281 ■Chapter 10: Contexts and Dependency Injection�����������������������������������������������������������305 ■Chapter 11: EJB Packaging and Deployment ����������������������������������������������������������������329 ■Chapter 12: EJB Client Applications������������������������������������������������������������������������������347 ■Chapter 13: Testing in an Embeddable EJB Container���������������������������������������������������395 Index���������������������������������������������������������������������������������������������������������������������������������415
CHAPTER 1 ■■■ Introduction to the EJB Architecture When we set out to write this book,our goal was to present Enterprise JavaBeans(EJB)to developers,with a keer can be used in e hardcore power users alike.That's a large audience to satisfy and,as a reference guide,the EJB spec document covers it well.In writing a book about how to use EJB,we had to narrow our audience;nonetheless,we believe that we've written a book that will serve the needs of a majority of Java EE developers. This book is targeted at developers who are experienced with Java,have built single-or multi-tier applications using earlier versions of EJB or other technologies,and are ready to take on the challenges(and rewards)of building enterprise applications using standards-based technology.Recognizing that a combined 1,100 pages of reference material [covering the EJB and Java Persistence API(JPA)specs]can be daunting,we ha developers,unfolding EJB one section at a time,and giving you the information and code examples you need to roll. spec,but you will also lea arn throug out ho applicay of the co yo see hov ho fit int a bigger pict e.You ar ama2edoaew and ith ther th y the related APIs covered in this Web Services.and Contexts and Dependency miecti ion (CDD offer a lot with which to work.Once you're comfortable with the basics of building deploying and testing,you'll find that EJB components are not only po werful but also easy to build and use Together,the authors of this book have built a number of applications using EJB in concert with other technologies in the Java EE stack,and we have attempted to capture within it advice about the practical patterns we have learned,the strategies we have found successful,and some pitfalls you can avoid.Most chapters in this book are dedicated to exploring specific areas of EJB,but we have also included chapters on Java Persistence API(JPA). Contexts and Dependency Injection(CDI),Web Services,gauging the performance of your EJB applications,and deploying to the Java EE application server of your choice.An introductory"Getting Started"section at the end of this chapter will get you set up to run the many useful sample applications found at the end of each chapter in the book We hope this b ok will serve not only as a reference guide for information on EJB but also as a how-to guide and repository of practical examples to which you can refer back as you build your own applications.Enjoy! An Introduction to EJB In the late 1990s,as Java was bolstered by the emergence of separate technologies(such as RMI,TA,and CORBA)that ologies and o Over the ngyears,El as ev Ito encomp (while ju nd standa for deploying and executing business components n a distributed,multiuser environme
1 Chapter 1 Introduction to the EJB Architecture When we set out to write this book, our goal was to present Enterprise JavaBeans (EJB) to developers, with a keen eye toward how this technology can be used in everyday, real-world applications. JSR-345: Enterprise JavaBeansTM, Version 3.2 EJB Core Contracts and Requirements is a deep spec that addresses the needs of beginning developers and hardcore power users alike. That’s a large audience to satisfy and, as a reference guide, the EJB spec document covers it well. In writing a book about how to use EJB, we had to narrow our audience; nonetheless, we believe that we’ve written a book that will serve the needs of a majority of Java EE developers. This book is targeted at developers who are experienced with Java, have built single- or multi-tier applications using earlier versions of EJB or other technologies, and are ready to take on the challenges (and rewards) of building enterprise applications using standards-based technology. Recognizing that a combined 1,100 pages of reference material [covering the EJB and Java Persistence API (JPA) specs] can be daunting, we have provided an on-ramp for developers, unfolding EJB one section at a time, and giving you the information and code examples you need to roll up your sleeves and get to work. As each chapter unfolds, you will not only learn about a new area of the spec, but you will also learn through specific examples about how to apply it to your own applications. Many of these examples come directly from the comprehensive, end-to-end, Java EE Enterprise Wines Online application constructed in Chapter 7 and Chapter 12, so that you can see how they fit into a bigger picture. You are encouraged to take these examples and run with them. Try them out in your favorite IDE or development environment, and change them around and try new things. EJB and the related APIs covered in this book—JPA, Web Services, and Contexts and Dependency Injection (CDI)—offer you a lot with which to work. Once you’re comfortable with the basics of building, deploying, and testing, you’ll find that EJB components are not only powerful, but also easy to build and use. Together, the authors of this book have built a number of applications using EJB in concert with other technologies in the Java EE stack, and we have attempted to capture within it advice about the practical patterns we have learned, the strategies we have found successful, and some pitfalls you can avoid. Most chapters in this book are dedicated to exploring specific areas of EJB, but we have also included chapters on Java Persistence API (JPA), Contexts and Dependency Injection (CDI), Web Services, gauging the performance of your EJB applications, and deploying to the Java EE application server of your choice. An introductory “Getting Started” section at the end of this chapter will get you set up to run the many useful sample applications found at the end of each chapter in the book. We hope this book will serve not only as a reference guide for information on EJB but also as a how-to guide and repository of practical examples to which you can refer back as you build your own applications. Enjoy! An Introduction to EJB In the late 1990s, as Java was bolstered by the emergence of separate technologies (such as RMI, JTA, and CORBA) that addressed the enterprise needs of large-scale applications, a need arose for a business component framework that could unify these technologies and incorporate them under a standard component development model. EJB was born to fill this need. Over the ensuing years, EJB has evolved to encompass numerous features (while judiciously rejecting others), and it has matured into a robust and standard framework for deploying and executing business components in a distributed, multiuser environment
CHAPTER 1 INTRODUCTION TO THE EJB ARCHITECTURE What Is EJB? Each release of EJBi this ined by JSR 34 terprise Jo nce this pook dedicated largely to PA o areas complement ea The EJB 3.2 sp ntitled JSR 345:Enterprise JavaBeansM,Version 3.2 EJB Core Contracts and Requirements, together with the class library defined in the.2APl,define both a component model and a container framework. The EJB Component Model Asa component model,EJB defines three object types that developers may build and customize as follows operati transa d context beans (MDBs)are invoked asynchron nously in respons e to external events through cia on with a messaging queue or topic Complementing this,the Java Persistence API(JPA)principally defines the following persistent object type .Entities are objects that have unique identities and represent persistent business data. terp In EIR 3 managed by a persister nce provider andnatheEBContaineandhegyaenOlonge considered enterprise beans. The EJB Container The elb container provides the supporting environment in which elb components operate.This environment offers transaction and security services,pooling and caching of resources,component life-cycle services,concurrency support,and more-all of which we will explore throughout this book.EJB components specify the details of how they wish to interact with their supporting container using EJB-specific metadata that is either captured by the container and applied to the EJB's behavior at run time,or interpreted at the time an EJB component is deployed to an EJB container and used to construct wrapping. Core Features of the EJB Development Model Throughout its life,EJB has maintained its focus on delivering components imbued with a handful of core features. Declarative Metadata One of the hallmarks of the EJB component model is the ability for developers to specify the behavior of both enterprise beans and entities declaratively(as opposed to programmatically)using their choice of Java annotations and/or XML descriptors.This greatly simplifies the development process,since much customization can be added to a bean without ation code oice of both annotat 2
Chapter 1 ■ Introduction to the EJB Architecture 2 What Is EJB? Each release of EJB is managed through the Java Community Process (JCP) as a Java Specification Request (JSR). The latest release, which is covered in this book, is defined by JSR 345: Enterprise JavaBeansTM 3.2. EJB JSRs prior to EJB 3.0 covered Persistent components, but since the introduction of JPA, persistence is now managed through its own JSRs. Nonetheless, the two areas complement each other well, and we have included several chapters in this book dedicated largely to JPA. The EJB 3.2 spec, entitled JSR 345: Enterprise JavaBeansTM, Version 3.2 EJB Core Contracts and Requirements, together with the class library defined in the EJB 3.2 API, define both a component model and a container framework. The EJB Component Model As a component model, EJB defines three object types that developers may build and customize as follows: • Session beans can be stateless, stateful, or singleton, and they perform business service operations. These services may be declaratively configured to operate in distributed, transactional, and access-controlled contexts. • Message-driven beans (MDBs) are invoked asynchronously in response to external events through association with a messaging queue or topic. Complementing this, the Java Persistence API (JPA) principally defines the following persistent object type: • Entities are objects that have unique identities and represent persistent business data. Session and message-driven beans are EJBs, and they are often referred to collectively as enterprise beans. In earlier versions of EJB, entities were referred to as entity beans, and they also fell into this category. In EJB 3, however, entities are now managed by a persistence provider and not the EJB container, and they are no longer considered enterprise beans. The EJB Container The EJB container provides the supporting environment in which EJB components operate. This environment offers transaction and security services, pooling and caching of resources, component life-cycle services, concurrency support, and more—all of which we will explore throughout this book. EJB components specify the details of how they wish to interact with their supporting container using EJB-specific metadata that is either captured by the container and applied to the EJB’s behavior at run time, or interpreted at the time an EJB component is deployed to an EJB container and used to construct wrapping. Core Features of the EJB Development Model Throughout its life, EJB has maintained its focus on delivering components imbued with a handful of core features. Declarative Metadata One of the hallmarks of the EJB component model is the ability for developers to specify the behavior of both enterprise beans and entities declaratively (as opposed to programmatically) using their choice of Java annotations and/or XML descriptors. This greatly simplifies the development process, since much customization can be added to a bean without having to encumber the Java source with service implementation code. To accommodate developer preference and application flexibility, EJB offers developers their choice of both annotations and XML, with the ability to use both
CHAPTER 1 INTRODUCTION TO THE EJB ARCHITECTURE methods simultaneously within the same elb or entity.for specifving behavior in metadata.in cases where the same edence in resolving the conflict.Additional benefits of this appr this chapter. Configuration by Exception Coupled with the ability to specify behavior declaratively is the strong use of intelligent defaults in EJB.Much behavior is attached automatically to an EJB or an entity without it being declared explicitly,such as the transactional behavior of session bean methods and the names of the table and columns that map to an entity's persistent data properties. An annotation,or its counterpart in XML,needs to be specified explicitly only when non-default behavior is desired. In the most common cases,where the default behavior is leveraged,this approach leads to very sparse,clean code. This development model is known as configuration by exception,because only in exceptional(non-default)cases is it necessary to configure the behavior of the component explicitly. Scalability Large-scale applications demand the ability to scale well as the client load increases.The EJB server employs resource pooling to maximize object reuse,utilizes a persistence c objects,and implen re ent sy n(RD concurr s.The EJB cor ner also manages an EJB's life cycle allo wing dependent resources to e freed up and reused to opumize pertormance Location Transparency te access,allowing them to be acce ent, an ance transpar tly manage th ion details Transactionality The lava transaction apl(ta)defines a standard api for distributed transactions.and the eib container act ITA transac tion o EIBs.Since its inc managed the EJB spec has defined a standard model for declaratively specifying container on ente rise beans. Multiuser Security Method-level access control may be specified declaratively on EJBs,enforcing user-and role-level privileges defined by application server administrators. Portability Spec-compliant enterprise beans are deployable to any application server that implements EJB,at least in theory In practice(and this was particularly true ofreleases prior to EJB 3),vendors provided their own metadata definitions that enterprise bean developers grew to rely upon,locking them into a particular vendor's implementation.As EJB has matured,it has grown to incorporate many of these formerly platform-specific features,so that EJBs implemented today are far more portable than in the past
Chapter 1 ■ Introduction to the EJB Architecture 3 methods simultaneously within the same EJB or entity, for specifying behavior in metadata. In cases where the same piece of metadata is defined both in an annotation and in XML, the XML declaration takes precedence in resolving the conflict. Additional benefits of this approach are explored later, in the “EJB 3 Simplified Development Model” section of this chapter. Configuration by Exception Coupled with the ability to specify behavior declaratively is the strong use of intelligent defaults in EJB. Much behavior is attached automatically to an EJB or an entity without it being declared explicitly, such as the transactional behavior of session bean methods and the names of the table and columns that map to an entity’s persistent data properties. An annotation, or its counterpart in XML, needs to be specified explicitly only when non-default behavior is desired. In the most common cases, where the default behavior is leveraged, this approach leads to very sparse, clean code. This development model is known as configuration by exception, because only in exceptional (non-default) cases is it necessary to configure the behavior of the component explicitly. Scalability Large-scale applications demand the ability to scale well as the client load increases. The EJB server employs resource pooling to maximize object reuse, utilizes a persistence cache to avoid repeatedly querying or creating the same objects, and implements an optimistic locking strategy in the middle tier to reduce load on the relational database management system (RDBMS) and to avoid concurrency locking issues. The EJB container also manages an EJB’s life cycle, allowing dependent resources to be freed up and reused to optimize performance. Location Transparency EJBs may be configured for remote access, allowing them to be accessed across a network connection. A client, which may be another EJB, simply requests an instance of a remote EJB, and the local and remote EJB containers transparently manage the communication details. Transactionality The Java Transaction API (JTA) defines a standard API for distributed transactions, and the EJB container acts as a JTA transaction manager to EJBs. Since its inception, the EJB spec has defined a standard model for declaratively specifying container-managed transactional behavior on enterprise beans. Multiuser Security Method-level access control may be specified declaratively on EJBs, enforcing user- and role-level privileges defined by application server administrators. Portability Spec-compliant enterprise beans are deployable to any application server that implements EJB, at least in theory. In practice (and this was particularly true of releases prior to EJB 3), vendors provided their own metadata definitions that enterprise bean developers grew to rely upon, locking them into a particular vendor’s implementation. As EJB has matured, it has grown to incorporate many of these formerly platform-specific features, so that EJBs implemented today are far more portable than in the past
CHAPTER 1 INTRODUCTION TO THE EJB ARCHITECTURE Reusability EJBs are loosely coupled components.An EJB may be reused and packaged into multiple applications,though it must be bundled with,or have access to,the business interfaces of dependent EJBs Persistence Although no longer covered in th EJB spec,JPA entities are an essential complement to EJB.Entities are persistent byasngleovinthatiableidcnies.AaentiychsmapstoadatabaseabiEand objects enuty instance is represented Progression of the EJB Spec duced,it include s nev add or more importantly,sin e its firs ary of ho spec has progressec stcommercial implementations in1998 EJB 1.0 The initial release,1.0,be support for stateful and stateless rvice objects,called session beans;and optional rt fo sister ain obje and re ed the ng infra and pass-by-value sema antics. EJB 1.1 The follow-up release,1.1,mandated support among vendors for entity beans,and introduced the XMLdeployment descriptor to replace storing metadata in a special serialized class file. EJB 2.0 EJB 2.0 addressed the overhead and pass-by-value shortcomings of remote interfaces by introducing the local interface.Only clients running inside the J2EE container could access an EJB through its local interface,but pass-by-reference method calls allowed for more efficient interchanges between components.A new type of EJB was also introduced-the message-driven bean(MDB),which could participate in asynchronous messaging systems. Entity beans gained support for container-managed relationships(CMRs),allowing bean developers to declaratively specify persistent relationships between entity beans that were managed by the EJB container.Also,Enterprise JavaBeans Query Language(EJB QL)was introduced,which gave developers the ability to query entity bean instances using a language that resembled SQL. EJB 2.1 rvices,allov ngas sion b n to e an endpoint interfa and a timer service d EJBs to ejb-jar.xml ed EIB QL eployment descripto
Chapter 1 ■ Introduction to the EJB Architecture 4 Reusability EJBs are loosely coupled components. An EJB may be reused and packaged into multiple applications, though it must be bundled with, or have access to, the business interfaces of dependent EJBs. Persistence Although no longer covered in the EJB spec, JPA entities are an essential complement to EJB. Entities are persistent domain objects with unique identities. An entity class maps to a database table, and each entity instance is represented by a single row in that table. Progression of the EJB Spec Each time a new version of the EJB spec is introduced, it includes new, significant features to address popular demand and adopt emerging technologies. Here is a brief summary of how the EJB spec has progressed since its birth in 1996, or more importantly, since its first commercial implementations in 1998. EJB 1.0 The initial release, 1.0, began with support for stateful and stateless service objects, called session beans; and optional support for persistent domain objects, called entity beans. For portability, EJBs were made accessible through a special remote interface that offered portability and remotability, but incurred the overhead of a remoting infrastructure and pass-by-value semantics. EJB 1.1 The follow-up release, 1.1, mandated support among vendors for entity beans, and introduced the XML deployment descriptor to replace storing metadata in a special serialized class file. EJB 2.0 EJB 2.0 addressed the overhead and pass-by-value shortcomings of remote interfaces by introducing the local interface. Only clients running inside the J2EE container could access an EJB through its local interface, but pass-by-reference method calls allowed for more efficient interchanges between components. A new type of EJB was also introduced—the message-driven bean (MDB), which could participate in asynchronous messaging systems. Entity beans gained support for container-managed relationships (CMRs), allowing bean developers to declaratively specify persistent relationships between entity beans that were managed by the EJB container. Also, Enterprise JavaBeans Query Language (EJB QL) was introduced, which gave developers the ability to query entity bean instances using a language that resembled SQL. EJB 2.1 EJB 2.1 added support for Web Services, allowing a session bean to expose an endpoint interface, and a timer service that allowed EJBs to be invoked at designated times or intervals. EJB 2.1 also provided expanded EJB QL functions, and an XML schema was introduced as a replacement for the DTD that defined the ejb-jar.xml deployment descriptor
CHAPTER 1 INTRODUCTION TO THE EJB ARCHITECTURE EJB3.0 EJB 3.0 was a major milestone in the evolution of the standard.Introducing a new,simplified development model (see below).EJB components became POJOs(plain old Java objects);an EJB's bean class was no longer required to implement EJB-specific interfaces,and the properties that made a Java class an EJB were factored out into Java annotations or captured externally in the ejb-jar.xml deployment descriptor file.With a few basic conditions,any class could become an EJB and leverage the enterprise services offered by an EJB container. Also new in EJB 3.0,the Entity Beans portion of the spec was replaced by the new JPA spec and,consistent with the new simplified development model,JPA entities were POJOs as well.JPA entities were also decoupled from the EJB container and could be used independently of EJB,including in a pure Java SEenvironment. EJB 3.1 EJB3.1 further imp oduced in EJB3.0.The no erface option mer suppor t.EJB e su oset of the EJB Contai componen s an EJB 3.2 the Asy chronous and enha nced Timer featu sare added to the EJB Lite subset.Al s th be. and the rules g ing dec e been simp ry ed EJB 3 Simplified Development Model EJB 3.0 was a significant departure from earlier releases.The architects of EJB3 set out to redesign the development ntroduce a atly simplified development model that would reduce the co and.atth e same time incornorat e many of the ideas found in pee is in:the spec has been widely hailed as having achieved these goals,and in so doing has overcome many of the problems that prevented earlier versions of EJB from becoming widely adopted. XML and Annotations Ifyou are familiar with earlier versions of EJB,one of the first things you will notice in EJB 3 is that it is no longer necessary to capture EJB metadata in a deployment descriptor.EJB now lets you store your EJB metadata inside your bean source using Java annotations.This isn't to say that XMLdeployment descriptors have gone away;they are still alive and well,and many developers prefer them to annotations.Using XMLdecouples the Java source from the EJB metadata,allowing the same entity or enterprise bean classes to be used in different contexts,where the context-specific information is captured in the XML and doesn't"pollute"the bean class I prefer to view their EJB metadata directly in the context of their POJO classes and use an relig roponent self.A simple rule ),we sugge for you wve nee e uple our entity and bea ses from their El in XML.Or want to use t e entity cla ith ys mx a oth XMI wins.This allows any role(see the"EB Roles"section later in the char er)d mstream of the beande erride motadata sott ings without having to update the Java source,since ov rrides can be applied exclusively to the XMLdescriptors
Chapter 1 ■ Introduction to the EJB Architecture 5 EJB 3.0 EJB 3.0 was a major milestone in the evolution of the standard. Introducing a new, simplified development model (see below), EJB components became POJOs (plain old Java objects); an EJB’s bean class was no longer required to implement EJB-specific interfaces, and the properties that made a Java class an EJB were factored out into Java annotations or captured externally in the ejb-jar.xml deployment descriptor file. With a few basic conditions, any class could become an EJB and leverage the enterprise services offered by an EJB container. Also new in EJB 3.0, the Entity Beans portion of the spec was replaced by the new JPA spec and, consistent with the new simplified development model, JPA entities were POJOs as well. JPA entities were also decoupled from the EJB container and could be used independently of EJB, including in a pure Java SE environment. EJB 3.1 EJB 3.1 further improved upon the simplified development model introduced in EJB 3.0. The no-interface option was now supported for Local EJBs. The Singleton pattern was offered for Session beans along with Asynchronous and enhanced Timer support. EJB Lite—an embeddable subset of the EJB Container’s functionality—allowed EJB components to be executed in the same VM as an EJB client. EJB 3.2 In EJB 3.2, the Asynchronous and enhanced Timer features are added to the EJB Lite subset. Along with other improvements, the bean developer is offered more control over the transactionality of life-cycle interceptor methods, and the rules governing declaration of Local and Remote behavior have been simplified. EJB 3 Simplified Development Model EJB 3.0 was a significant departure from earlier releases. The architects of EJB 3 set out to redesign the development experience; to introduce a greatly simplified development model that would reduce the complexity of the enterprise beans themselves; and, at the same time, incorporate many of the ideas found in peer technologies. The consensus is in: the spec has been widely hailed as having achieved these goals, and in so doing has overcome many of the problems that prevented earlier versions of EJB from becoming widely adopted. XML and Annotations If you are familiar with earlier versions of EJB, one of the first things you will notice in EJB 3 is that it is no longer necessary to capture EJB metadata in a deployment descriptor. EJB now lets you store your EJB metadata inside your bean source using Java annotations. This isn’t to say that XML deployment descriptors have gone away; they are still alive and well, and many developers prefer them to annotations. Using XML decouples the Java source from the EJB metadata, allowing the same entity or enterprise bean classes to be used in different contexts, where the context-specific information is captured in the XML and doesn’t “pollute” the bean class. Many users, however, will prefer to view their EJB metadata directly in the context of their POJO classes and use annotations. To avoid wading into a religious war (vocal proponents on both sides abound), we suggest that you choose for yourself. A simple rule we follow is this: if we need to decouple our entity and bean classes from their EJB metadata, as when we want to use the same entity classes with two different entity inheritance strategies, we put our metadata in XML. Otherwise, we stick with annotations. Don’t forget—you can always mix and match, relying on the firm policy that whenever metadata is specified for an element using both XML and annotations, the XML always wins. This allows any role (see the “EJB Roles” section later in the chapter) downstream of the bean developer to override metadata settings without having to update the Java source, since overrides can be applied exclusively to the XML descriptors
CHAPTER 1 INTRODUCTION TO THE EJB ARCHITECTURE Note A more advanced strategy,which we also recommend,is to use annotations only when defining behavior on an enterprise bean oran entity that is truly integral to its definition,such as the relationship type of an entity relationship field,or the transactional requirements of a method on a session bean.Anything that could reasonably be overridden. such as the name of the table to which an entity maps,or the details of a value generator used for populating the primary key on an entity,would go in the XML descriptor,where it can be specified at deploy time by an application assembler, perhaps in consultation with a database administrator.While there is no harm in specifying default values using annotations in the Java source file,this approach recognizes the difference between firm metadata,which ought not to be modified,and loose metadata that may be freely modified without changing the behavior of the enterprise bean or entity. Dependency Injection After an EJB is instantiated inside the lava EE container,but before it is handed out to a client,the container may initialize property data on the instance according to rules defined for that enterprise bean.This feature is called dependency injection,and it is an example of inversion of control pattern,whereby an external provider initializes the properties of an object instance instead of by the class itself.EJB 3 introduced the use of dependency injection in Java EEand,aney because it caugnt on so well,his teatre has now been gver and the pec.he current dependency is managed through /S 30:Depen ncy Inje tionality is fu through /SR 346: cts and Depend ency injection for Java which cov Chapter 10,Contesa Depe ency Injection. Note Injection uses a"push"model to push data out to the bean,and it occurs regardless of whether the bean actually uses the data.if there is a chance that the data will not be used.the bean may elect to avoid incurrina the cost of the resource derivation by performing a Java Naming and Directory Interface(JNDI)lookup in Java code to"pull"the data,only if it is actually (or likely to be)used. Common examples of dependency injection use in EJB are as follows .Injecting an EntityManager into asession bean for interacting with entities in a persistence unit .Injecting a UserTransaction into a session bean that manages its transaction demarcation Interceptors:Callback Methods Both enterprise beans and entities may designate some of their methods,or methods on separate classes,to be called when certain life cycle events occur.For instance.a session bean may indicate that a certain method should be called after the bean has been instantiated,but before it has been handed off to a client.This method may initialize state information on the bean.or look up resources using INDI,or any other action it wishes,provided that it does not require a transactional context.Such callback methods are called interceptors,and they allow bean developers to participate programmatically in the interaction between an enterprise bean,or an entity,and its container. An important advantage of this pattern (also known as cross-cutting)is that a single interceptor may defined once and then applied to multiple methods,or even multiple EJBs. 6
Chapter 1 ■ Introduction to the EJB Architecture 6 ■ Note A more advanced strategy, which we also recommend, is to use annotations only when defining behavior on an enterprise bean or an entity that is truly integral to its definition, such as the relationship type of an entity relationship field, or the transactional requirements of a method on a session bean. Anything that could reasonably be overridden, such as the name of the table to which an entity maps, or the details of a value generator used for populating the primary key on an entity, would go in the XML descriptor, where it can be specified at deploy time by an application assembler, perhaps in consultation with a database administrator. While there is no harm in specifying default values using annotations in the Java source file, this approach recognizes the difference between firm metadata, which ought not to be modified, and loose metadata that may be freely modified without changing the behavior of the enterprise bean or entity. Dependency Injection After an EJB is instantiated inside the Java EE container, but before it is handed out to a client, the container may initialize property data on the instance according to rules defined for that enterprise bean. This feature is called dependency injection, and it is an example of inversion of control pattern, whereby an external provider initializes the properties of an object instance instead of by the class itself. EJB 3 introduced the use of dependency injection in Java EE and, largely because it caught on so well, this feature has now been given its own spec. The current dependency injection API is managed through JSR-330: Dependency Injection for JavaTM, and the functionality is further extended through JSR 346: Contexts and Dependency Injection for JavaTM EE 1.1, which we cover in Chapter 10, “Contexts and Dependency Injection.” ■ Note Injection uses a “push” model to push data out to the bean, and it occurs regardless of whether the bean actually uses the data. If there is a chance that the data will not be used, the bean may elect to avoid incurring the cost of the resource derivation by performing a Java Naming and Directory Interface (JNDI) lookup in Java code to “pull” the data, only if it is actually (or likely to be) used. Common examples of dependency injection use in EJB are as follows: • Injecting an EntityManager into a session bean for interacting with entities in a persistence unit • Injecting a UserTransaction into a session bean that manages its transaction demarcation Interceptors: Callback Methods Both enterprise beans and entities may designate some of their methods, or methods on separate classes, to be called when certain life-cycle events occur. For instance, a session bean may indicate that a certain method should be called after the bean has been instantiated, but before it has been handed off to a client. This method may initialize state information on the bean, or look up resources using JNDI, or any other action it wishes, provided that it does not require a transactional context. Such callback methods are called interceptors, and they allow bean developers to participate programmatically in the interaction between an enterprise bean, or an entity, and its container. An important advantage of this pattern (also known as cross-cutting) is that a single interceptor may defined once and then applied to multiple methods, or even multiple EJBs
CHAPTER 1 INTRODUCTION TO THE EJBARCHITECTURE POJO Implementation EJB 3 took great strides to eliminate the trappings that beset enterprise bean classes and their required interfaces in earlier EJB releases.Similar to complaints over having to define XML metadata to specify even the most basic bean behavior,developers found it burdensome to have to write custom interfaces to handle an enterprise bean's factory support,and inconvenient to require a session bean's interfaces to extend EJB-specific interfaces.All of these limitations were addressed in EJB 3. Home methods are no longer mandated,although they're still supported.For session beans and MDBs,a default constructor replaces the no-argument ejbCreate()method required by earlier EJB specs. For entities,the Home interface is replaced by an EntityManagerFactory instance that produces EntityManager instances for a JPA persistence unit to manage entity life-cycle operations,including query executio Intelligent Use of Defaults or declar marking a P ay rriding the default bel atch the ame is the @Table annotation re uired.Gr has been taken to ensure that the default value atch so that.in the maiority of use case plicit m etadata is not ed.leading to lea more clutter-free code. Note One consequence of relying on default behavior is that the class does not describe its full behavior anywhere so you need to have a good understanding of the default behavior that is being applied.IDEs can be useful in deriving and displaying the enterprise bean or entity with its fully defaulted values explicitly shown. Distributed Computing Model Essential to any enterprise application is the ability to execute tasks and run components in separate Java threads or processes.Through the RMI-based remoting services,clients in an application client tier may access EJBs running in an application server anywhere on the network.The pass-by-value behavior of remote interface methods provides a coarse-grained model designed to reduce network traffic between clients and servers that are loosely connected to each other.Many applications that use EJB do not require remote access,however,and elect to configure their EJBs for local use.This eliminates the overhead of remote access support while continuing to offer the remaining enterprise services EJB Roles The EJB spec defines seven roles for individuals involved in the different stages of defining an enterprise beanor entity,or in providing services and API implementation to enter nse beans. This book is targete at the three role ing ente nd the ciated meta .In practice se rol s may De and y one role an nd th oning of ta lopment proces s.We will refer to
Chapter 1 ■ Introduction to the EJB Architecture 7 POJO Implementation EJB 3 took great strides to eliminate the trappings that beset enterprise bean classes and their required interfaces in earlier EJB releases. Similar to complaints over having to define XML metadata to specify even the most basic bean behavior, developers found it burdensome to have to write custom interfaces to handle an enterprise bean’s factory support, and inconvenient to require a session bean’s interfaces to extend EJB-specific interfaces. All of these limitations were addressed in EJB 3. Home methods are no longer mandated, although they’re still supported. For session beans and MDBs, a default constructor replaces the no-argument ejbCreate() method required by earlier EJB specs. For entities, the Home interface is replaced by an EntityManagerFactory instance that produces EntityManager instances for a JPA persistence unit to manage entity life-cycle operations, including query execution. Intelligent Use of Defaults An excellent example of how EJB 3 simplifies the development process is its leveraging of default behavior to provide rich functionality with no coding or declarative metadata required. For instance, by simply marking a POJO with the @Entity annotation, all of its public properties automatically become persistent fields, and the table and column names take on derived values that match the entity and field names. Additional annotations or XML elements are only required when overriding the default behavior of a particular area. Only when the table name does not match the entity name is the @Table annotation required. Great care has been taken to ensure that the default values match the most common usages so that, in the majority of use cases, explicit metadata is not required, leading to leaner, more clutter-free code. ■ Note One consequence of relying on default behavior is that the class does not describe its full behavior anywhere, so you need to have a good understanding of the default behavior that is being applied. IDEs can be useful in deriving and displaying the enterprise bean or entity with its fully defaulted values explicitly shown. Distributed Computing Model Essential to any enterprise application is the ability to execute tasks and run components in separate Java threads or processes. Through the RMI-based remoting services, clients in an application client tier may access EJBs running in an application server anywhere on the network. The pass-by-value behavior of remote interface methods provides a coarse-grained model designed to reduce network traffic between clients and servers that are loosely connected to each other. Many applications that use EJB do not require remote access, however, and elect to configure their EJBs for local use. This eliminates the overhead of remote access support while continuing to offer the remaining enterprise services. EJB Roles The EJB spec defines seven roles for individuals involved in the different stages of defining an enterprise bean or entity, or in providing services and API implementation to enterprise beans. This book is targeted at the three roles involved in defining enterprise beans and their associated metadata. In practice, one or more of these roles may be performed by the same individual, and certain tasks may be performed by one role and overridden by another; but it is useful to understand the logical partitioning of tasks in the EJB development process. We will refer to these roles in various sections throughout the book
CHAPTER 1 INTRODUCTION TO THE EJB ARCHITECTURE The Enterprise Bean Provider The Enterprise Bean Provider,also known as the Bean Provider,has the onsibility of defining and implementing the bu ss logic and structure of an ente se bean.This includes def the lav thods,specifying transactional and security information declaratively on the be n and its methods,injection or lookup of re uired resources and anything else that can he anplied to the enternrise hean class Applied to JPA entities,the Bean Provider defines the persistent structure of the entity and its relationships with other entities.The provider may define mapping and primary key-generation behavior,but this role is generally limited to defining the logical dependencies and structure of the entity. The Application Assembler The Application As mbler combines EJBs into EJB modules and enti bines th r Jav modu s to pr n.This t olving the inte metadata d efin fo g re entty components :h ut need not The Deployer The Deployer takes an application that has been assembled by the Application Assembler and deploys it to a particular application server instance or cluster.The Deployer must resolve all of the external dependencies defined by the EJB component,mapping them to concrete resources installed in the application server environment.In the case of entities,the Deployer may provide or override the details of the live database objects to which the entities will map. How This Book Is Organized of each chapter.There is mple pro mpand thu ey may b ha toa term or c pt that is not defined in tha o that i was defined in an earlier ch apter of the book. Chapter 1:Introduction to the EJB 3 Architecture This chapter opens by introducing the book and offering an orientation to EJB.This orientation covers the EJB develonment framework and com oonent model,the core features of EJB,the history of EJB,the EJB 3 simplified development model,and the EJB distributed comp ting model.The chapter concludes with a"Getting Started" section to help you install the NetBeans IDE and GlassFish Java EE reference implementation server required to run the many sample applications provided with this book. Chapter 2:EJB Session Beans Chapter2 explores EJB's primary service object:the session bean.Session beans are examined in their many roles: as entity facades,as service components-both with and without state,as singleton or timer-driven objects,and as the primary orchestrators of transaction and security services. 8
Chapter 1 ■ Introduction to the EJB Architecture 8 The Enterprise Bean Provider The Enterprise Bean Provider, also known as the Bean Provider, has the responsibility of defining and implementing the business logic and structure of an enterprise bean. This includes defining the Java class, implementing service methods, specifying transactional and security information declaratively on the bean and its methods, injection or lookup of required resources, and anything else that can be applied to the enterprise bean class. Applied to JPA entities, the Bean Provider defines the persistent structure of the entity and its relationships with other entities. The provider may define mapping and primary key–generation behavior, but this role is generally limited to defining the logical dependencies and structure of the entity. The Application Assembler The Application Assembler combines EJBs into EJB modules and entities into persistence archives, and then it combines these modules together with other Java EE modules to produce an application. This task requires resolving references to logical server resources including references between EJBs. The Application Assembler must work with the interfaces and metadata defined for the EJB and entity components but need not be familiar with the implementation details. The Deployer The Deployer takes an application that has been assembled by the Application Assembler and deploys it to a particular application server instance or cluster. The Deployer must resolve all of the external dependencies defined by the EJB component, mapping them to concrete resources installed in the application server environment. In the case of entities, the Deployer may provide or override the details of the live database objects to which the entities will map. How This Book Is Organized To orient you to the structure of the remainder of this book, here is a brief summary of each chapter. There is no requirement that you read these chapters in order. Sample programs accompany each chapter, and they may be run independently of one another. Topics are introduced progressively, though, and thus if you find a reference in one chapter to a term or concept that is not defined in that chapter, chances are that it was defined in an earlier chapter of the book. Chapter 1: Introduction to the EJB 3 Architecture This chapter opens by introducing the book and offering an orientation to EJB. This orientation covers the EJB development framework and component model, the core features of EJB, the history of EJB, the EJB 3 simplified development model, and the EJB distributed computing model. The chapter concludes with a “Getting Started” section to help you install the NetBeans IDE and GlassFish Java EE reference implementation server required to run the many sample applications provided with this book. Chapter 2: EJB Session Beans Chapter 2 explores EJB’s primary service object: the session bean. Session beans are examined in their many roles: as entity facades, as service components—both with and without state, as singleton or timer-driven objects, and as the primary orchestrators of transaction and security services