Nothing Special   »   [go: up one dir, main page]

Enterprise Javabeans: Ruslana Svidzinska Cse690

Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 53

Enterprise JavaBeans

Ruslana Svidzinska
CSE690
What is EJB?
An EJB is a specialized, non-visual
JavaBean that runs on a server.

EJB technology supports application
development based on a multiplier,
distributed object architecture in which
most of applications logic is moved
from the client to the server.
Server Components
Server components are application
components that run in an application
server.

Java Application Servers
A Java application server provides an
optimized execution environment for
server-side Java application
components.
A Java application server delivers a
high-performance, highly scalable,
robust execution environment
specifically suited to support Internet
enabled application systems.
WORA
The Enterprise JavaBeans architecture
defines a standard model for Java
application servers to support Write
Once, Run Anywhere (WORA)
portability
Component Portability
EJB technology takes the WORA concept
to a new level.
EJB completely portable across any
vendors EJB compliant application
server. The EJB environment
automatically maps the component to
the underlying vendor-specific
infrastructure services.
Overview of EJB Technology
Enterprise JavaBeans component model logically
extends the JavaBeans component model to
support server component.
Server components are reusable, prepackaged
pieces of application functionality that are
designed to run in an application server.
EJB can be assembled and customized at
deployment time using tools provided by an EJB-
compliant Java application server.
EJB Component Model
Simplifying Development.
The EJB architecture provides an
integrated application framework.
An EJB server automatically manages a
number of tricky middleware services on
behalf of the application components.
EJB component-builders can concentrate
on writing business logic rather than
complex middleware

Simplifying Development (contd)
RESULT:
Application get developed more quickly
Code is of better quality.
What EJB Accomplishes
You can take any Java class and with little effort make
it a distributed, secure, transactional class
You can take any data source and make the data
source appear to be a collection of Java objects
Eliminates distinction between data from a
database and any other source
All information is accessed through Java objects
All SQL is cleanly encapsulated in Java objects
true object-oriented programming
high reusability
Database objects work with the full Java class
library
What EJB Means to Us
Developers can focus on writing business logic
rather than writing low-level infrastructure like data
access, concurrency, transactions, threading, etc.
Reduces development time
Reduces complexity
Increases quality and reliability
The knowledge about EJB is portable among
many different products because EJB products are
based on a common standard
Greater reuse because code is located in shareable,
server objects
So....lets take a look at
Enterprise JavaBeans
A specification from JavaSoft
Enterprise JavaBeans defines a server component
model for the development and deployment of Java
applications based on a multi-tier, distributed object
architecture
The Enterprise JavaBeans specification defines:
A container model
A definition of the services the container needs to
provide to an Enterprise JavaBean, and vice versa
How a container should manage Enterprise
JavaBeans
Enterprise JavaBeans
Architecture
The EJB architecture specifies the
responsibilities and interactions among
EJB entities
EJB Servers
Enterprise Beans EJB Clients
EJB Server
EJB Container
Enterprise
Bean
Enterprise
Bean
EJB Containers
Clients
EJB Server
EJB Server
The EJB Server provides system services and
manages resources
Process and thread management
System resources management
Database connection pooling and caching
Management API

Provides a Runtime Environment
EJB Server
EJB Container
EJB Container
Hosts the Enterprise JavaBeans
Provides services to Enterprise JavaBeans
Naming
Life cycle management
Persistence (state management)
Transaction Management
Security
Likely provided by server vendor
Provides a Run-time Environment
for an Enterprise Bean
Enterprise JavaBeans
A specialized Java class where the real business logic
lives
May be developer-written or tool-generated
Distributed over a network
Transactional
Secure
Server vendors provide tools that automatically
generate distribution, transaction and security
behavior
EJB Server
EJB Container
Enterprise
Bean
Enterprise
Bean
EJB Clients
Client access is controlled by the container in
which the enterprise Bean is deployed
Clients locates an Enterprise JavaBean through
Java Naming and Directory Interface (JNDI)
RMI is the standard method for accessing a bean
over a network

