- Understand the  EJB 3 architecture and API, and how it fits into the overall Java EE  architecture
- Understand and  use the EJB 3 annotations
- Create, deploy &  use stateful & stateless session beans
- Use EJB 3  dependency injection to initialize resources
- Understand and  use Interceptors (Lifecycle and Business Method)
- Use JNDI (Java  Naming and Directory Interface)
- Write EJB clients  (remote and local)
- Understand,  deploy and use message-driven beans
- Understand  distributed transactions, the Java Transaction API, and the EJB transaction  model
- Understand and  use the EJB security model
- Understand  practical architectural issues associated with EJB applications
- Understand the  new Java Persistence API (JPA)
- Create deploy and  use JPA persistent Entities
- Map relational  schemas to persistent entities, including the use of primary keys
- Understand and  use the EntityManager
- Understand and  use Java Persistence Query Language
- Use optimistic locking and versioning
- Use advanced JPA capabilities such as entity relationships (1-1, 1-N, N-N, unidirectional, bidirectional), inheritance, and embeddable classes
- Learn best practices associated with JPA applications
Hands-On
50% hands-on, 50% lecture 
Java Training   Course Duration
5 Days
Java Training   Course outline
     Session 1:  Introduction
	       
	         - Overview  of EJB and Java Persistence API (JPA)
	             - Goals  of EJB, EJB in the Java EE architecture 
- EJB  3.1 Overview
	             - Session  Beans, Persistent Entities, Message Driven Beans 
- Lab:
	 Server setup and introduction
Session 2:   Session Beans
	       
	         - Session  Bean Overview
	             - Services  provided, Stateless and Stateful Beans
- Defining  a Session Bean - EJB 3 Annotations
- The  Bean Implementation, Remote and Local Business Interface
- Packaging  and Deployment
	             - ejb-jar  file, Deployment Descriptors in EJB 3
- EAR  file
- JEE 6 WAR files and EJB
- The EJB Container
- Lab: Creating a Stateless Session Bean
- JNDI  Overview
	             - Distributed  Naming and Lookup
- Context  and InitialContext
- Using  JNDI
- Writing an EJB 3 Client
	             - Client  View of a Session Bean
- JEE 6 Portable EJB Lookup Names
- Running  the Client
- Lab: Creating an EJB Client
Session 3:  Additional Capabilities
	       
	         - Resources  and Dependency Injection
	             - EJB  referencing another EJB
- Referencing  Resources, Environment Entries
- Connection  Factories (DataSource and others)
- Lab: Using Dependency Injection
- Lab: Creating and Using Environment Entries
- Session  Bean Lifecycle and Interceptors
	             - Stateless  Session Bean Lifecycle
- Business  Method Interceptors,  InvocationContext, Lifecycle  Callback Interceptors, Interceptor Classes
- Lab: Working with Interceptors
- Asynchronous Methods, Singleton Session Beans
- Stateful  Session Beans
	             - Overview
- Defining,  Client Relationship
- Lifecycle,  Activation, Passivation
- Lab: Stateful Session Beans
- Timer  Service
	             - Programmatic Timers
- Calendar-Based Timers
- Lab: Working with Timers
Session 4:   Message-Driven Beans
	       
	         - Overview  of Messaging Systems
	             - Messaging,  Loose Coupling
- Pub/Sub,  Point2Point
- Overview  of JMS API
	             - Overview  and Structure
- ConnectionFactory  and Destination
- JMS  Producer and Consumer Client example
- JMS  Messages
- Message-Driven  Beans (MDB)
	             - Overview  and Goals
- @MessageDriven  and MDB example
- Configuring  with activationConfig
- State  Diagram and Interceptors
- Lab: Message Driven Beans
Session 5:  Transactions  and Security
	       
	         - Overview  of Transactions and Transactional Systems
	               - ACID,  Transaction Managers, Resource Managers
- Transactions  in EJB 3
	               - Declarative  Transaction Management
- Transaction  Attributes and Transactional Scope
- Transaction  Scenarios and Bean-Managed Tx
- Lab: Working with Transactions
- Security
	             - Java  EE Security Overview (Role-based)
- @RolesAllowed,  @PermitAll
- Programmatic  Security
- Lab: Integrating EJB and Java EE Security
Session 6:   Exceptions
	       
	         - Exception  Overview
	               - Checked  and Unchecked Exceptions
- Exceptions  in EJB 3
	               - Application  Exceptions, System Exceptions
- EJB 3  Best Practices
	               - When  to Use, Coarse-Grained Business Interfaces, Session Façade, Transaction  Guidelines, Clustering
Session 7:   Introduction to Java Persistence API V2 (JPA2 )
	       
	         - Overview
	               - Persistence  Layers, Object-Relational Mapping (ORM), JDBC
- JPA  Overview 
- Mapping  with JPA
	               - Entities  and @Entity, ids and @Id, 
- Generated  Id Values
- Basic  Mapping Types
- Lab: Mapping an Entity Class
- EntityManager and Persistence Context
	           - Persistence Unit and persistence.xml
- Persisting  to the DB, the EntityManager, 
- Injecting  an EntityManager
- Retrieving  Persistent Entities
- Lab: Using the EnityManager to persist and find an Entity
- More About Mappings
- Lab: Refining your Mappings 
Session 8:   Updates and Queries
	       
	         - Inserting  and Updating
	               - Transient,  Persistent, Detached, Removed
- Persisting  new Entities, Updating a Persistent Instance
- Lab: Inserting and Updating an Entity
- Querying  and JPQL
	           
	               - Object  Based Queries, Select statements, WHERE clause
- Named  Queries
 
- Lab: Creating and Using JPQL Queries
- Criteria API
- Lab: Criteria Querying
- The Persistence Lifecycle - JPA Entity States, Lifecycle, and Persistence Context
- Versioning and Optimistic Locking
	             - Overview
- Detached Entities
- Creating Versioned Entities
- Lab: Optimistic Locking
Session 9:   Entity Relationships
	       
	         - Relationships  Overview 
	               - Object  Relationships, Participants, Roles, Directionality, Cardinality
- Relationship  Mapping
	               - Mapping  Overview (1-1, 1-N, N-1, N-N)
- Unidirectional  and Bidirectional
- Mapping  One-One, One-Many
- Join  Columns
- Relationship  Inverses
- Lab: Mapping Entity Relationships
	             - Many-Many Relationships
- Lazy  and Eager Loading
- Cascading
- Queries  Across Relationships (Inner Joins, Outer Joins, Fetch Joins)
- Lab: Querying Across Relationships
- Inheritance  Mapping
	             - Entity  Inheritance
- Single  Table, Joined (Table per Subclass), Table per Concrete Class
- Pros  and Cons
- Lab: Mapping Inheritance
- Other Mapping Capabilities - Embedded Objects, Compound Primary Keys, and Element Collections
Session 10:   Additional JPA Capabilities
	       
	         - Queries  - Projection, Aggregate, Bulk Update/Delete 
- Extended Persistence Contexts
- XML Mapping Files
- EJB and Java SE 
- Best Practices
	             - Primary  Keys, Named Queries, Lazy/Eager Loading, Transactional Semantics,  Encapsulation, Report Queries