Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Enterprise Java Beans
Mikael Åkerholm
Component Technologies
EJB
Page 1, 5-Nov-03
Lecture Stucture
Introduction
1.
Java
2.
JavaBeans
3.
J2EE
J2EE
1.
EJB
2.
Java Serverlets, JSP, and clients
3.
Packaging and Deployment
Summary, Questions
Component Technologies
EJB
Page 2, 5-Nov-03
1
References
Literature:
z
Enterprise JavaBeans, R.M. Haefel, 3rd O’Reilly 2001
z
The Source for Java Technology, good, up to date,
tutorials, specifications, and reference implementations
http://java.sun.com/
Component Technologies
EJB
Page 3, 5-Nov-03
Java
The current main release is the Java 2 platform, it is
modular and include three parts:
z
J2SE, Java 2 Platform, Standard Edition
)provides the essential compiler, tools, runtimes, and APIs for writing,
deploying, and running applets and applications
z
J2EE, Java 2 Platform, Enterprise Edition
)component based model, simplifies enterprise development and
deployment; manages the infrastructure and supports the web services to
enable development business applications
z
J2ME, Java 2 Platform, Micro Edition
)a highly optimized Java runtime environment, specifically addresses the
vast consumer space (embedded systems), from smart cards to more PC
like applications
Component Technologies
EJB
Page 4, 5-Nov-03
2
JavaBeans
A desktop component model for Java, included among
the J2SE technologies
A Java API and a Specification
Software reuse for Software Development
Object-Oriented
Focus on lightweight components for small-scale CBD
Component Technologies
EJB
Page 5, 5-Nov-03
JavaBeans
Use standard naming conventions
Have public interfaces
Packaged in JAR files
Interface composed of:
z
Properties:
)Simple, Boolean or Indexed
)Could be Bound or Constrained
z
Events:
)signaled by changing properties
)signaled for custom state changes
z
Methods:
)default is any public method
)Built via BeanInfo class or Reflection API
Component Technologies
EJB
Page 6, 5-Nov-03
3
Java 2 Enterprise Edition (J2EE)
For enterprise applications (distributed business
applications)
z
Demands
)Availability
)Security
)Reliability
)Scalability
z
From the early 90s
)Shift from 2-tier, client-server application models to more flexible 3-tier (and n-tier)
application models
)The new models separated business logic from system services and the user interface
Component Technologies
EJB
Page 7, 5-Nov-03
Java 2 Enterprise Edition (J2EE)
Presentation
Presentation
Presentation tier
Tier Boundary
Business
Business
logic
logic
Business
Business
logic
logic
Business tier
Database
Database
driver
driver
Tier Boundary
Database
Database
Component Technologies
EJB
Data tier
Page 8, 5-Nov-03
4
Java 2 Enterprise Edition (J2EE)
Component Technologies
EJB
Page 9, 5-Nov-03
Java 2 Enterprise Edition (J2EE)
J2EE Application Programming Model
z
Applications on the client
z
Java Server Pages (JSP), web components on the server,
extension of Serverlets; in the end these are concerned with
clients
z
EJB, business components on the server side
Component Technologies
EJB
Page 10, 5-Nov-03
5
Enterprise JavaBean (EJB)
Java’s component model for distributed enterprise
applications, released 1998
EJB technology defines a model for the development of
reusable Java server components
Def:
”Enterprise Java Beans is a standard server-side component
for computer transaction monitors.”
Applications written using EJB are:
z
Scalable
z
Transactional
z
Multi-User secure
Component Technologies
EJB
Page 11, 5-Nov-03
EJB != JB
Once and for all
JB
z
Desktop Components
EJB
z
Enterprise Distributed Components
z
Could of course be implemented using JavaBeans
Component Technologies
EJB
Page 12, 5-Nov-03
6
J2EE
Component Technologies
EJB
Page 13, 5-Nov-03
Contents
1.
EJB Components
General
Interfaces and classes
Architechture
Different types
Transactions
2.
Java Serverlets, JSP and clients
Brief
3.
Packaging and Deployment
Brief
Component Technologies
EJB
Page 14, 5-Nov-03
7
What is an Enterprise JavaBean?
”A server-side component that
encapsulates the business logic of an
application”
Component Technologies
EJB
Page 15, 5-Nov-03
When to use Enterprise JavaBeans
If any of these requirements hold for your
application:
The application must be scalable and
distributable
Transactions are required to ensure data
integrity
The application will have a variety of clients
Component Technologies
EJB
Page 16, 5-Nov-03
8
Enterprise JavaBeans
Entity Beans
z
Persistent
z
Primary key
Session Beans
z
Receive their state from the client
z
Live as long as the client need them
Message-Driven Beans (EJB 2.0)
z
Asynchronously
z
Only a bean class – no interfaces
Component Technologies
EJB
Page 17, 5-Nov-03
Classes and Interfaces
Remote Interface
Specifies the beans business methods
Home Interface
Defines the beans life cycle methods
Bean Class
Implements the beans business methods
Primary Key
Provides a pointer into the database
Component Technologies
EJB
Page 18, 5-Nov-03
9
A Bean’s interfaces
Remote Interface
z
Business methods to do the beans work
z
Implemented by the “shadowdy” Bean Object
Remote Home Interface
z
Defines the beans life cycle methods
z
Implemented by EJB Home
Local Interface (EJB 2.0)
z
Business methods used by other beans in the same
container
Local Home Interface (EJB 2.0)
z
Life-cycle methods used by other beans in the same
container
Component Technologies
EJB
Page 19, 5-Nov-03
A Bean’s classes
The Bean Class
z
Implement the business methods
z
Do not implement Remote (or local) and (local) Home
Interfaces
z
Beans exist in the middle of client software and data
sources
z
Clients never interact directly with the bean class, uses
methods of the Remote and Home Interface, interacting
with automatically generated stubs
Component Technologies
EJB
Page 20, 5-Nov-03
10
EJB Architecture
Home Interface
EJB Client
EJB Server
Home
Home
Stub
Stub
EJB Container
Home
Home
Object
Object
Object
Object
Stub
Stub
EJB
EJB
Object
Object
Bean
Bean
Class
Class
Remote Interface
(or Local Interface)
Component Technologies
EJB
Page 21, 5-Nov-03
When to use Entity Beans
The bean represents a business entity, not a
procedure
To provide a safe and consistent interface to a set of
shared data
Component Technologies
EJB
Page 22, 5-Nov-03
11
Entity Beans
Represents a business object in a persistent
storage mechanism
Can be shared by multiple clients
Two types of persistence:
z
Container-managed
z
Bean-managed
Component Technologies
EJB
Page 23, 5-Nov-03
Container-managed persistence
They are the simplest to develop
The bean’s code contain no database access
calls
Component Technologies
EJB
Page 24, 5-Nov-03
12
Bean-managed persistence
Explicitly write persistence logic
More flexibility in how state is managed between
the bean instance and the database
Used when deployment tools are inadequate
Component Technologies
EJB
Page 25, 5-Nov-03
Life Cycle
Component Technologies
EJB
Page 26, 5-Nov-03
13
When to use Session Beans
Only one client has access to the beans instance
Non persistent and existing only for a short period of
time
Component Technologies
EJB
Page 27, 5-Nov-03
Session Beans
Useful for describing interactions
Does not represent shared data in the database,
but can access shared data
Two types:
z
Stateless
z
Stateful
Component Technologies
EJB
Page 28, 5-Nov-03
14
Stateless Session Beans
Supports multiple clients
Relatively easy to develop and very efficient
Require few server resources
Stateless session beans are appropriate if:
The bean's state has no data for a specific client
A generic task is performed in a single method
invocation
The bean fetches a set of read-only data
Component Technologies
EJB
Page 29, 5-Nov-03
Life Cycle
Component Technologies
EJB
Page 30, 5-Nov-03
15
Stateful Session Beans
Dedicated to one client for the life of the bean
instance
Instance variables represent the state of a unique
client-bean session
Stateful session beans are appropriate if:
The bean needs to hold information about the
client across method invocations
The bean mediates between the client and the
other components of the application
Component Technologies
EJB
Page 31, 5-Nov-03
Life Cycle
Component Technologies
EJB
Page 32, 5-Nov-03
16
When to use Message-Driven Beans
To receive messages asynchronously
When consuming JMS messages
Component Technologies
EJB
Page 33, 5-Nov-03
Message-Driven Beans
Has only a bean class
Can consume and process messages
concurrently
Acts as a JMS message listener
Deliver messages to a virtual channel
Currently process only JMS messages
Component Technologies
EJB
Page 34, 5-Nov-03
17
Life Cycle
Component Technologies
EJB
Page 35, 5-Nov-03
Calling an EJB
2 Return
reference
home stub
JNDI
1 Ask for
Home object
5 Return Obj stub
EJB Client
3 Ask for EJB Object
EJB Server
EJB Container
Home
Home
Object
Object
4 Create EJB Object
EJB
EJB
Object
Object
6 Invoke a method
Bean
Bean
Class
Class
7 Wraps the call to the Bean Class
Component Technologies
EJB
Page 36, 5-Nov-03
18
Transactions with EJBs
Managed automatically
No use of API
Defined at deployment
Possible to explicitly manage transactions but not
recommended
Component Technologies
EJB
Page 37, 5-Nov-03
A Transaction
Transactions is the execution of a unit-of-work that
accesses on or more resources, usually databases
A unit-of-work is a set of activities that relate to each
other and must be completed together
The objective with transactions is to execute an unit-of
work that results in a reliable exchange
Transactions are often complex and usually involve
manipulation of data
Transactions must work perfectly every time or not be
executed at all
Component Technologies
EJB
Page 38, 5-Nov-03
19
Acid-properties
Atomic
z
A transaction must execute completely or not at all
Consistent
z
A transaction always leads to a correct transformation of
the system state by preserving the state invariance
Isolated
z
The data a transaction access cannot be affected by any
other parts of the system until the transaction is
completed
Durable
z
All the data changes made during the course of
transaction must be written to a physical storage before
the transactions is physically completed
Component Technologies
EJB
Page 39, 5-Nov-03
Transaction Management
Declarative transaction management
z
The transactional behavior controls by using
transactions attribute in the deployment descriptor
z
One of the primary advantages of EJB
z
Reduce the complexity for the developers
z
Makes it easier to create robust transaction applications
Explicit transaction management
z
Difficult to use
z
Will not be covered in this talk
Component Technologies
EJB
Page 40, 5-Nov-03
20
Transactions Attribute
You can set the runtime transaction attribute as a XMLattribute in the deployment descriptor by hand, but we
will use a deployment wizard
It is more efficient and easier to use transaction
attributes than to control transactions explicitly
It is possible to set a transaction attribute for the entire
bean or to set different transactions attribute for
individual methods
There exist six transaction attributes in EJB 2.0:
z
NotSupported
z
Supports
z
Required
z
RequiresNew
z
Mandatory
z
Never
Component Technologies
EJB
Page 41, 5-Nov-03
The Different Transactions Attributes
NotSupported
z
Invoking a method on a bean with this transaction
attribute suspends the transactions until the method is
completed
Supports
z
Means that the bean method will be included in the
transactions scope if it is invoked within a transaction
Required
z
Means that the bean method must be invoked within the
scope of a transaction
Component Technologies
EJB
Page 42, 5-Nov-03
21
The Different Attributes, Cont.
RequiresNew
z
Means that a new transactions always starts
Mandatory
z
Means that the bean method must always be made part
of the transaction scope of the calling client
Never
z
Means that the bean method must never be invoked
within the scope of a transaction
Component Technologies
EJB
Page 43, 5-Nov-03
Java Serverlets, JSP and clients
Component Technologies
EJB
Page 44, 5-Nov-03
22
Serverlets
A serverlet is a server side component, which is
deployed in the same fashion as a EJB
Used to dynamically create html pages, for clients
z
Since it is server side, it extends the reach for clients to
backend components (e.g., EJBs) in the server
A servelet is assigned to handle an access for a specific
html page
z
When the specific page is requsted by a browser, a
method in the servelet is envoked which posts the html
page back
When a client looks at the html code posted from the
server, it looks just like a static html page
Component Technologies
EJB
Page 45, 5-Nov-03
JavaServer Pages, JSP
An extension of serverlets, simplifies the creation of
dynamic html
Simply lets the developer incorporate real java code into
a html page when desired (as a scripting language)
Is actually compiled to servelets
Component Technologies
EJB
Page 46, 5-Nov-03
23
Clients
Web clients with serverlets or JSP, JSP possibly more
powerful
Can also create application clients
z
An client side component, that access EJBs
z
Easy and straightforward to create, deploted in the same
fashion as EJBs
Component Technologies
EJB
Page 47, 5-Nov-03
Packaging and Deployment
Component Technologies
EJB
Page 48, 5-Nov-03
24
Deployment and Deploy Tools
Packaging
z
Create JAR files
)A compressed platform-independent file
)Bean and Beans interface and help classes
z
Create deployment descriptors
)XML files specifying
)Access control
)Bean references
)External Resource references
)Transactional attributes
Deployment
z
Deploy the application on a server
Component Technologies
EJB
Page 49, 5-Nov-03
Packaging and Deployment
Can be done by hand
z
Gives full control
z
Time consuming
Graphical deplytool with wizards included in the
reference implementation
z
Easy, fast
Component Technologies
EJB
Page 50, 5-Nov-03
25
Summary
JB != EJB
EJBs Typically used for 3 or more tiers bussiness
applications
EJBs, server side components, with remote and home
interfaces; packaged in JAR files with deployment
descriptors
z
Session, Entity, Message
Clients, can be applications or web pages through
servelets or JSP
Component Technologies
EJB
Page 51, 5-Nov-03
Example
Entity Bean Person
“Let’s look how to build a bean”
Component Technologies
EJB
Page 52, 5-Nov-03
26
The Remote Interface
/**
Remote Interface
Business methods for Person beans
*/
import javax.ejb.Exception;
javax.ejb.Exception;
public interface Person extends javax.ejb.EJBObject {
String getName()
getName() throws RemoteException;
RemoteException;
void setName(String n) throws RemoteException;
RemoteException;
}
Component Technologies
EJB
Page 53, 5-Nov-03
The Home Interface
/**
Home Interface
Life cycle method for Person beans
*/
import
import
import
java.rmi.RemoteException;
java.rmi.RemoteException;
javax.ejb.CreateException;
javax.ejb.CreateException;
javax.ejb.FinderException;
javax.ejb.FinderException;
public interface PersonHome extends javax.ejb.EJBHome {
//responsible for initalizing an instance of the bean
public Person create(int id)
throws CreateException,
CreateException, RemoteException;
RemoteException;
//look up a bean in a DB
public findByPK(PersonPK pk)
pk)
throws FinderException,
FinderException, RemoteException;
RemoteException;
}
Component Technologies
EJB
Page 54, 5-Nov-03
27
The Bean Class
/**
Bean Class
Implements the business
Person Bean is a Entity
*/
public class PersonBean
methods for Person component
Bean
implements javax.ejb.EntityBean {
private int id;
private String name;
//business methods
public Sting getName()
getName() {
return name;
}
public void setName(String n) {
name=n;
}
// continue next slide…
Component Technologies
EJB
Page 55, 5-Nov-03
// … and the bean class continues
//ejb.entity
//ejb.entity methods
public PersonPK ejbCreate(int i) {
id=i;
return null;
}
public
public
public
public
public
public
public
public
void
void
void
void
void
void
void
void
ejbPostCreate(int i) {/*+*/}
ejbSetEntityContext(EntityContext ctx)
ctx) {}
ejbUnsetEntityContext()
ejbUnsetEntityContext() {/*+*/}
ejbActivate()
ejbActivate() {}
ejbPassivate()
ejbPassivate() {}
ejbLoad()
ejbLoad() {/*+*/}
ejbStore()
ejbStore() {/*+*/}
ejbRemove()
ejbRemove() {}
// + note: session beans do not have these methods
}
Component Technologies
EJB
Page 56, 5-Nov-03
28
Example
Simple JSP page
“How to build a web client”
Component Technologies
EJB
Page 57, 5-Nov-03
<%-<%-- A jsp file that use a session bean --%>
--%>
<%@ page import="Converter,ConverterHome,javax.ejb.*,
import="Converter,ConverterHome,javax.ejb.*, java.math.*,
java.math.*,
javax.naming.*,
javax.naming.*, javax.rmi.PortableRemoteObject,
javax.rmi.PortableRemoteObject,
java.rmi.RemoteException"
java.rmi.RemoteException" %>
<%!
private Converter converter = null;
null;
<%-<%-- The init method,
method, JNDNI lookup --%>
--%>
public void jspInit()
jspInit() {
try {
InitialContext ic = new InitialContext();
InitialContext();
Object objRef = ic.lookup("java:comp/
ic.lookup("java:comp/env/
env/ejb/
ejb/TheConverter");
TheConverter");
ConverterHome home =
(ConverterHome)PortableRemoteObject.narrow(objRef,ConverterHome.c
lass);
lass);
converter = home.create();
home.create();
} catch (Exception ex) {
System.out.println("Couldn't create converter bean."+
bean."+
ex.getMessage());
ex.getMessage());
}
Component Technologies
EJB
Page 58, 5-Nov-03
29
public void jspDestroy()
jspDestroy() {
converter = null;
null;
}
%>
<html>
<form method="get">
method="get">
<input type="text"
type="text" name="amount"
name="amount" size="25">
<input type="submit"
type="submit" value="Submit">
value="Submit"> </form>
<%
String amount = request.getParameter("amount");
request.getParameter("amount");
if ( amount != null && amount.length()
amount.length() > 0 ) {
BigDecimal d = new BigDecimal (amount);
amount);
%>
<%= amount %> Kronor are <%= converter.yenToEuro(d)
converter.yenToEuro(d) %>
Euro.
<%
}
%>
</body
>
</body>
Component Technologies
</html>
Page 59, 5-Nov-03
EJB
Example
A deployment descriptor
“Good to understand, when time allows!”
Component Technologies
EJB
Page 60, 5-Nov-03
30
XML Document Header
XML documents start with two general information tags:
1. Specifies the XML version the file use
z
<?xml version=”1.0”?>
2. Specifies the DTD that defines the XML file
z
Provides the URL to the DTD, you can download it and
validate the XML file
z
<!DOCTYPE ejb-jar PUBLIC ”-//Sun Microsystems,
Inc.//DTD Enterprise JavaBean 1.1//EN”
”http://java.sun.com/j2ee/dtds/ejb-jar.dtd”>
Component Technologies
EJB
Page 61, 5-Nov-03
XML Descriptor’s Body
The Body start with a root element defined by the DTD.
The root element describing:
z
Bean/ Beans <enterprise-beans>
)Entity or Session Beans
)Primary Key
)Environment Entries
)Reference to other Beans
)Reference to External Resources (such as a Database)
)Security Roles
z
Bean/Beans Assembly <assembly-description>
)Transactional attributes
)Security roles & Method permissions
Component Technologies
EJB
Page 62, 5-Nov-03
31
XML Body example
<ejb<ejb-jar>
<description>a body example</description>
<enterprise<enterprise-bean>
<session>
- - </session>
<entity>
- - </entity>
- - </enterprise</enterprise-bean>
<assembly<assembly-descriptor>
- - </assembly</assembly-descriptor>
</ejb</ejb-jar>
Component Technologies
EJB
Page 63, 5-Nov-03
XML Bean example
<entity>
<description> a Bean example </description>
<ejb</ejb-name>
<ejb-name>PlayerBean
name>PlayerBean</ejb
<home>com.chess.player.PlayerHome
</home>
<home>com.chess.player.PlayerHome</home>
<remote>com.chess.player.Player</remote>
<ejb-class>
<ejb-class> com.chess.player.PlayerBean</ejb
com.chess.player.PlayerBean</ejb<persistence<persistence-type>Container</persistencetype>Container</persistence-type>
<prim<prim-keykey-class>java.lang.Integer</primclass>java.lang.Integer</prim-keykey-class>
<primkey-field>
primkey-field>id</primkey
field>id</primkey<reentrant>False</reentrant>
<cmp-field>
cmp-field><fieldfield><field-name>id</fieldname>id</field-name></cmp
name></cmp- - <cmp-field>
cmp-field><fieldfield><field-name>name</fieldname>name</field-name></cmp
name></cmp</entity>
Component Technologies
EJB
Page 64, 5-Nov-03
32
XML Security Roles and Method permissions
<ejb-jar>
<enterprise-beans>...</enterprise-beans>
…
<assembly-descriptor>
<container-transaction> … </container-transaction>
<security-role>
<description>allows to read/write</description>
<role-name>everyone</role-name>
</security-role>
<method-permission>
<role-name>everyone</role-name>
<method>
<ejb-name>myBean</ejb-name>
<method-name>*</method-name>
</method>
</method-permission>
</assembly-descriptor>
Component Technologies
EJB
Page 65, 5-Nov-03
33