EJB Server
EJB Container
Enterprise
Bean
Enterprise
Bean
Clients
Whats Unique About EJB

Mandates a container model where common services are
declared, not programmed
At development and/or deployment time, attributes defining
the beans transaction and security characteristics are
specified
At deployment time, the container introspects the Enterprise
JavaBean attributes for the runtime services it requires and
wraps the bean with the required functionality
At runtime, the container intercepts all calls to the object
Provides transactional, threading and security behavior
required before the method invocation
Invokes the method on the object
Cleans up after the call
Declarative Programming Model
Understanding EJB Components






JavaBeans vs Enterprise
JavaBeans
Enterprise JavaBeans is a framework for
building and deploying server-side Java
components
JavaBeans is a framework for client-side Java
components
Conceptually related because both are
components
The specifications are different
The specifications do not build on each other
or rely on each other
Whats in the EJB Specification
~200 Pages of technical material for EJB vendors
Goals for the Release
Roles and Scenarios
Fundamentals (Scope of EJB)
Session and Entity Beans
Transactions, Exceptions, Distribution
EJB Bean and Container Responsibilities
API Reference

EJB Vendors
Have to do all the WORK
Enterprise EJB Scenario
Clients Web Server
EJB Application
Server
Existing
Enterprise
Middleware
CICS Programs
SAP Modules
Browser
Application
Servlet
Shopping
Cart
Credit Card
Inventory
EJB Server
EJB Container
Databases
Bean Class is written by the developer
EJBHome and EJBObject interfaces and classes
control access to the Bean class
Deployment Descriptor
and MANIFEST describe
security and transactional
characteristics of the Bean
Written by Developer
Generated at Deployment
Generated at Development
EJB Server
EJB Container
E
J
B
H
o
m
e


I
n
t
e
r
f
a
c
e

Deployment
Descriptor
E
J
B
O
b
j
e
c
t


I
n
t
e
r
f
a
c
e

E
J
B
H
o
m
e

C
l
a
s
s

E
J
B
O
b
j
e
c
t


C
l
a
s
s

EJB Class
Manifest
An inside look at the various
components of EJB
EJB Server
EJB Container
E
J
B
H
o
m
e


I
n
t
e
r
f
a
c
e

E
J
B
H
o
m
e

C
l
a
s
s

EJBHome Interface and Class
Used to get a reference to a beans remote interface
Provides bean creation services
myFoo = fooHome.create() instead of
myFoo = new foo()
Supports multiple signatures to create EJB instances
Similar to class factory
in COM and CORBA
May be generated by
tools that come with an
EJB server
Also manages EJB:
querying (Entity Bean)
deleting (Entity Bean)
Interface javax.ejb.EJBHome
Home objects must implement this interface
Returns a reference to a bean by creating or finding
it
Every bean has a EJBHome interface that provides
methods for getting references to one or more beans
create methods are used to create new beans
there can be many create methods, similar to a
class having many constructors
Provides a bean removal interface also
The EJBHome Class implementation is provided by
the EJB Server Provider
Sample EJBHome Interface
public interface CustomerHome extends EJBHome

{
public abstract Customer create(String id, String name)
throws RemoteException, CreateException;

public abstract Enumeration findByName(String val)
throws RemoteException, FinderException;
public abstract RemoteEnumeration findStateByName(String val)
throws RemoteException, FinderException;
public abstract Customer findByPrimaryKey(CustomerKey pkey)
throws RemoteException, FinderException;
public abstract Customer findByPrimaryKey(CustomerKey pkey, int findSource)
throws RemoteException, FinderException;
public abstract CustomerState findStateByPrimaryKey(CustomerKey pkey, int
findSource)
throws RemoteException, FinderException;
}

