23. Enterprise Java Beans
Prof. Dr. Uwe Aßmann
Technische Universität Dresden
Institut für Software- und
Multimediatechnik
1.  Basics
http://st.inf.tu-dresden.de
2.  Parts of the Bean
infrastructure
15-1.0, Mai 12, 2015
3.  Different Kinds of EJB
4.  Implicit Middleware in
EJB-3.X
5.  Evaluation
CBSE, © Prof. Uwe Aßmann
1
Obligatory Reading
► 
► 
► 
► 
► 
► 
Oracle's enterprise bean tutorial
http://docs.oracle.com/javaee/5/tutorial/doc/bnbls.html
http://docs.oracle.com/javaee/
http://docs.oracle.com/javaee/5/tutorial/doc/javaeetutorial5.pdf
Szyperski, Chap 14
http://xdoclet.sourceforge.net
EJB 3.0 Features
http://www.oracle.com/technetwork/java/index.html
JBoss has a EJB 3.0 tutorial
http://docs.jboss.org/ejb3/docs/tutorial/1.0.7/html/index.html
Red Hat JBoss documentation
► 
https://access.redhat.com/site/products/red-hat-jboss-enterprise-applicationplatform/
Prof. U. Aßmann, CBSE
2
Other Literature
► 
JBoss EJB 3.0 Documentation
http://docs.jboss.org/ejb3/app-server/
► 
Ed Roman: Mastering EJB. Wiley & Sons.
http://www.theserverside.com/books/wiley/masteringEJB/index.jsp
► 
B. Tate, M. Clark, B. Lee, P. Linskey: Bitter EJB. Manning
Publications Co.
Prof. U. Aßmann, CBSE
3
23.1 Basics
CBSE, © Prof. Uwe Aßmann
4
Basics of Enterprise Java Beans (EJB)
► 
Developed by SUN, now Oracle
■ 
■ 
► 
► 
► 
Server-side component architecture for building distributed OO business
applications in Java
Separation of business logic and lower-level concerns (e.g., networking,
transactions, persistence, ...) into implicit middleware
EJB 1.0 1998, EJB 2.0 2001, current version is 3.1
EJB integrates several principles:
■ 
Dynamic deployment
■ 
Deployment-time middleware code generation (implicit middleware)
■ 
Containers as application servers for transparency of transaction and persistency
■ 
Annotation-based (metadata-based) middleware code generation
■ 
A simple XML-based composition language
Some common EJB application servers
■ 
OSS: JBoss – free software www.jboss.org
■ 
■ 
Apache Geronimo
Commercial: BEA's WebLogic, IBM's WebSphere, Oracle's Oracle 11g
Prof. U. Aßmann, CBSE
5
Ingredients of EJB
► 
Java-based Component Model (language specific)
■ 
Static components contain classes
■ 
Dynamic components contain objects
■ 
Component Types:
■ 
Session Beans: for business logic and application algorithms
■ 
Message-Driven Beans: Same function as session beans
■ 
■ 
Called by sending messages instead of calling methods
■ 
Have a message queue, react to an asynchronous message connector
Entity Beans: for business objects (data)
■ 
► 
Persistent object that caches database information (an account, an employee, an
order, etc)
■ 
Component factory (Home bean), following Abstract Factory pattern
■ 
Customization possible by metadata and configuration files (deployment descriptors)
Composition Technique
■ 
. 
Adaptation/Glue:
. 
Distribution (not transparent, see local/remote interfaces)
. 
Transparent network protocols
. 
Transparent transactions via Containers
. 
Transparent persistency via Containers
No connectors
Prof. U. Aßmann, CBSE
6
Interactions in an EJB Component System
(Where are the Beans?)
HTML Client
Presentation Tier
Messaging Client
messaging
EJB MessageDriven Bean
Business partner
system
http
C++ Client
CORBA/iiop
EJB Session Bean
EJB Session Bean
soap, uddi
wsdi
Servlet
RMI
EJB Session Bean
JSP
RMI
Application
Server
Web Server
Business
(Application)
Tier
EJB Session Bean
EJB Entity Bean
Database Tier
Prof. U. Aßmann, CBSE
7
23.2 The Parts of a Bean
Infrastructure
► 
Container
Bean class
► 
Home – a factory
► 
► 
► 
► 
Remote interface [3.0: annotation]
Local interface [3.0: annotation]
Deployment descriptor (2.0)
CBSE, © Prof. Uwe Aßmann
8
The Bean Container/Application Server
► 
The bean container is a run-time façade for all beans on a server
with infrastructure (application server)
► 
In a container, some business logic may run on the server, hiding the direct data
access
The container manages the beans with
► 
Factory: create bean
► 
Repository: find, remove bean
► 
The container provides run-time middleware services for the beans
► 
► 
The bean container is a deployment infrastructure
► 
The container generates dynamically middleware code for the bean when it is
deployed on a machine (implicit middleware)
. 
. 
Bean developer only writes business logic and declares the middleware
services (transactions, persistence, security, resource management, ...etc) by
specifying metadata (annotations)
The middleware services are provided automatically by code generation
. 
In explicit middleware (e.g., CORBA), middleware services have to be
addressed by the programmer
Prof. U. Aßmann, CBSE
9
Resulting Roles in the EJB Software Process
► 
Bean provider (bean producer) is an application expert
■ 
► 
Application assembler composes EJB to larger EJB, i.e., applications units.
■ 
► 
► 
She extends the deployment-descriptors
Bean deployer (employer) puts the EJB-jar into a deployment environment, consisting of a EJB
Server and Container
■ 
Preparing the EJB for use, generating middleware code
■ 
Is the EJB connected to a EJB-Container, it is configured and usable
Server provider is a specialist in transaction management and distributed systems.
■ 
► 
Builds a EJB-jar with application specific methods, deployment-descriptor, remote, home interface
Provides basic functionality for distribution
Container provider delivers the container tools for configuration and for run time inspection of EJB
■ 
The Container manages persistency of Entity Beans, generation of communication code (glue code) to
underlying data bases
Bean Provision
(development)
Bean
Assembly
(composition)
Bean
Deployment
•  Also of
composed beans
Providers
•  For application
servers
•  And containers
Prof. U. Aßmann, CBSE
10
Implicit Middleware by Interceptors (Bean
Decorators)
•  Interceptors are special server decorators (server skeletons)
treating transparency problems
•  Implementations of interceptors can be generated by the container
Distributed
Object (Bean)
Client
Container
Transaction API
Transaction
Service
Remote interface
Request
Interceptor
Security API
Security
Service
Remote interface
Remote interface
Stub
Skeleton
Network
Database API
Database
Driver
Prof. U. Aßmann, CBSE
11
The Parts of an EJB
- The Enterprise Bean Class
► 
The implementation of the bean looks different depending on which
kind of bean
Three different beans, with different families of interfaces, exist:
► 
Session beans (“Tools” in the TAM pattern language)
► 
■ 
■ 
■ 
► 
Stateless: call-oriented, runs to completion without interruption
Stateful: may be interrupted and keeps state by functions ejbPassivate(),
ejbActivate()
Message-driven beans (“Tool” understanding messages)
■ 
► 
Business-process-related logic, e.g., compute prices, transfer money between
accounts (“Business methods”)
Message-oriented logic, e.g., receive a message and call a session bean
Entity beans (“Material” from the TAM pattern language)
■ 
Data-related logic, e.g., change name of a customer, withdraw money from an
account
Prof. U. Aßmann, CBSE
12
The Parts of an EJB
- The EJB Object as a Skeleton
► 
The EJB is not called directly, but via an EJB object (skeleton, facade
object, proxy)
► 
■ 
whose implementation is generated by the container
It filters the input and intercepts calls and delegates them to the inner bean
■ 
Interceptors can be generated by the container
■ 
The EJB object is responsible for providing middleware services
Client Code
5: Return result
1: Call a method
Remote
Interface
EJB Container/Server
2: Call middleware APIs Interceptors
Different services
provided by the
container
<<skeleton>>
4: Method returns
EJB Object
3: Call a bean
“Inner”
Enterprise Bean
Prof. U. Aßmann, CBSE
13
The Parts of an EJB
- The Remote Object Interface
► 
The interface to the bean that the client sees from remote
■ 
► 
■ 
Must contain all methods the bean should expose
As the EJB object lies between the client and the bean, it has to implement this
interface
Must extend javax.ejb.EJBObject
public interface Bank extends javax.ejb.EJBObject {
// Bean business methods
public Account getAccount(String name)
throws java.rmi.RemoteException;
}
public void openAccount(String name)
throws java.rmi.RemoteException;
Prof. U. Aßmann, CBSE
14
The Parts of an EJB
- The Home Object and Interfaces
► 
An EJB object factory and repository is needed: The home object with
the home interface
■ 
► 
Defines methods for creating, finding and removing EJB objects
The communication uses Java RMI over IIOP
■ 
If an argument is serializable, it is sent as pass-by-value
■ 
RMI can also simulate pass-by-reference
■ 
A serialized stub for the remote object is sent instead
Client Code
3: Return EJB object reference
EJB Container/Server
1: Create a new EJB object
<<factory>>
Home Object
Home
Interface
2: Create EJB
Object
<<skeleton>>
EJB Object
Remote
Interface
“Inner”
Enterprise
Beans
Prof. U. Aßmann, CBSE
15
Name Service for Name Transparency
► 
The Java Naming and Directory Interface (JNDI) is used to lookup home objects
■ 
■ 
JNDI is a standard interface for locating resources (name service), providing a mapping between the logical
name of a resource and its physical location
Only the address to the JNDI server is needed
EJB Container/Server
Home
3: Create a new Interface
EJB object
Home Object
Client
5: Return EJB object
reference
6: Invoke
business method
1: Retrieve 2: Return
home object home object
reference
reference
JNDI
4: Create EJB Object
EJB Object
“Inner”
Enterprise Bean
7: Delegate Request to bean
Remote
Interface
Naming Service
such as LDAP
Prof. U. Aßmann, CBSE
16
The Parts of an EJB
- Local Interfaces
► 
Beans do not support location transparency
► 
For a local call, you must provide local interfaces
■ 
■ 
■ 
■ 
local interface corresponding to remote interface
local home interface corresponding to home interface
To switch between local and remote calls it is necessary to change the code
Horrible: this should be encapsulated in a connector!
Remote:
Local:
► 
Client calls a local stub
► 
► 
Marshalling
► 
Stub calls skeleton over a network
connection
► 
Bean is called
Unmarshalling
► 
Control is returned to the client
► 
► 
► 
Client calls a local object
Local object performs middleware
services
EJB object is called, performs
middleware services
► 
Bean is called
► 
Repeat to return result
Prof. U. Aßmann, CBSE
17
The Parts of an EJB –
Putting Together an EJB Component File
► 
All the above mentioned files are put into an EJB-jar file (Java
archive, zipped)
■ 
■ 
home (and local home) interface
remote (and local) interface
■ 
(possibly vendor-specific files)
■ 
■ 
bean class
Additionally in EJB 2.0:
■ 
Deployment descriptor, i.e., the specification for the implicit middleware and the
composition of beans
Prof. U. Aßmann, CBSE
18
Deployment of an EJB Component File
► 
► 
► 
► 
► 
The deployment of an EJB is a new step in component systems we
have not yet seen
Deployment: The application server is notified of the new EJB
component file by
■ 
using a command-line tool,
■ 
dropping the EJB file in a specific directory,
■ 
or in some other way
The EJB-jar file is verified by the container
The container generates an EJB object and home object
The container generates any necessary further RMI stubs, skeletons,
and interceptors
Prof. U. Aßmann, CBSE
19
23.3 A Closer Look at the Different
Kinds of Enterprise JavaBeans
CBSE, © Prof. Uwe Aßmann
20
Session Beans Overview
► 
Reusable components that contain logic for business processes
■ 
■ 
The lifetime of a session bean is roughly equivalent to the lifetime of the client
code calling it
A session bean is nonpersistent
java.ejb.SessionBean
■ 
setSessionContext(SessionContext context)
. 
The bean can query the SessionContext for information
concerning the container
■ 
ejbCreate()
. 
Used to perform initialization when the bean is created
■ 
ejbPassivate()
. 
Used by stateful session beans, explained later
■ 
ejbActivate()
. 
Used by stateful session beans, explained later
■ 
ejbRemove()
. 
Used to release any resources the bean has been holding
before it is removed
Prof. U. Aßmann, CBSE
21
Life Cycle of a Stateful Session Bean
► 
Handles state-based conversations with users
■ 
E-commerce web store with a shopping cart
■ 
Online bank
■ 
Tax declaration
Bean instance does
not exist
1: Class.newInstance()
2: setSessionContext()
3: ejbCreate()
ejbRemove()
ejbPassivate()
Ready
Passive
ejbActivate()
Business method
Prof. U. Aßmann, CBSE
22
Activation of a Stateful Session Bean
EJB Container/Server
Client
1: Invoke business
method
3: Reconstruct bean
4: Call ejbActivate()
Remote
Interface
EJB Object 5: Invoke business
method
Enterprise
Bean
2: Retrieve
passivated bean
state
Storage
Prof. U. Aßmann, CBSE
23
Characteristics of Message-Driven Beans
(MDB)
► 
MDBs are also stateless
► 
► 
► 
MDBs have a single, weakly typed business method
■ 
onMessage() is used to process messages
■ 
MDBs don't have any return values
■ 
However, it is possible to send a response to the client
■ 
MDBs cannot send exceptions back to clients
MDBs can be durable or nondurable subscribers
■ 
► 
MDBs don't have a home, local home, remote or local interface
durable means that the subscriber receives all messages, even if it is inactive
Why use MDB instead of Session Beans?
► 
Asynchronous processing means that clients don't have to wait for the bean to finish
► 
Reliability
. 
. 
. 
With RMI-IIOP the server has to be up when the client is calling it.
With a message-oriented middleware (MOM) that supports guaranteed delivery, the
message is delivered when the server gets back online
Support for subscription of multiple senders and receivers
. 
RMI-IIOP is limited to one client talking to one server
Prof. U. Aßmann, CBSE
24
Overview of Entity Beans
► 
An entity bean is a persistent material
► 
► 
Object-relational mapping necessary (from Java classes to relational
databases)
■ 
■ 
■ 
► 
► 
It consists of the same files as a session bean
Map the object to a relational database when it is stored
Queries possible by using an special EJB query language (EJB-QL) that is
translated to specific query languages of relational databases
The mapping is either hand-coded or achieved by finished products
Several entity bean instances may represent the same underlying
data
■ 
An entity bean has a primary key to uniquely identify the database data
■ 
Entity bean instances can be put to database by ejbStore() and ejbLoad()
Two kinds of entity beans
■ 
Bean-managed persistent or container-managed persistent
Prof. U. Aßmann, CBSE
25
Loading and Storing an Entity Bean
► 
Entity beans are persistent objects that can be stored in permanent
storage
■ 
Live on the entity or database layer of the 3-tier architecture
■ 
The entity bean data is the physical set of data stored in the database
EJB Container/Server
3: Business methods
1: ejbLoad()
4: ejbStore()
Entity Bean
Instance
2: Read from
database
5: Write to
database
Database
Prof. U. Aßmann, CBSE
26
23.4. Generation of
Implicit Middleware in EJB 3.X
EJB heavily use metadata markup to generate all
dependent middleware interfaces and code
•  Persistency
•  Transactions
CBSE, © Prof. Uwe Aßmann
27
EJB 3.0
► 
Only the bean class is specified
■ 
Rest of the classes is generated from metadata annotations
<<bean class>>
ProductBean
EJB 3.0
annotations
<<generated>>
Transaction
<<generated>>
Interceptors
<<generated>>
RemoteInterface
<<generated>>
Persistency
<<generated>>
HomeInterface
<<generated>>
RemoteHome
Interface
Container
<<generated>>
HomeObject
Prof. U. Aßmann, CBSE
28
Persistency is Container-Managed in 3.0
► 
► 
TemplateMethod design pattern with generated hook class implementation
The container performs the storage operations
■ 
► 
The container generates the persistence (ProductBeanImpl) and does the run-time service
The CMP entity bean is always abstract (ProductBean)
■ 
■ 
The container generates a concrete subclass (ProductBeanImpl)
An abstract persistence schema is declared in the deployment descriptor so the container will know what to
generate
EntityBean
Annotations
@entity….
Client
Container
<<abstract>>
ProductBean
<<generated>>
ProductBeanImpl
Prof. U. Aßmann, CBSE
29
Metadata Annotations in EJB 3.0 – Annotation
Types
► 
Bean class annotations refer to classes and create interfaces with
adapters:
@Entity
public class AccountBean implements Account {
public void deposit (double money) {...}
}
@Stateless
@Stateful
@MessageDriven
// adding interfaces for beans
@Local
@Remote
@RemoteHome
@LocalHome
From [EJB 3.0 Features]
Prof. U. Aßmann, CBSE
30
Method Callback Annotations
► 
► 
The default methods can be adorned with user-written filters (before,
after, and around fragments (advices))
Filter methods are part of Interceptor objects
@PrePassivate
void signalPassivation() {
System.out.writeln(“passivating bean now...”);
}
[from EJB 3.0 Features]
@PreDestroy
@PrePersist
@PostPersist
@PreActivate
@PostActivate
@PrePassivate
/* Callback method defined inside a Listener class*/
public class AccountListener{
@PostPersist
insertAccountDetails(AccountDetails accountDetails){}
}
@PostPassivate
@CallbackListener
Prof. U. Aßmann, CBSE
31
Custom Interceptors
[from EJB 3.0 Features]
// Provides profiling logic in a business method (with interceptors)
/* The interceptor class */
public class ProfilingInterceptor {
@AroundInvoke
// indicates that this is the interceptor method
public Object profile(InvocationContext invocation) throws Exception {
long start = System.currentTimeMillis();
try {
return invocation.proceed(); // this statement would call the withdraw method
} finally
{
long time = start - System.currentTimeMillis();
Method method = invocation.getMethod();
System.out.println(method.toString() + “took“ + time + “ (ms)”);
} } }
/* The bean class */
@Stateless
public class BankAccountBean implements BankAccount {
@PersistenceContext EntityManager entityManager;
@Interceptors(ProfilingInterceptor.class)
public void withdraw(int acct, double amount) {
public void deposit(int acct, double amount) {
}
… }
…
}
Prof. U. Aßmann, CBSE
32
Transaction Control with Metadata Attributes
► 
Classes and methods may receive transaction attributes
■ 
Required: bean joins the client's transaction
■ 
RequiresNew: bean starts new transaction
■ 
NotSupported: interrupt transaction, execute without it
■ 
■ 
Supported: bean joins the client's transaction, otherwise executes without
transaction
Mandatory: bean joins the client's transaction, otherwise signals error
[The Java 2 EE tutorial]
@TransactionAttribute(NOT_SUPPORTED)
@Stateful
public class TransactionBean implements Transaction {
...
@TransactionAttribute(REQUIRES_NEW)
public void firstMethod() {...}
@TransactionAttribute(REQUIRED)
public void secondMethod() {...}
public void thirdMethod() {...}
public void fourthMethod() {...}
Prof. U. Aßmann, CBSE
}
33
23.5 Evaluation of EJB
as composition system
CBSE, © Prof. Uwe Aßmann
34
Component Model
► 
► 
Mechanisms for secrets and transparency: very good
■ 
Interface and implementation repository
■ 
Location, transaction, persistence transparency
■ 
Life-time of service hidden, states hidden
■ 
Deployment-time generation of implicit middleware code
■ 
Communication protocol can be replaced (RMI-IIOP, CORBA-IIOP)
Parameterization by metadata annotations
■ 
■ 
Deployment of EJB supported
■ 
► 
The services to use are specified: transaction protocol, filters
Code generation of stubs
Standardization: de-facto standard in the Java world
■ 
Good tutorials
■ 
Technical vs. application specific vs. business components
Prof. U. Aßmann, CBSE
35
Composition Technique
► 
Mechanisms for connection
■ 
Mechanisms for locating
. 
■ 
Mechanisms for adaptation
. 
■ 
Middleware services declared in the deployment descriptor
Mechanisms for meta-modeling
■ 
► 
Container producing glue code
Mechanisms for aspect separation
■ 
► 
Interceptors (server-side skeletons)
Mechanisms for glueing
. 
► 
JNDI
with Java reflection and metadata annotations
Scalability
■ 
Pooling ensures scaling
Prof. U. Aßmann, CBSE
36
Composition Language
► 
► 
The deployment descriptor language of EJB 2.0 is a simple
composition language
Limited:
■ 
Glue code is provided by the container
■ 
Services can be added/removed/modified by changing the deployment descriptor
■ 
CMP entity beans can be customized by changing the deployment descriptor
Prof. U. Aßmann, CBSE
37
EJB - Component Model
Secrets
Development
environments
Types
Distribution
Location
transparence
Business
services
Contracts
Binding points
Infrastructure
Versioning
Parameterization
Prof. U. Aßmann, CBSE
38
EJB – Composition Technique and Language
Adaptation
Connection
Product quality
Automatic
middleware
Extensibility
Software process
Aspect Separation
Metacomposition
Scalability
Deployment descriptor,
Metadata annotations
Prof. U. Aßmann, CBSE
39
EJB as Composition Systems
Component Model
Composition Technique
Contents: binary components
Adaptation and glue code is generated (implicit)
Binding points: standardized interfaces
Automatic persistency and transactions
Dynamic deployment
Deployment descriptor
language
Composition Language
Prof. U. Aßmann, CBSE
40
The End - What Have We Learned
► 
EJB is big, not for everything
■ 
■ 
■ 
► 
► 
Allows the developer to focus on business logic
Provides very useful services, like transparency, persistence, security, networking
independence, etc
Can interoperate with CORBA
It is a well-defined standard by Oracle
It works in symbiosis with several other APIs
■ 
JNDI, RMI, JDBC, JMS, etc
Prof. U. Aßmann, CBSE
41
Appendix: The Parts of an EJB
- The Deployment Descriptor (EJB 2.0)
► 
► 
An XML file in which the middleware service requirements are
declared (There is a DD-DTD)
■ 
Bean management and lifecycle requirements
■ 
Transaction, persistence, and security requirements
Composition of beans (references to other beans)
■ 
■ 
► 
Names: Name, class, home interface name, remote-interface name, class of the
primary key
States: type (session, entity, message), state, transaction state, persistency
management - how?
The application assembler may allocate or modify additional different
information
■ 
Name, environments values, description forms
■ 
Binding of open references to other EJB
■ 
Transaction attributes
Prof. U. Aßmann, CBSE
42
Example of a Deployment Descriptor
<!DOCTYPE ejb-jar PUBLIC “-//Sun Microsystems, Inc.//DTD Enterprise
JavaBeans 2.0//EN” “http://java.sun.com/dtd/ejb-jar_2_0.dtd”>
<ejb-jar>
<enterprise-beans>
<session>
<ejb-name>Bank</ejb-name>
<home>com.somedomain.BankHome</home>
<remote>com.somedomain.Bank</remote>
<local-home>com.somedomain.BankLocalHome</local-home>
<local>com.somedomain.BankLocal</local>
<ejb-class>com.somedomain.BankBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>
Prof. U. Aßmann, CBSE
43
Stateless Session Beans
► 
► 
► 
Handle single requests
■ 
Conversations that span a single method call
■ 
Does not hold a conversational state
The bean may be destroyed by the container after a call or it has to
be cleared of old information
Examples of stateless session beans
■ 
A user verification service
■ 
An encoding engine
■ 
Any service that given some input always produces the same result
Prof. U. Aßmann, CBSE
44
Pooling Stateless Session Beans
► 
Stateless session beans can easily be pooled (reused) to allow better
scaling
■ 
They contain no state
EJB Container/Server
Client
Stateless bean pool
Bean
invoke()
Bean
EJB Object
Remote
Interface
Bean
invoke()
Bean
Prof. U. Aßmann, CBSE
45
Life Cycle of a Stateless Session Bean
Bean instance does
not exist
1: Class.newInstance()
2: setSessionContext()
3: ejbCreate()
1: ejbRemove()
Pool of equivalent
method-ready
instances
Business method
Prof. U. Aßmann, CBSE
46
Pooling Stateful Session Beans
► 
Pooling becomes more complicated
■ 
► 
Beans must be swapped from physical memory to disk
A stateful session bean has to implement:
■ 
■ 
ejbPassivate(): Called to let the bean release any resources it holds before it gets
swapped out
ejbActivate(): Called right after the bean has been swapped in to let it acquire the
resources it needs
EJB Container/Server
Client
2: Pick the least
recently used bean
1: Invoke business
method
3: Call ejbPassivate()
Remote
Interface
EJB Object
4:Serialize the
bean state
Enterprise Bean
5:Store passivated
bean state
Storage
Prof. U. Aßmann, CBSE
47
Pooling Entity Beans
EJB Container/Server
Client 1
John Smith
EJB Object 1
(John Smith's
Remote Bank Account)
Interface
Client 2
Mary Jane
EJB Object 2
(Mary Jane's
Remote Bank Account)
Interface
Client 3
Bob Hall
EJB Object 3
(Bob Hall's
Remote Bank Account)
Interface
Bean Pool
Entity Bean
Instances
Prof. U. Aßmann, CBSE
48
Bean-Managed Persistent Entity Beans (BMP
Beans)
► 
The developer is required to provide the implementation to map the
instances to and from storage
■ 
► 
Java Database Connectivity (JDBC)
BMP beans have to implement javax.ejb.EntityBean:
■ 
setEntityContext(javax.ejb.EntityContext)
. 
The context can be queried of information regarding the container
■ 
unsetEntityContext()
■ 
ejbRemove()
. 
■ 
ejbActivate()
. 
■ 
Called before the bean is swapped out so it can release resources
ejbLoad()
. 
■ 
Lets the bean allocate resources after being swapped in
ejbPassivate()
. 
■ 
Removes the data from the persistent storage
Loads database data into the bean
ejbStore()
. 
Stores the data in the bean to the database
Prof. U. Aßmann, CBSE
49
Bean-Managed Persistent Entity Beans
► 
BMP beans also have to other kinds of methods relating to storage
■ 
ejbCreate()
. 
■ 
Used to create new entries in the database (optional)
Finder methods
. 
. 
. 
ejbFindXXX()
Must have at least one: ejbFindByPrimaryKey()
Normally contains database queries
n 
■ 
ejbHomeXXX() methods
. 
► 
e.g., SELECT id FROM accounts WHERE balance > 3000
Performs simple services over a set of beans
A BMP entity bean consists of
■ 
Bean-managed state fields, persistable fields that are loaded from the database
■ 
Business logic methods: Performs services for clients
■ 
EJB-required methods: Required methods that the container calls to manage the
bean
Prof. U. Aßmann, CBSE
50
Example
- Bean-Managed State Fields
► 
import
import
import
import
AccountBean.java
java.sql.*;
javax.naming.*;
javax.ejb.*;
java.util.*;
public void deposit(double amount) {
balance += amount;
}
public void withdraw(double amount {
if (amount < balance) {
balance -= amount;
}
}
public void getBalance() {
public class AccountBean implements EntityBean { return balance;
}
protected EntityContext context;
// Bean-managed state fields
private String accountID;
private String ownerName;
private double balance;
public AccountBean() { }
...
Prof. U. Aßmann, CBSE
51
Example
- Business Logic Methods
...cont...
public void ejbHomeGetTotalBankValue() {
PreparedStatement pStatement = null;
Connection connection = null;
try {
connection = getConnection();
pStatement = connection.prepareStatement(
“select sum(balance) as total from accounts”);
ResultSet rs = pStatement.executeQuery();
if (rs.next()) { return rs.getDouble(“total”); }
catch (Exception e) { … }
finally {
try { if (pStatement != null) pStatement.close(); }
catch (Exception e) { … }
try { if (connection != null) connection.close(); }
catch (Exception e) { … }
}
}
...cont...
Prof. U. Aßmann, CBSE
52
Example
- Required Methods
...cont...
public void ejbRemove {
PreparedStatement pStatement = null;
Connection connection = null;
AccountPK pk = (AccountPK) context.getPrimaryKey();
String id = pk.accountID;
try {
connection = getConnection();
pStatement = connection.prepareStatement(
“delete from accounts where id = ?1”);
pStatement.setString(1, id);
pStatement.executeQuery();
catch (Exception e) { … }
finally {
try { if (pStatement != null) pStatement.close(); }
catch (Exception e) { … }
try { if (connection != null) connection.close(); }
catch (Exception e) { … }
} }
...
Prof. U. Aßmann, CBSE
53
Container-Managed Persistency in 2.0
► 
► 
TemplateMethod design pattern with generated hook class
implementation
Xdoclet tag comments or deployment descriptor
EntityBean
Deployment
descriptor
Xdoclet
/* @entitiy */
Container
<<abstract>>
ProductBean
<<generated>>
ProductBeanImpl
Prof. U. Aßmann, CBSE
54
Container-Managed Persistent Entity Beans
(CMB)
► 
The container performs the storage operations
■ 
■ 
► 
Also the get/set method implementations are generated by the container from the
deployment descriptor
CMP beans get an abstract persistence schema
■ 
► 
The container generates a concrete subclass
The CMP entity beans have no declared fields
■ 
► 
The container generates the persistence logic
The CMP entity bean is always abstract
■ 
► 
This gives a clean separation between the entity bean and its persistent
representation
An abstract persistence schema is declared in the deployment descriptor so the
container will know what to generate
There is a query language, EJB Query Language (EJB-QL)
■ 
SELECT OBJECT(a) FROM Account AS a WHERE a.balance > ?1
Prof. U. Aßmann, CBSE
55
Example: Using the TemplateMethod Pattern in
EJB 2.0
import javax.ejb.*;
public abstract class ProductBean implements EntityBean {
protected EntityContext context;
public abstract String getName();
public abstract void setName(String name);
public abstract String getDescription();
public abstract void setDescription(String description);
public abstract double getBasePrice();
public abstract void setBasePrice(double prise);
public abstract String getProductID();
public abstract void setProductID(String productID);
Hook methods
public void ejbActivate() { }
public void ejbRemove() { }
public void ejbPassivate() { }
public void ejbLoad() { }
public void ejbStore() { }
public void setEntityContext(EntityContext ctx) { context = ctx; }
public void unsetEntityContext() { context = null; }
public void ejbPostCreate(String productID, String name,
String description, double basePrice) { }
public String ejbCreate(String productID, String name,
String description, double basePrice) {
setProductID(productID);
setName(name);
setDescription(description); setBasePrice(basePrice);
return productID;
}
}
Prof. U. Aßmann, CBSE
56
CMP Entity Beans – Deployment Descriptor
► 
You have to declare how the container should generate methods and
fields
....declarations of interfaces, etc ....
<cmp-field>
<field-name>productID</field-name>
</cmp-field>
<cmp-field>
<field-name>name</field-name>
</cmp-field>
<cmp-field>
<field-name>description</field-name>
</cmp-field>
<cmp-field>
<field-name>basePrice</field-name>
</cmp-field>
.. queries ...
<query>
<query-method>
<method-name>findByName</method-name>
<method-params>
<method-param>java.lang.String</method-param>
</method-params>
</query-method>
<ejb-ql>
<![CDATA(SELECT OBJECT(a) FROM ProductBean AS a WHERE name=?1)]>
</ejb-ql>
Prof. U. Aßmann, CBSE
</query>
57
EJB and Others
► 
► 
► 
Interceptors and Decorators
■ 
The Interceptor of a bean is like a decorator
■ 
It can be overwritten and extended from outside the EJB
■ 
User can write filters for EJB
■ 
JBoss uses this for aspect-oriented EJB (see later)
EJB was formed after Microsoft's MTS (now COM+)
■ 
COM+ is in .NET
■ 
Models are somewhat similar
Corba Component Model (CCM) is also similar
Prof. U. Aßmann, CBSE
58
XDoclets
► 
► 
► 
► 
An XDoclet is a plugin into the XDoclet framework
The XDoclet framework is a doclet, i.e., a Javadoc extension
XDoclets define new tags (xtags), used for metadata
■ 
Tags can have attribute lists
■ 
/* @ejb.bean
type = “CMP” name=”client” view-type=”local” */
Tags steer code generation
■ 
XDoclet compiler reads the Java source files, evaluates commented tags and
generates additional code
Java,
with xtags
Java byte
code
Additional
helper code
Prof. U. Aßmann, CBSE
59
Use of Xdoclets in EJB 2.0
► 
► 
Generation of
■ 
Deployment descriptors
■ 
Default interfaces
■ 
Implementation stubs
Example [from XDoclet documentation]
/** Account
@see Customer
@ejb.bean name=”bank/Account” type=”CMP”
jndi-name=”ejb/bank/Account”
primkey-field=”id”
@ejb.finder signature=”jara.util.collection findAll()”
unchecked=”true”
@ejb.transaction type=”required”
@ejb.interface remote-class=”test.interfaces.Account”
@version 1.5
*/
Prof. U. Aßmann, CBSE
60