Clients
EJB Server
EJB Container
create()
Client makes invocation to EJBHome
Class via the EJBHome Interface
Client calls one of the create() methods on the
EJBHome Class. The EJBHome class can have
multiple create() signatures.
Clients
EJB Server
EJB Container
EJB
Class
EJBHome Class instantiates
the Bean Class
When the create() method is
called in the EJBHome Class, it
is responsible for instantiating
the Bean class.
EJB Server
EJB Container
E
J
B
O
b
j
e
c
t


I
n
t
e
r
f
a
c
e

E
J
B
O
b
j
e
c
t


C
l
a
s
s

EJBObject Interface and Class
Intercepts calls to the EJB Class to add support for:
transactions
security
threading
EJBObject class has the same methods
as the bean and delegates to the bean
for actual behavior
EJBObject class checks security and
sets up transaction before delegating
method call to the bean
Clients can never get a reference to
a beans EJB Class, only the EJBObject
interface
Interface javax.ejb.EJBObject
public interface javax.ejb.EJBObject extends java.rmi.Remote
{
EJBHome getEJBHome() throws RemoteException;
Handle getHandle() throws RemoteException;
Object getPrimaryKey() throws RemoteException;
boolean isIdentical(EJBObject obj) throws RemoteException;
void remove() throws RemoteException, RemoveException;
}
Represents a specific bean instance
Remote objects must implement this interface
Primary key is an object that represents the primary
key for a specific instance of a bean
The EJBObject Class implementation is
provided by the EJB Server Provider
Sample EJBObject Interface
public interface Customer extends EJBObject

{
public abstract String getId() throws RemoteException;
public abstract String getName() throws RemoteException;
public abstract void setName(String val) throws RemoteException;

public abstract boolean getNameNull() throws RemoteException;
public abstract boolean getIdNull() throws RemoteException;

public abstract Enumeration getAccounts() throws RemoteException;
public abstract void addToAccounts(Account relInst) throws RemoteException;
public abstract void removeFromAccounts(Account relInst)
throws RemoteException;
}
Clients
EJB Server
EJB Container
Passes ref
of Bean
Client now has reference
to the EJBObject Class.
NOT A REFERENCE
TO THE BEAN
ITSELF!!!!
EJB
Class
After the EJBHome Class
instantiates the Bean...
The EJBHome Class will instantiate the EJBObject Class,
initializing it with the remote object reference to the Bean
Class.
The Client will now
communicate to the
EJBObject Class.
The EJBObject Class
will delegate the call to
the Bean.
Clients
EJB Server
EJB Container
EJB
Class
Client communicates to the Bean
class via the EJBObject Class
Client never has a direct reference
to the Bean.
The EJBObject Interface is the
interface for the Bean, so the
EJBObject Class delegates the
calls to the Bean.
The EJBObject Class
implementation will be
generated using vendor
tools.
EJB Class
A bean has a single Java class at its core
This class is written by a developer if its a session
bean
This class is sometimes generated by a tool if its an
entity bean
Implements application-specific business logic
Implements one of the following contracts:
javax.ejb.EntityBean
javax.ejb.SessionBean
These contracts provide for consistent behavior when
activating beans, passivating beans, reading data,
writing data
Every container can expect these methods in every bean
Deployment
Descriptor
EJB Container
EJB Server
Deployment Descriptor
Allows you to declare transaction and security attributes,
NO PROGRAMMING REQUIRED!!!
An EJB Deployment Descriptor describes the classes,
interfaces and declarative behavior of an EJB
Deployment Descriptor format is serialized objects:
javax.ejb.deployment.ControlDescriptor
javax.ejb.deployment.DeploymentDescriptor
javax.ejb.deployment.EntityDescriptor
javax.ejb.deployment.SessionDescriptor
The deployment descriptor
is generated by server tools
The deployment descriptor
classes are defined in the
EJB specification
Lets look at the value of the
Deployment Descriptor
Step #1 - Write your Bean implementation.
Step #2 - Compile this Java source into Java bytecode
Step #3 - Developer is responsible for creating a
serialized deployment descriptor for the bean. Most
likely using a tool from the vendor. EJB tools will use
Reflection API on the compiled EJB Bean to determine:
name of Bean class
methods
parameters
return values
Step #4 - The EJB Tool will use the above information to
generate a Deployment Descriptor file and an editor
with which to set transaction and security attributes.
Sample Contents of a
Deployment Descriptor
PS(TicketDemo,Concert,deployment_descriptor)
Entity{
VersionNumber
{
1.0
}
BeanHomeName
{
ConcertHome
}

ControlDescriptor
{
IsolationLevel
{
TRANSACTION_READ_COMMITTED
}

Method
{
int getId() throws java.rmi.RemoteException
}

RunAsMode
{
SYSTEM_IDENTITY
}

TransactionAttribute
{
TX_SUPPORTS
}
Method Level
Security Attribute
Method Level
Transaction Attribute
Manifest
EJB Container
EJB Server
Enterprise JavaBean Packaging
Enterprise JavaBeans are comprised of many Java files
These files are put in a JAR file
A JAR file is a ZIP file with a MANIFEST that
describes the contents of the file
A MANIFEST is a simple text file
Name: bank/AccountDeployment.ser
Enterprise-Bean: True
A JAR file can contain more than one Enterprise
JavaBean
Written by Developer
Generated at Development
Generated at Deployment EJB Server
EJB Container
E
J
B
H
o
m
e


I
n
t
e
r
f
a
c
e

Deployment
Descriptor
E
J
B
O
b
j
e
c
t


I
n
t
e
r
f
a
c
e

E
J
B
H
o
m
e

C
l
a
s
s

E
J
B
O
b
j
e
c
t


C
l
a
s
s

EJB Class
Manifest
Bean Development Process
Implement the EJB Class
Specify the remote interface
Specify the home interface
Specify security and
transactional characteristics
using vendor tools
(DeploymentDescriptor)
Use vendor tools to
generate supporting
code and package
components in EJB-jar
Iterate...
Enterprise Beans:
Session Beans & Entity Beans
Session Beans vs. Entity Beans
Bean-Managed Persistence
Container-Managed Persistence
EJB Transaction Attributes
Comparing Session and Entity
Beans
Mandatory for EJB
1.0
Represents a specific
client
(1 instance per client)
Short-lived
Transient
Can be any Java
class
May be transactional
Business Logic Beans

Optional for EJB 1.0
Represents
underlying data
object or context
(clients share instance)
Long-lived
Persistent
Can be a class that
maps to persistent
data
(e.g., database)
Always transactional
Beans which
represent data

Session Beans Entity Beans
Session Beans
Represents Process
A transient agent for an individual client that
executes on a server (e.g., ShoppingCart)
Session beans are often a client of multiple entity
beans
Implements javax.ejb.SessionBean interface
State management types for session EJBs
stateful - session bean may maintain state information
across method calls
stateless - session bean may be used to service multiple
clients
a stateless session bean can only have a single no-argument
create() method in its Home interface
Session Beans - Stateful or
Stateless
A Stateful Session Bean maintains a one-to-one relationship
with a Client. It maintains a user session. Most common
example is an e-commerce application with a shopping cart
unique for each user.
Container will automatically swap out the Session bean if it is inactive. Here
the container calls the ejbPassivate() method to save any private data to some
physical storage.
When container receives new request, the Container will call the ejbActivate()
method to restore the Session Bean.
A Stateless Session Bean can be accessed by multiple incoming
clients and keeps no private data. It does not maintain a
unique session with a client.
Keeps no persistent data. If it crashes, container simply starts another one and
the client transparently connects.
All access to the Bean is serialized.
Entity Bean
Represents Data
Implements javax.ejb.EntityBean interface
Maps a data source to a Java class
table, view, join or stored procedure in a relational database
a set of related records in a database
legacy data
Each instance of an entity bean is one row of data
Each instance of an entity bean is uniquely identified
by a primary key
An Entity Bean can also have additional methods for
business logic, etc.
Defining an Entity Bean
An Entity Bean must implement the
javax.ejb.EntityBean interface. In addition, the Entity
Bean must implement an ejbCreate() method for
each create() method on the Home Interface.
When the Home class gets a call to create(), it calls
the ejbCreate() method on the Entity Bean with the
corresponding signature.
ejbStore() and ejbLoad() used to synchronize Entity
Bean data with the database.
ejbActivate() and ejbPassivate() used for notification
that Entity Bean state is being written to the
database or restored from the database.
Since Entity Beans represent
Data...
Each instance of an Entity Bean is
uniquely identified by a primary key
object
Primary key can be saved and used
later to regain access to the same EJB
object identity
fooKey = fooBean.getPrimaryKey();

fooBean =
fooHome.findByPrimaryKey(fooKey);

Entity Bean Operations
BeanHome.create() is equivalent to an SQL INSERT
Causes a new database record to be inserted into
the database:
customerBean = customerHome.create(Jane",
Rodgers");
BeanHome.findSomething() is equivalent to an SQL
SELECT
Creates a bean instance that represents queried data from
a database
Can also return an enumeration to represent multiple rows
of data
There will typically be many findSomething() methods:
customerBean =
customerHome.findByName(firstName, lastName);
customerBeans = customerHome.findByZip(94023);
Entity Bean Operations
BeanHome.remove() and EJBObject.remove()
are equivalent to an SQL DELETE
causes the database record to be deleted from the
database
customerBean = customerHome.findByName(Jane,
Rodgers);
customerBean.remove();
Commiting a change on a found object is
equivalent to an SQL UPDATE
customerBean = customerHome.findByName(Jane,
Rodgers);
customerBean.setEmailAddress(jane.rodgers@yahoo.
com);
EJB Persistence
Provides Entity Beans the ability to
store and retrieve their state
Can be implemented by a bean
Bean Managed Persistence
Can be implemented by a container
Container Managed Persistence
Bean Managed Persistence
The entity bean is responsible for its persistent
behavior
EJB developer must implement database access
ejbCreate(), ejbLoad(), ejbStore(), ejbRemove()
Not automated, developer manually creates mapping
through JDBC calls
Not as reusable
Hard-code database access within class
Advanced features like connection pooling and
caching are difficult to support because of reliance on
hand written code

Container Managed Persistence
The EJB container is responsible for
persistence
The container provides tools that generate
code in the EJB class that maps methods in
the bean to a result set
Can map to a table, view, join or stored procedure in a
database
Server provides automated mapping to convert relational
data to bean instances
Advanced features like connection pooling
and caching are easily supported
High reuse

EJB Transaction Support
EJB allows you to either DECLARE transactions or CODE
THEM EXPLICITLY.
TO DECLARE: EJB allows you to declare transaction
support in the Deployment Descriptor and then have the
container take care of the details inside the remote class
Transaction attributes specified at the bean and method level
FOR EXPLICIT CONTROL: An EJB Container is required
to implement javax.transaction.UserTransaction
Provides an interface to a transaction service
Can be used by EJB clients and enterprise beans that are declared
to manage their own transactions (TX_BEAN_MANAGED)
EJB specification does not support nested transactions
EJB Transaction Attributes
TX_NOT_SUPPORTED
Cannot execute within a transaction
Suspends any existing transaction while method is called
TX_SUPPORTS
Executes with or without a transaction
Doesnt suspend existing transaction
TX_REQUIRED
Executes within a transaction
If no transaction exists, starts a new one and commits it when method completes
TX_REQUIRES_NEW
Always starts a new transaction and commits it when method completes
Suspends existing transaction
TX_BEAN_MANAGED
The bean manages its own transaction control
Suspends existing transaction
TX_MANDATORY
Must execute within a transaction
If no transaction exists, throws the TransactionRequiredException

You might also like