A Practical Introduction to
Enterprise Java Beans
A Component Technology
IN 30 MIN’s
DO YOU WANT
TO ANSWER MOST
OF THE
EJB QUESTIONS ?
THEN LET ME
HELP YOU!
EJB
The Heart of J2EE
BY
Kantimahanti Prasad
Kanti.Prasad@pramerica.ie or Kanti1@donegal.net
Copyright 2004 Kanti Prasad All rights reserved
1. Learning objectives
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Component Technology characteristics
Standard Infrastructure needs
Application Servers
Containers
J2EE Architecture and its components
EJB Model, Overview & JNDI
EJB Specifications, Roles
EJB Design Approaches, Architecture
Types of Beans
EJB Interfaces & Session Contexts
Life cycles of different Beans
EJB Jar files & Deployment Descriptor
Sample examples
Components comparison
Copyright 2004 Kanti Prasad All rights reserved
A STAR or a
different color
represents
important
points to NOTE
2. About the Author
Kantimahanti.N.S.Prasad
Worked in fortune 100 Corporates in Client Server Technologies.
Specializes in
Architecture, Designing, Development & Managing day-to-day activities.
Presently doing a PhD at Queens Uty, U.K in Adaptable Software specific to
Component Technologies and has a M.B.A (Computer Applications) from an U.S. Uty.
Business domain strengths are in Investment banking & Insurance.
U NEVER
FAIL
TILL U QUIT
Process improvement strengths are in 6 - Sigma and CMM.
His present & past working experiences in various global locations are in corporates like
Pramerica (Prudential U.S), J P Morgan Chase, A B N Amro Bank & SGS.
He was a part time visiting faculty in affiliates of Sydney University, Australia and All India Management
Institute teaching I.T, Project Management & Statistics. He has given some presentations on Project
Management and TQM at various venues. He has won few Talent/STAR performance awards and plays
almost all the sports what are under the Sun.
He hails from Vizag/ Hyderabad – India. His 3rd party tested Temperament Sorter results are below
https://www.advisorteam.com/temperament_sorter/testresult.asp?TID=740281673499&PID=15800
https://www.advisorteam.com/temperament_sorter/testresultc.asp?TID=740281662156&PID=13606
If you liked his presentation, tell others and if you have a comment, tell him. He can be reached at
Kanti.Prasad@Pramerica.ie or Kanti1@donegal.net
3. Thank you note
He wishes to thank Paul Perrone , Paulo Merson & Ramesh Behra for making
this tutorial look the way it does.
He wishes to thank to Katherine Ballantyne, Choi Kwan who volunteers to
edit all of his Articles & Presentations.
He wishes to thank Joerg Mueller, Muruganandam, CharlesJohnson & Venu
Gadium who had volunteered to do the editing of this presentation.
Special thanks to all his Managers at Pramerica and Prudential U.S.
Thank you for downloading my Presentation
ARUNA
SUNAYANA
SADHGI
his Parents
Dr.Rao &
Family
DEDICATED TO
Copyright 2004 Kanti Prasad All rights reserved
his Brothers his Sisters & his Cousins
4. Component Technology
Components are deployable units that provide a
business service to their clients.
•
•
•
•
Each component provides an interface in the form of operations,
properties and events
Components can be developed in any language such as JAVA,C++,VB
Components are frequently organized into application frameworks for
vertical domains
Component models such as Active X and EJB
standardize
communication and allow for prebuilt purchased components
Copyright 2004 Kanti Prasad All rights reserved
5. Component Characteristics
Components Characteristics include
 Properties
 Reusability
 Operations
 Shareable
 Events
 Distributable
 Deployable
 Self Containment
 Self description
Copyright 2004 Kanti Prasad All rights reserved
6. Component P O E
Components should have a mechanism for exporting
 Properties
 Operations
 Events
Copyright 2004 Kanti Prasad All rights reserved
7. Deployable Components
Components are operation independent of
•
•
•
•
Hardware
The underlying operating system
Their Application Server
The network protocol they use
Copyright 2004 Kanti Prasad All rights reserved
8. Reusable Components
Component services can be used as a part of
business logic of other components
Copyright 2004 Kanti Prasad All rights reserved
9. Shareable Components
If multiple clients are using a component
simultaneously, the component will provide
the same quality of service to all the clients
Copyright 2004 Kanti Prasad All rights reserved
10. Distributable Components
Components should provide services to clients
running locally or remotely
EJB Container
EJB
Local
CLIENTS
Possible
Remote
CLIENTS
Remote
CLIENTS
Remote
CLIENTS
Remote
CLIENTS
Copyright 2004 Kanti Prasad All rights reserved
11. SelfContained Components
Components should only contain the code
necessary to implement their services
Infrastructure services should be injected by
the execution environment
Copyright 2004 Kanti Prasad All rights reserved
12. Standard Infrastructure Needs
Standard infrastructure services include
•
•
•
•
•
•
•
•
•
Directory Services
Distributed transaction management
Security management
Concurrent access management
Persistence management
Resource pooling (e.g. DB connections)
Administration interface
Load Balancing
Fault tolerance
Copyright 2004 Kanti Prasad All rights reserved
13. Applicatoin Servers
An application server provides the infrastructure and
services to run components/applications
Application Server products are mostly
J2EE
based
solutions
Copyright 2004 Kanti Prasad All rights reserved
Non-J2EE
solutions
(PHP, Cold Fusion,
Perl, etc.)
Microsoft Solutions
(COM, ASP.Net
VB.Net,C# etc.)
14. Object Pooling
An application server may create a pool of bare objects
that may be used as EJBs when requests are made
App Server
EJB Container
EJB
EJB
EJB
Pool
CLIENT
EJB
EJB
Network
CLIENT
Copyright 2004 Kanti Prasad All rights reserved
EJB
DB
15. Directory of Application Servers
Application Servers provide clients access to software or
other applications that run only on the server
Examples include web servers, e-mail servers and database servers
Popular Application Servers are:
•
•
•
•
I.B.M. Web Sphere
BEA Web Logic
Sun Java System Application Server 7.x
Jboss
The full list with vital statistics are available at
http://www.devx.com/enterprise/html/16268
http://www.javacommerce.com/articles/serverlist.htm
Copyright 2004 Kanti Prasad All rights reserved
16. Container
Container means a
pre developed Software
A Container :
Fish cannot survive outside water &
EJB’s cannot survive outside containers
•
•
•
provides the environment in which a bean executes
generates Home Object
generates EJB Object
Implicit Middleware
•
manages individual bean instances
&
To increase capability.
clustering is taken care
by the vendor
Transaction
gained through declaration
Container provides System services like
Persistence
Security
Connection
Pooling
Threading
App Server
EJB Container
EJB
EJB
STUB
CLIENT
Network
Container
intercepts
requests
EJB
Container knows what to do, as you describe everything in a special descriptor file
Copyright 2004 Kanti Prasad All rights reserved
17. J2EE Overview
Deployment
Descriptors (DDs)
Web Server Independence
Application Server
Independence
Database Independence
Enterprise Resource
Management Services
Distributed Communication
Services
Common Programming
Services
Operating System
Independence
Hardware Independence
Copyright 2004 Kanti Prasad All rights reserved
Enterprise Components
services
standards
component-based
J2EE
Container/Server
J2EE Interfaces
Management Services
Deployment/Configuration
J2SE Language/Interfaces
J2SE Runtime
Operating System Platform
Hardware Platform
Deploy
Tools
Data
18. J2EE 1.4 APIs
J2EE defines a model for developing multi-tier, web based,
enterprise applications with distributed components
Applet
Container HTTP/S
Applet
J2SE
Web Container
JSP
Application Client
Container
HTTP/S
X C B S
R C S
JAF
JMX A D N B
I
C
EJB
JAX- J J
RPC A A
X C
SAAJ
R C
W J
E M
B S
S
J2SE
Client
RMI/
IIOP
Java Mgmt J
J
J
C
N
D
Mail
T
O
D
B
JAF JMX A
N
I
J2SE
4 TIER
3 TIER
JAX- J
W Mgmt
J
J
C
RPC A
E
D
M
O
X
B JMX
B
SAAJ
S
N
R
S
C
EJB Container
Servlet
JSP Servlet ENGINE
JAX- J J W J Java Mgmt
J
J
J
C
RPC A A E M Mail
N
D
T
O
SAAJ
RMI/
IIOP
EIS
DAO
DB
2 TIER
J2SE
MainFrames
For all the APIs refer http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html
Copyright 2004 Kanti Prasad All rights reserved
C
19. Enterprise JavaBeans Model
EJB is Sun’s J2EE transactional, vendor-neutral,
enterprise component architecture providing
•
•
•
•
Modelling of business entities as well as synchronous and
asynchronous processes
Persistence via explicit code (bean-managed) or via services of the EJB
server (container-managed)
Vendor neutrality and inter operability
XML driven deployment and configuration
EnterpriseJava Beans
EJBs need a Container
EJBs are deployable components
EJBs are assembled to form a complete Appl
EJBs are based on RMI IIOP and JNDI Technologies
Copyright 2004 Kanti Prasad All rights reserved
!=
Java Beans
JBs do not need a container
JBs are development components
JBs are Classes with no argument constructor
JBs have a get and a set method on them
20. EJB Overview
EJB simplified distributed development
–Develop EJB implementation logic
–Define Home/Local Remote/Local interfaces
–Container delegates client calls
–Container manages resources/lifecycle/callbacks
EJB Client
Client Process
EJB
Client
Home
create
remove
find
Remote
invoke
Copyright 2004 Kanti Prasad All rights reserved
Network
LocalHome
Local
create
remove
find
STUB
invoke
STUB
EJB Impl
create timeout
remove passivate
activate
find
load
invoke
store
Delegate
Delegate
Delegate
Delegate
EJB
Pool
J2EE EJB Container/Server
21. When to use EJB
If any of these requirements hold for your application
•
•
•
the application must be scalable and distributable
Transactions will be required to ensure data integrity
the application will have a variety of clients
Copyright 2004 Kanti Prasad All rights reserved
22. Java Naming and
Directory Interface (JNDI)
JNDI
Provides a standardized way of accessing resources in a distributed
environment
Protocol and naming service agnostic
•
DNS
•
NDIS
•
LDAP
•
X.500
Implemented by the javax.naming package and three other packages
below it
javax.naming.InitialContext is the entry point to the EJB Server
•
bind – associates a name with an object
•
lookup – finds an object given the name
Copyright 2004 Kanti Prasad All rights reserved
23. EJB Specification
The EJB specification defines interfaces between
•
•
•
the EJB and its container
the container and the application server
the container and the client
Copyright 2004 Kanti Prasad All rights reserved
24. EJB Roles
Service & Tool Provider
provides Server, Container and integrates with distributed facilities
EJB Provider
Application Assembler
creates EJB components
assembles apps from per-built EJB comp
Deployment Specialist
deploys apps and understands architecture issues
builds application
supplies tools
Tools Provider
Application Assembler
deploys system
Deployer
supplies Application Server
develops EJBs
EJB Provider
Copyright 2004 Kanti Prasad All rights reserved
Application Server Provider
System Administrator
maintains deployment
25. EJB Design Approaches
EJB model is based on three basic design approaches for
building distributed component systems
Stateless server approach
Persistent Object approach
Session-oriented approach
The EJB specification provides these as
Stateless session Beans
Stateful session Beans
All EntityBeans
implements
Interface
javax.ejb.EntityBean
extends
Implementing one of these interfaces
indicates your JAVA class is an EJB.
Message driven beans
Entity Beans
All SessionBeans
implements
All MessageDrivenBeans
Interface
javax.ejb.SessionBean
implements
Interface
javax.ejb.MessageDrivenBean
extends
extends
javax.ejb.EnterpriseBean interface
extends
It is only a marker Interface
java.io.Serializable
and there are no methods to
Implement.
Serialization is the reason
EJB is distributable.
Copyright 2004 Kanti Prasad All rights reserved
As all these are extending the
two Interfaces hence they have
the behavior of both the Interfaces.
26. EJB Architecture
Naming
Service such
as LDAP
Naming
2
Transaction PersistenceServer
Security
A
SERVICES
H
Server B
App Server
H
JNDI
Initial Context
H
3
1
Home
Interface
4
H
Home
Obj
Stub
Application
Client
EJB
Obj
Stub
EJB Container
8
Home Object
(FACTORY)
10
EIS
5
6
RMI/IIOP
Remote
Interface
7
EJB
creates
EJB Object
(Wrapper)
DB
(Business Logic Class)
9
MainFrames
delegates request
11
Container implements/autogenerates code for the Interfaces
we have written
We will write only this Container manages TRANSACTIONS, PERSISTENCE, SECURITY & POOLING
Copyright 2004 Kanti Prasad All rights reserved
27. EJB Flow Chart
C
Start
ask JNDI Server for the Home Object
1
JNDI Server returns ref of Home Stub
2
ask Home for the EJB Object
4
returns reference of Remote Stub
5
Copyright 2004 Kanti Prasad All rights reserved
invokes a business method
thru Remote Stub
7
goes to the JNDI Server
and gets the EJB Object
8
Remote Interface then wraps
a request to the Bean class
3
creates EJB Object
C
6
Clients receives the required info
9
End
28. Client View of EJB
ENTITY BEANS are like NOUNS as they represent data or data related logic.
App Server
EJB Container
EJB Home or
EJB Local Home
Application
Client
RMI/
IIOP
EJB Object or
EJB Local Object
JMS Destination
e.g
•Bank teller
•Credit Card authorization
Session Bean
instance
Entity Bean
instance
e.g
•Bank account balance
•Purchase order
Message Driven
Bean instance
e.g
•Stock trade messages
•Work flow messages
SESSION BEANS are like VERBS as they represent action or business process related logic.
MESSAGE DRIVEN BEANS have message oriented logic.
Copyright 2004 Kanti Prasad All rights reserved
If all the processing is done in the same Application server then we use
EJB Local(Object & Home) interfaces. Using local interfaces are optional.
Local interfaces pass by REFERENCE and EJB (Object/Home) pass by VALUE.
Using local interfaces avoids stubs, skeletons, network and so it is faster.
29. EJB Client
EJB clients
utilizes the Java Naming and Directory Interface (JNDI) to look up
for the references to home interfaces
use home and remote EJB interfaces to utilize all EJB-based
functionality
Copyright 2004 Kanti Prasad All rights reserved
30. EJB Home Interface
EJB home interfaces extends javax.ejb.EJBHome
EJB home interfaces provide operations for clients to
• create EJBs
• remove EJBs
• find handles to EJB remote interface objects
• have its stub placed into JNDI at startup
Copyright 2004 Kanti Prasad All rights reserved
31. EJB Remote
EJB remote interfaces extends javax.ejb.EJBObject
EJB remote interfaces
• provide business-specific functionality of an EJB
• are similar to RMI Remote interface
Copyright 2004 Kanti Prasad All rights reserved
32. EJB Implementation
EJB implementation
Class in which EJB developer codes the business methods
defined in the bean’s component interface(s) to provide any
application specific
•
•
•
•
•
•
•
business method invocation
creation
removal
finding
activation
passivation, database storage
database loading logic
Copyright 2004 Kanti Prasad All rights reserved
33. Session Context
The Container has already reference to the bean
The bean interacts with the Container through SessionContext and
•
•
•
retrieves home interfaces
gets and sets transactions attributes
obtains security attribute
The setSessionContext method is used to inform the bean
about the session context
Copyright 2004 Kanti Prasad All rights reserved
34. Stateless Session EJB
Stateless session EJBs have the following behaviour
•
•
•
•
•
•
provide a single use service
do not maintain state on behalf of the client
are relatively short lived
do not survive EJB server crashes
any two instances of the same stateless session EJB
type are always identical
each instance can be shared by multiple clients
Copyright 2004 Kanti Prasad All rights reserved
35. Stateless Session EJBs View
Stateless Session
EJB Client
EJB
Client
Home
Remote
Logic
LocalHome Local
Client Process
input
Network
EJB Pool
output
J2EE EJB Container/Server
EJB Impl Developer View
EJB gets requests and generates responses
An instance can service multiple clients over time
EJB Client Developer View
creates it, uses it and then it’s done
EJB Container View
can pull instances from pool upon client request
can shrink/grow pool as needed
A few pooled beans can service thousands of clients
36. Life Cycle of Stateless Session Bean
Each method call is an
invocation from the
container to the Bean
Container decided it
needs more instances
in the pool to service clients
Bean Instance
does not exiist
Class.newInstance()
setSessionContext()
ejbRemove()
ejbCreate()
Pool of equivalent
method ready instances
Client called another
Transactional business method
on the EJB Object.
Transactional
Business Method
Client called remove()
on the EJB object
(or the client times out)
37. Stateful Session EJBs View
Stateful Session
EJB Client
LocalHome Local
Client Process
EJB
Client
Home
Remote
Logic
State
input
Network
EJB Pool
output
J2EE EJB Container/Server
EJB Impl Developer View
EJB gets requests and generates responses
An instance can service multiple clients over time
EJB Client Developer View
creates it, uses it and then it’s done
EJB Container View
can pull instances from pool upon client request
can shrink/grow pool as needed
38 .Life Cycle of Stateful Session Bean
Each method call is an
Invocation from the
container to the Bean
Client called remove()
on the EJB object
(or the client times out)
Bean Instance
does not exiist
Client called create(args)
on the home Interface.
Class.newInstance()
setSessionContext()
Client called a
non-transactional business
method on the EJBObject
ejbRemove()
Client times out
Container’s limit of
instantiated beans
are reached, so it must
swap your bean out.
ejbCreate(args)
Non-Transactional
Business Method
Bean instance is ready
to service method calls
ejbPassivate()
ejbActivate()
Client called a transactional
business method on the
EJB Object
beforeCompletion()
afterBegin()
afterCompletion(true)
afterCompletion(false)
Bean instance is in
the passive state
Client called a method
on a passivated bean, so
Container must swap your
Bean back in
If transaction ended
in a commit..
Bean instance is within
a transaction and ready
to service method calls
Client called another
Transactional business method
on the EJB Object.
We need to write all
the methods that
are there in the
Transactional
Business Method
Implemented class
If we implement Javax.ejb.SessionSynchronization then we need to
write these methods.
If transaction ended
in an abort.
39. Stateful vs Stateless
Stateful Bean
Stateless Bean
A stateful bean contains a conversational state that is
retained across method calls and transactions.
A stateless bean does not have any state between calls to
its methods.
The create method takes arguments
e.g. create(String id) , create(int I , String id)
There can be one or more arguments in a create method
The create method does not take arguments
e.g create()
There can be no arguments in a create method
e.g
An EJB that unzips 100 bytes of data
An EJB that checks to see if a stock symbol is valid
e.g
An EJB that books a flight and rents a car at a travel agent’s
web site.
Method by method comparison can be seen in EJB20Matrix.doc at http://www.volantec.biz/cmp20.htm
Copyright 2004 Kanti Prasad All rights reserved
40. Entity Bean
Entity Bean has the following behaviour
•
•
•
•
•
They are a representation of persistent data
They can survive a crash
Multiple clients can be using EJBs that represent the
same data
The EJB instance contains a copy of the data in the
persistent store
has a Primary key like in a Database record.
Copyright 2004 Kanti Prasad All rights reserved
41. BMP Entity EJBs
(BMP = Bean-Managed Persistence)
Entity Bean (BMP)
EJB Client
LocalHome Local
Hand
Coded
Logic
Client Process
EJB
Client
Home
Remote
Network
EJB Pool
input
output
J2EE EJB Container/Server
Persisted objects (via hand-coding)
data
EJB Impl Developer View
encapsulates data from a data source as objects
implements object-relational mapping (often JDBC)
implements inserts, deletes, queries and updates
EJB Client Developer View
creates, finds, updates and removes entity objects
EJB Container View
persists and manages concurrent access of instances
42. Primary key class
•


Applicable only to entity beans
Uniquely differentiates instances sharing the same
EJBHome
Class must be a legal value type in RMI-IIOP




Implements java.io.Serializable
all the members should be public
It should implement hashCode() and equals(.. ) methods
does not implement java.rmi.remote
Copyright 2004 Kanti Prasad All rights reserved
43. Shared Entity Bean
When multiple clients share an Entity EJB they
•
•
•
receive their own instance
share the underlying data
do not have to handle synchronization
App Server
EJB Container
CLIENT
EJB
Network
CLIENT
Copyright 2004 Kanti Prasad All rights reserved
EJB
DB
44. Life Cycle of BMP Entity Bean
Each method call is an
Invocation from the
container to the Bean
Container decided it
needs another
Entity Bean insinstance
newInstance()
unsetEntityContext()
JVM will garbage
collectt and call finalize()
setEntityContext()
Client called instance
independent ejbHome()
Business method
Client called a finder
Method on the home
interface
ejbHome()
Client called create() on
the home interface (this will
Create new database data)
Container determined
that the database is out of
synch with the bean. The
Bean needs to load the
new Database data.
ejbFind()
Pooled
Activates the Bean
Passivates the Bean
ejbCreate()
ejbActivate()
ejbStore()\
ejbPostCreate()
ejbLoad()
ejbPassivate()
ejbLoad()
Client called a business
method on a EJBObject
Container decided it
doesn’t need the
Entity Bean instance
anymore
Does not exiist
Ready
Business Method
ejbRemove()
ejbStore()
Client called remove()
on the EJB object
(this will destroy
Database data)
Container determined
that the database is out of
synch with the bean. The
Bean needs to store its
Data into the Database
45. CMP Entity EJBs
(CMP = Container-Managed Persistence)
Entity Bean (CMP)
EJB Client
LocalHome Local
Generated
Logic
Client Process
EJB
Client
Home
Remote
Network
EJB Pool
input
output
J2EE EJB Container/Server
Persisted objects (via container services)
data
Persistence
DDs
EJB Impl Developer View
specifies CMP fields and relations among entities in DDs
specifies queries via EJB-QL in DDs
uses tools to map standard object view to specific relational view
EJB Client Developer View
creates, finds, updates and removes entity objects
EJB Container View
persists and manages concurrent access of instances
46. Life Cycle of CMP Entity Bean
Each method call is an
Invocation from the
container to the Bean
NOTE : BMP has no ejbSelect()
Container decided it
needs another
Entity Bean in
newInstance()
unsetEntityContext()
JVM will garbage
collectt and call finalize()
setEntityContext()
Client called instance
independent ejbHome()
Business method
ejbHome()
Client called create() on
the home interface (this will
create new database data)
Container determined
that the database is out of
Synch with the bean. The
Bean needs to load the
new Database data.
Client called a finder
method on the home
Interface, or bean
called its own
ejbSelect()
method to locate
Database data
ejbFind() or ejbSelect()
Pooled
Activates the Bean
Passivates the Bean
ejbCreate()
ejbActivate()
ejbStore()\
ejbPostCreate()
ejbLoad()
ejbPassivate()
ejbLoad()
Client called a business
method on a EJBObject
Container decided it
doesn’t need the
Entity Bean instance
anymore
does not exiist
Ready
Business Method
Or ejbSelect()
ejbRemove()
ejbStore()
Client called remove()
on the EJB object
(this will destroy
Database data)
Container determined
that the database is out of
Synch with the bean. The
Bean needs to store its
Data into the Database
47. BMP vs CMP
Bean Managed Persistance
Container Managed Persistance
BMP offers a tactical approach
CMP is more strategic
The developer takes care of handling persistence
Vendor takes care of everything by using O-R or OODB
mappings using metadata.
BMP uses hard coded queries so we can optimize our
queries
A developer cannot optimize performance as the vedor
takes care of it
We should start developing CMP beans, unless we require some kind of special bean, like multi-tables, that
cannot be completely realized with a single bean. Then when we realize that we need something more or that
we prefer handling the persistence (performance issue are the most common reason), we can change the bean
from a CMP to a BMP
Method by method comparison can be seen in EJB20Matrix.doc at http://www.volantec.biz/cmp20.htm
Copyright 2004 Kanti Prasad All rights reserved
48. Message Driven Bean
MDB has the following behaviour
• Is stateless
• is a JMS listener
• when a JMS message arrives the method
onMessage() is executed
• does not survive EJB server crashes
• provides a single-use service
• is relatively short lived
• is only a bean class – no interfaces
Copyright 2004 Kanti Prasad All rights reserved
49. Message Driven EJBs
Producer Process
Message Messaging
API
Producer
Messaging
Service
Message
Network
Message-Driven Bean
Message
Queue
Handler Logic
input
Message
Message
Listener
EJB Pool
J2EE EJB Container/Server
Asynchronous messaging
EJB Impl Developer View
gets async requests via messaging paradigm-specific interface
An instance can service multiple clients over time
EJB Client Developer View
Messages sent to endpoint & handled by messaging service
Specific to particular messaging paradigm used
EJB Container View
pulls instance from pool and delivers message
50. Life Cycle of Message Driven Bean
Each method call is an
Invocation from the
container to the Bean
Container decided it
needs another
Message DrivenBean
Instance
Does not exiist
newInstance()
ejbRemove()
setMessageDrivenContext()
ejbCreate()
Pooled
onMessage()
51. Deployment
Deployment involves taking an EJB compliant bean and
•
•
•
•
creates XML that describes the EJB
packages the bean and XML into a Jar
generates container files for the EJB
configures properties of the EJB Server
Declaring without programming helps the application assembler to change the XML file easily.
BEAN Provider declares components’ middleware service requirements in a DEPLOYMENT DESCRIPTOR File.
Bean Provider describes how the Container should perform the LifeCycle Management, Persistence, Transaction and Security.
Copyright 2004 Kanti Prasad All rights reserved
52. Other interfaces and classes


Local interfaces are used for access within server context

javax.ejb.EJBLocalHome

javax.ejb.EJBLocalObject
Interfaces for serializing EJB references



E.g.:
•Inter component calls
•Servlet invocation
HomeHandle - reference to EJBHome
Handle - reference to EJBObject
EJBMetaData interface provides mechanism to gather
information about the bean



reference to EJBHome object
Home, component interface and primary key classes
functions to determine bean type
Copyright 2004 Kanti Prasad All rights reserved
53. Exceptions


System exceptions are unchecked and propagated to the
client as java.rmi.RemoteException
Application exceptions are checked and propagated to the
client as a descendant of java.lang.Exception

EJB-specific exceptions include FinderException,
CreateException, RemoteException (all in javax.ejb
package)

Business method exceptions are at the discretion of the
EJB developer
Copyright 2004 Kanti Prasad All rights reserved
EXAMPLE 1
STATELESS BEAN
Copyright 2004 Kanti Prasad All rights reserved
54. Steps to Develop an EJB
C
Start
Write .java files for the BEAN, HOME
and REMOTE interfaces
Write the Deployment descriptor
Compile all the STEP 1 files into
.class files
Using the Jar utility create an EJB Jar
file containing STEP 2 & STEP 3 files
1
5
2
Configure your EJB Server.
E.g DB connections thread pooling etc
Then copy the EJB Jar file
Start your EJB container and
6 confirm that it has loaded
the EJB Jar file.
3
Connect to your EJB by writing a test
7 Client .java file compile it and run it .
4
End
C
Please download the trial Application Server software from the links provided on the Reference slide at the end.
Copyright 2004 Kanti Prasad All rights reserved
55. Hello World Object Model using RMI
We will apply the previous slide flow chart procedure to make up our first EJB
example
These Interfaces comes with Java 2 Platform
java.rmi.Remote
java.io.Serializable
These Interfaces comes with EJB distribution
Javax.ejb.EJBObject
Javax.ejb.EJBHome
Javax.ejb.EnterpriseBean
Javax.ejb.SessonBean
Supplied by the Bean Provider / Developer/ We will write !
We
Hello world Remote Interface
need
to CODE
only Interface
this block
Hello
World Home
Generated for us by the Container verdor’s tools
Hello world EJB Object
Copyright 2004 Kanti Prasad All rights reserved
Hello World Home Object
Hello World Bean
Implementation Class
NOTE : Object implementation
is Vendor specific. The container
may implement either
A single object for each client or
A single object for all the clients.
56. Hello World Object Model using LOCAL
If all the processing is done in the same Application server then we use EJB Local (Object & Home) interfaces.
Using local interfaces are optional. Local interfaces pass by REFERENCE and EJB (Object/Home) which is the
previous slide model you saw will pass by VALUE. As these interfaces does not extend Java.rmi.Remote the
overhead of creating stubs, skeletons,network traffic is avoided and so it is faster but the drawback is if our
code relies on Local interfaces then we cannot call a bean remotely.
No Network so
LOCAL IMROVES
PERFORMANCE
These Interfaces comes with Java 2 Platform
java.rmi.Remote
These Interfaces comes with EJB distribution
Javax.ejb.EJBLocalObject
Javax.ejb.EJBLocalHome
java.io.Serializable
Javax.ejb.EnterpriseBean
Javax.ejb.SessonBean
Supplied by the Bean Provider / Developer/ We will write !
Hello world LocalInterfaceWe need
Hello to
World
Local
Home
CODE
only
thisInterface
block
Generated for us by the Container verdor’s tools
Hello world EJB LocalObject
Copyright 2004 Kanti Prasad All rights reserved
Hello World Local Home Object
Hello World Bean
Implementation Class
NOTE : Object implementation
is Vendor specific. The container
may implement either
A single object for each client or
A single object for all the clients.
57. HelloBean Home Interface
EJB Example requirement :
When the client interacts with the EJB we need to return a “Hello World” greeting.
To provide an EJB with the above requirement we have to create Remote & Home
Interfaces , Bean Business logic class and a deployment descriptor. For clarity please
see the previous slide Hello World Object Model using RMI.
This is the Home Interface for the Home EJB (HelloBean).
Rules of Java says package declaration should be at the beginning and ends with a semi colon
package examples ;
import java.io.Serializable;
import java.rmi.RemoteException;
Importing the required files
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
public interface HelloHome extends javax.ejb.EJBHome
Our interface HelloHome is extending EJBHome means it has all the behaviour of EJBHome
{
Hello create() throws java.rmi.RemoteException,
javax.ejb.CreateException;
Interface methods should end with a semicolon ;
This method creates/manufactures the EJBObject and returns it . This create() method corresponds to the
ejbCreate() method in HelloBean.
As for every Interface we need implementation,Note
so Container
implement
code) for Remote
this Home
Interface
In Home will
Interface
we are(autogenerate
throwing 2 exceptions
and
Create .for us, which is the EJBHome Object
}
NOTE : Rules of Interfaces states that there should be no implementation so you will find only method signatures.
Copyright 2004 Kanti Prasad All rights reserved
58. HelloLocalHome Interface
So now lets code the HelloLocalHome Interface
This is the LocalHome Interface for the Home EJB (HelloBean).
package examples ; Rules of Java says package declaration should be at the beginning and ends with a semi colon
import javax.ejb.EJBLocalHome;
import javax.ejb.CreateException;
import javax.ejb.FinderException;
import java.util.Collection;
Our interface HelloLocalHome is extending EJBLocalHome means it has all the behaviour of EJBLocalHome
public interface HelloLocalHome extends javax.ejb.EJBLocalHome
{
HelloLocal create() throws javax.ejb.CreateException;
This methodsocreates/manufactures
the EJBLocal
Objectcode)
and
returns
. This
create()
method
corresponds
to the; Object
As for every Interface we need implementation,
Container will implement
(autogenerate
for this itLocal
Home
for us,
which
isathe
LocalHome
Interface
methods
should
end
with
semicolon
ejbCreate() method in HelloBean.
Note
LocalHome
Interface
we areshould
throwing
Create and not Remote
there
is no network
NOTE : Rules
of In
Interfaces
states
that there
be only
no implementation
so youexception
will find as
only
method
signatures.
}
Copyright 2004 Kanti Prasad All rights reserved
59. HelloBean Remote Interface
So lets code the Remote Interface
Clients interact with the EJB Object through this Remote interface that is why we need to write this interface.
package examples ; Rules of Java says package declaration should be at the beginning and ends with a semi colon
import java.util.*;
Importing the required files
import javax.ejb.EJBObject;
import java.rmi.RemoteException;
public interface Hello extends javax.ejb.EJBObject
Our interface Hello is extending EJBObject means it has all the behaviour of EJBObject
{
public String hello() throws java.rmi.RemoteException;
As our requirement wants a business logic to greet Hello World a single method would be sufficient .
}
Interface methods should end with a semicolon ;
As Remote interface is used to interact with the Bean we need to mirror all the method signatures what
are there in a Bean class so that is why we are writing only one method in this Remote interface.
Note EJB specification states that all remote calls should throw RemoteException so we are throwing it.
As for every Interface we need implementation, so Container will implement (autogenerate code) for this Remote Interface for us, which is the EJBObject
NOTE : Rules of Interfaces states that there should be no implementation so you will find only method signatures.
Copyright 2004 Kanti Prasad All rights reserved
60. HelloLocal Interface
Clients interact with the EJB Object through this Local interface when there is no network involved..
package examples ; Rules of Java says package declaration should be at the beginning and ends with a semi colon
import javax.ejb.EJBLocalObject;
public interface HelloLocal extends javax.ejb.EJBLocalObject
Our interface Hello is extending EJBLocalObject means it has all the behaviour of EJBLocalObject
{
Interface methods should end with a semicolon ;
public String hello() ;
As our requirement wants a business logic to greet Hello World a single method would be sufficient .
}
As Local interface is used to interact with the Bean we need to mirror all the method signatures what
are there in a Bean class so that is why we are writing only one method in this Local interface.
Note As there is no remote calls no Remote Exception is thrown
As for every Interface we need implementation, so Container will implement (autogenerate code) for this Local Interface for us, which is the EJB Local Object
NOTE : Rules of Interfaces states that there should be no implementation so you will find only method signatures.
Copyright 2004 Kanti Prasad All rights reserved
61. The Bean Class
So now lets code the actual EJB Class
This is where we will code our Business logic
package examples ; Rules of Java says package declaration should be at the beginning and ends with a semi colon
import java.util.*;
Importing the required files
import javax.ejb.*;
public class HelloBean implements javax.ejb.SessionBean
NOTE : Note
If it is: Entity
this isBean
a class
we and
will not
implement
an Interface
javax.ejb.EntityBean
like the other two
and
(Home
if it is /Message
Remote).driven
This isbean
implementing
we will implement
SessionBean
javax.ejb.MessagedrivenBean
so it is a Session Bean
As per the below note in red we need to write all the methods what are in javax.ejb.SessionBean .
{
private SessionContext
This ctx;
ejbCreate() corresponds to the Homeobject Create(). NOTE : in Stateless Bean no arguments are sent
public void ejbCreate() { System.out.println(“ejbCreate()”); }
much to clean up.
public void ejbRemove() { System.out.println(“ejbRemove()”);} There is nothing
These are called
Management or
In Statelss Bean ejbActivate
public void ejbActivate() { System.out.println(“ejbActivate()”);}
Call back methods
and ejbPassivate Do not apply
public void ejbPassivate() { System.out.println(“ejbPassivate()”); }
public void setSessionContext(javax.ejb.SessionContext ctx) {
Storing the Context in a variable so that it can be queried later .
this.ctx = ctx; }
NOTE : Because it is a Session Bean we are using setSessionContext for Entity Bean we
use setEntityContext and for Message Driven Bean we use setMessageDrivenContext.
public String hello() { System.out.println(“Hello()”);
return “Hello World! “ ; }
Our Business method which matches
} our Remote Interface method signature
Java does not support multiple inheritance so you can extend only one class. To overcome
Copyright 2004 Kanti Prasad All rights reserved
this they had given us the Implementation option . So when we use implement we need to
implement or write all the methods what are there in the interface we implemented.
62. The Deployment descriptor
So now lets complete our EJB by writing the deployment descriptor.
THERE ARE MANY
TOOLS WHICH
CREATES THE
DESCRIPTOR
FOR US
As a Bean provider we need to specify the Middleware needs through this descriptor.
<!DOCTYPE ejb-jar PUBLIC “-//Sun Microsystems, Inc. // DTD Enterprise JavaBeans 2.0 //
EN “ “ http://java.sun.com.dtd/ejb-jar_2_0.dtd”>
XML Standard requirement
<ejb-jar>
<enterprise-beans>
<session>
The nickname for this particular Bean
<ejb-name> Hello </ejb-name>
<home>examples.HelloHome</home> The fully qualified name of the Home Interface
<remote>examples.Hello</remote> The fully qualified name of the Remote Interface
<local-home>examples.HelloLocalHome</local-home>
The fully qualified name of the Local HomeInterface
<local>examples.HelloLocal</local> The fully qualified name of the Local Interface
<ejb-class>examples.HelloBean</ejb-class> The fully qualified name of the EJB Class
<session-type>Stateless</session-type> Whether the session bean is stateful or stateless
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>
Copyright 2004 Kanti Prasad All rights reserved
63. The Client
So now lets code our Client to access our simple stateless session bean.
package examples; Rules of Java says package declaration should be at the beginning and ends with a semi colon
import javax.naming.Context;
importing the necessary files
import javax.naming.InitialContext;
import java.util.Properties;
As there is static key word this main method executes first before any other method in that class
public class HelloClient {
public static void main(String [] args) throws Exception{
Properties props = System.getProperties(); Assigning props variable with properties information for JNDI initialization
Context ctx = new InitialContext(props); Obtaining the JNDI initial context is the starting point for connection to a JNDI tree
By passing environment properties we will choose our JNDI driver,network
a reference
to the Home
Object obj = ctx.lookup(“HelloHome”); Get
location
of the server
etc. Object- the factory for Hello EJB Objects.
HelloHome home = (HelloHome) javax.rmi.PortableRemoteObject.narrow(
obj, HelloHome.class);
Use the factory to create the Hello EJB Object. We are then calling the hello() method
Hello hello = home.create();
We are casting HelloHome here, as Home Objects are RMI-IIOP objects and so we
On the EJB Object. The EJB object will delegate the call to the Bean,receive the
Need to use a special RMI-IIOP cast.
Results and return it to us . We then print it on the screen.
System.out.println(hello.hello());
hello.remove();}}
Once we are done with the EJB Object, we can remove it.
Copyright 2004 Kanti Prasad All rights reserved
NOTE : To call Local Interface you need not cast with the PortableRemoteObject. So the
block in red will be changed to
Object obj = ctx.lookup(“java:comp/env/HelloLocalHome”); ( to get a ref to LocalHome Object)
HelloLocalHome home = (HelloLocalHome)obj;
64. EJB Jar File
The folder structure within the Ejb-jar file is
META-INF/MANIFEST.MF
META-INF/ejb-jar.xml
examples/HelloBean.class
examples/HelloLocalHome.class
examples/HelloLocal.class
examples/Hello.class
Properties
File
Remote/Local
Interface
HomeLocalHome
Interface
Enterprise
Bean Class
Deployment
Descriptor
Jar
Manifest
Jar Creator
Jar
file
DEPLOYED
Or manually run C:\>Jar cf HelloWorld.jar *
Jar file is a .ZIP compression format . META-MF file is a listing file automatically created by the Jar utility.
Please read the Deployment instructions provided by the Application server as it is Vendor specific
Copyright 2004 Kanti Prasad All rights reserved
65. EJB Application Assembler
.JAR
Jar
file
JAR ARC HIEVE (.jar)
EJB-JAR.XML
REMOTE
HOME
EJB
Copyright 2004 Kanti Prasad All rights reserved
Deployment
Descriptor
.WAR
Deployment
Tool
WEB ARCHIEVE (.war)
WEB.XML
Enterprise Archive
(.EAR Files)
(Application.XML)
HTML
JSP
Servlets
EXAMPLE 2
STATEFUL BEAN
Copyright 2004 Kanti Prasad All rights reserved
Stateful Session Remote Interface
package declaration should be in the beginning
package samples.ejb.stateful.simple.ejb;
import java.util.*;
import javax.ejb.EJBObject;
import java.rmi.RemoteException;
import samples.ejb.stateful.simple.tools.BookException;
Importing the required classes
Remote Cart is extending EJBObject means Cart has all the behaviour of it
public interface Cart extends EJBObject
Our bean class CartBean methods are mirrored here
{
public void addBook(String title) throws RemoteException;
public void removeBook(String title) throws BookException, RemoteException;
public Vector getContents() throws RemoteException;
}
EJB spec says all remote interface methods need to throw remote exception
There will not be any implementation in Interfaces
Copyright 2004 Kanti Prasad All rights reserved
Stateful Session Home Interface
package declaration should be in the beginning
package samples.ejb.stateful.simple.ejb;
import java.io.Serializable;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
Importing the required classes
CartHome is extending EJBHome means CartHome has all the behaviour of it
public interface CartHome extends EJBHome {
In a Stateful Bean you can have more than one create method taking arguments
Cart create(String person) throws RemoteException, CreateException;
In our bean class CartBean these represent
ejbCreate(String person) & ejbCreate(String person, String id)
Cart create(String person, String id) throws RemoteException,
CreateException;
}
EJB spec says all Home interface methods need to throw remote & create exceptions
There will not be any implementation in Interfaces
Copyright 2004 Kanti Prasad All rights reserved
Stateful Session Bean Class
package samples.ejb.stateful.simple.ejb;
package declaration should be in the beginning
import java.util.*;
import javax.ejb.*;
import samples.ejb.stateful.simple.tools.BookException;
import samples.ejb.stateful.simple.tools.IdVerifier;
Importing the required classes
public class CartBean implements SessionBean {
CartBean Class is implementing sessionbean means this bean class is a session bean
String customerName;
String customerId;
Vector contents;
We definedThis
this also
method
in the Cart
interface. person) method
represents
the remote
Home create(String
public void ejbCreate(String person) throws CreateException {
if (person == null) {
throw new CreateException("Null person not allowed.");
} else {
customerName = person;
}
customerId = "0";
contents = new Vector();
as this is the Bean class we will implement the business logic here
}
NOTE : AS we are implementing and not extending we need to write all the methods that are there in the Sessionbean
Copyright 2004 Kanti Prasad All rights reserved
Stateful Session Bean Class
public void ejbCreate(String person, String id) throws CreateException {
if (person == null) { This also
Werepresents
defined this
the Cart remote
interface
themethod
Home in
create(String
person,
String
throw new CreateException("Null person not allowed.");
} else {
customerName = person;
}
id) method we defined
The new operator is instantiating the instance of a class
IdVerifier idChecker = new IdVerifier();
if (idChecker.validate(id)) {
We are calling the validate(id)
customerId = id;
} else {
throw new CreateException("Invalid id: " + id);
}
method from the class ID Verifier
// This block is a supporting business method written in idVerifier class
contents = new Vector();
}
We defined this method in the Cart remote interface
public void addBook(String title) {
contents.addElement(title);
}
We defined this method in the Cart remote interface
public void removeBook(String title) throws BookException {
boolean result = contents.removeElement(title);
We defined contents as
if (result == false) {
throw new BookException(title + " not in cart.");
}
}
Copyright 2004 Kanti Prasad All rights reserved
a vector
Stateful Session Bean Class
We defined this method in the Cart remote interface
public Vector getContents() {
return contents;
}
public CartBean() {}
public void ejbRemove() {}
Bean class constructor
We need to write these methods as we are implementing SessionBean
public void ejbActivate() {}
public void ejbPassivate() {}
public void setSessionContext(SessionContext sc) {}
}
Rules of implement states we need to implement all methods that are there in the implemented interface
Copyright 2004 Kanti Prasad All rights reserved
Stateful Deployment Descriptor
THERE ARE MANY
TOOLS WHICH
CREATES THE
DESCRIPTOR
FOR US
<?xml version="1.0" encoding="UTF-8"?>
<!-Copyright 2004 Sun Microsystems, Inc. All rights reserved.
SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
-->
<ejb-jar version="2.1" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd">
<display-name>CartJAR</display-name>
required by any XML document
<enterprise-beans>
<session>
<display-name>CartEJB</display-name>
The nickname for this particular Bean
<ejb-name>CartEJB</ejb-name>
<home>samples.ejb.stateful.simple.ejb.CartHome</home> The fully qualified name of the Home Interface
<remote>samples.ejb.stateful.simple.ejb.Cart</remote>
The fully qualified name of the Remote Interface
<ejb-class>samples.ejb.stateful.simple.ejb.CartBean</ejb-class> The fully qualified name of the EJB Class
<session-type>Stateful</session-type>
Bean type is mentioned here
<transaction-type>Container</transaction-type>
<security-identity>
<use-caller-identity/>
</security-identity>
</session>
Closing session and ejb
</enterprise-beans>
Copyright 2004 Kanti Prasad All rights reserved
Stateful Deployment Descriptor
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>CartEJB</ejb-name>
<method-intf>Remote</method-intf>
<method-name>getContents</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
<container-transaction>
<method>
<ejb-name>CartEJB</ejb-name>
<method-intf>Remote</method-intf>
<method-name>removeBook</method-name>
<method-params>
<method-param>java.lang.String</method-param>
</method-params>
</method>
<trans-attribute>NotSupported</trans-attribute>
</container-transaction>
Copyright 2004 Kanti Prasad All rights reserved
Passing Bean class methods and parameter info
Passing Bean class methods and parameter info
Stateful Deployment Descriptor
<container-transaction>
<method>
<ejb-name>CartEJB</ejb-name>
<method-intf>Remote</method-intf>
<method-name>addBook</method-name>
<method-params>
<method-param>java.lang.String</method-param>
</method-params>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
Copyright 2004 Kanti Prasad All rights reserved
Passing Bean class methods and parameter info
Stateful Session Client
package declaration should be in the beginning
package samples.ejb.stateful.simple.ejb;
import java.util.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
public class CartClient {
Importing the required classes
Client class
public static void main(String[] args) {
As static is there this main method will execute first
try {
The new operator is instantiating the instance of
Context initial = new InitialContext();
Object objref = initial.lookup("java:comp/env/ejb/SimpleCart");
a class
Looking into JNDI
CartHome home =
(CartHome)PortableRemoteObject.narrow(objref,
CartHome.class);
Casting with
Cart shoppingCart = home.create("Duke DeEarl","123");
shoppingCart.addBook("The Martian Chronicles");
shoppingCart.addBook("2001 A Space Odyssey");
shoppingCart.addBook("The Left Hand of Darkness");
Vector bookList = new Vector();
bookList = shoppingCart.getContents();
Copyright 2004 Kanti Prasad All rights reserved
a suitable RMI IIOP object
Creating the object
adding books to the object
Invoking the bean class method through remote interface Cart
Stateful Session Client
We defined booklist as a vector
Enumeration enumer = bookList.elements();
while (enumer.hasMoreElements()) {
String title = (String) enumer.nextElement();
System.out.println(title);
}
After storing in the variable “title” we are printing it
shoppingCart.removeBook("Alice in Wonderland");
shoppingCart.remove(); Removing a particular book
System.exit(0);
using the bean class method removeBook through
remote interface Cart –as we defined it this way
Cart shoppingCart = home.create("Duke DeEarl","123");
} catch (BookException ex) {
System.err.println("Caught a BookException: " + ex.getMessage());
System.exit(0);
We had written a new class BookException
} catch (Exception ex) {
System.err.println("Caught an unexpected exception!");
ex.printStackTrace();
System.exit(1);
}
}
}
Copyright 2004 Kanti Prasad All rights reserved
and using its method to catch any errors
Book Exception
package samples.ejb.stateful.simple.tools;
public class BookException extends Exception {
/**
* Default constructor.
*/
public BookException() {
}
/**
* Constructor with a <code>String<code> as a parameter.
* @param msg message, describing the exception.
*/
public BookException(String msg) {
super(msg);
}
}
Copyright 2004 Kanti Prasad All rights reserved
ID Verifier
package samples.ejb.stateful.simple.tools;
public class IdVerifier {
/**
* Default constructor.
*/
public IdVerifier() {
}
public boolean validate(String id) {
boolean result = true;
for (int i = 0; i < id.length(); i++) {
if (Character.isDigit(id.charAt(i)) == false)
result = false;
}
return result;
}
}
Copyright 2004 Kanti Prasad All rights reserved
ALL EXAMPLES
CAN BE SEEN AT
http://www.weblogic.com/docs/examples/ejb/Package-examples.ejb.html
http://my.execpc.com/~gopalan/java/entity.html
http://java.sun.com/developer/onlineTraining/Beans/EJBTutorial/
http://developers.sun.com/prodtech/javatools/jsstandard/reference/techart/entitybeans.html
Copyright 2004 Kanti Prasad All rights reserved
66. Component Comparison
Component Distributability
EJB
Can implement the Remote or Local Interface
ActiveX
Uses Microsoft’s architecture for determining how clients’
invocation requests are sent to components. DCOM used as
underlying transport mechanism
CORBA
ORB makes use of GIOP and other protocols to perform IPC
Copyright 2004 Kanti Prasad All rights reserved
67. Component Comparison
Components provide interfaces in the form of Operations
EJB
exports operations through Remote Interface
ActiveX
exports operations in the same interface
CORBA
exports methods through Interface Repository
Copyright 2004 Kanti Prasad All rights reserved
68. Component Comparison
Self – Container Components
EJB
Containers inject code to handle transactions, database management,
security, distributability and other customisable services. Containers
can be provided independent of App Server and EJB providers
ActiveX
Transactions, database management, legacy integration have to be coded
into the logic of the component. Security policy can be inherited from
NTLM. Transactions can be aided through MTS
CORBA
CORBAServices have different APIs. CORBAServices can be complicated
to code with. CORBAServices are not supported by all ORBs
Copyright 2004 Kanti Prasad All rights reserved
69. Component Comparison
Components provide interfaces in the form of Properties.
EJB
Properties are not explicitly exported but can be
mimicked through accessor operations
ActiveX
exports Properties in the same interface
CORBA
Properties not explicitly exported but can be
mimicked through attributes
Copyright 2004 Kanti Prasad All rights reserved
70. Component Comparison
Components provide interfaces in the form of Events.
EJB
Events supported through JMS with Message
Driven Bean
ActiveX
exports Events in the same interface
CORBA
Events supported through Event Service but cannot
be exported
Copyright 2004 Kanti Prasad All rights reserved
71. Component Comparison
Component Reusability
EJB
Incorporating the contents of an EJB can be done
in two ways:
• by having the new EJB use the services of an old
EJB as a direct client
or
• by writing an EJB class that inherits from an
existing one
These two methods of leveragability give developers
maximum flexibility
Copyright 2004 Kanti Prasad All rights reserved
72. Component Comparison
Component Reusability
Active X
Incorporating the contents of an ActiveX can be done
in two ways:
•
•
by having the new ActiveX use the services of an
old ActiveX as a client
or
by Delegation
The Components being reused must be registered on
the development machine
Copyright 2004 Kanti Prasad All rights reserved
73. Component Comparison
Component Reusability
CORBA
Every CORBA object has to have its own interface
definition
CORBA objects can use the services of other Objects
No mechanism for inheritance or Object reuse
inherently supported, though
Copyright 2004 Kanti Prasad All rights reserved
74. Component Comparison
Components Shareability
EJB
Application Server makes multiple instances of EJB Objects. Client
contexts can be stored in different thread contexts. Different types
of EJBs identify levels of shareability.
ActiveX
uses Microsoft's in–process/out-of-process architecture for sharing
multiple ActiveX components and Client components.
CORBA
ORB makes multiple instances of CORBA objects. Clients’ contexts are
managed by ORB but can behave differently based upon vendor’s
Implementation.
Copyright 2004 Kanti Prasad All rights reserved
75. Conclusion
We successfully completed a Tour on EJB . We looked at how an EJB is identified. How many
different types of EJBs’ are there and what each EJB type implements. Why
LocalInterfaces were introduced. We disected the EJB and went deeper into each part i.e. BEAN
Class, Remote Interface, EJB Object, Local Object, Local Interface, Home Object. We looked
Into the deployment descriptor and also seen all the files in EJB–Jar. We looked into each Beans
Methods and also learned why we needed those methods. We had done 2 different Beans
examples and we were directed to the Web links where all the examples are demonstrated. Once
you can get an idea of all the Interfaces, methods & exceptions raised, you can attempt to try
some examples to get familiar and master EJB. There are nearly 100s’ of Application servers
but in this presentation you can see a few majorly used AppServers sample implementation
web links. Just download any one of them and try out for yourself.
CONGRATULATIONS!
Now you know
as much as he
know of EJB
Copyright 2004 Kanti Prasad All rights reserved
If you have any comments or appreciations then please email him at
Kanti1@donegal.net, Kanti.Prasad@donegal.net
He likes to hear your feed back!
76. References
Application Server Information , EJB Documentation & Tutorials are found here
Notes on Deploying on different Application Servers.
The Art of EJB Deployment http://www.javaworld.com/javaworld/jw-08-2001/jw-0803-ejb.html
Most of EJB’s related information can be seen at http://www.volantec.biz/ejb.htm
http://www.theserverside.com/ Mastering Enterprise Java Beans
by Ed Roman , Scott Ambler & Tyler Jewel.
EJB Documentation http://java.sun.com/products/ejb/javadoc-2_0-fr/
http://my.execpc.com/~gopalan/java/java_tutorial.html
Application Servers download information . Most of them are either free or have a 60 day trial version
For JBOSS Open Source go to http://www.jboss.org/downloads/index
http://www.kevinboone.com/jboss_tut_1.html
SUN’s downloads and examples
http://developers.sun.com/prodtech/javatools/jsstandard/reference/docs/s1s5/partsuppliers.html
http://java.sun.com/j2se/1.4.2/download.html ,http://java.sun.com/j2ee/1.4/docs/tutorial/doc/
http://java.sun.com/developer/onlineTraining/EJBIntro/EJBIntro.html
BEA WebLogic downloads and examples
http://commerce.bea.com/index.jsp , http://www.weblogic.com/docs/examples/index.html
http://dev2dev.bea.com/codelibrary/code/examples_ejb20.jsp
WebSphere downloads and examples
http://www-306.ibm.com/software/webservers/appserv/doc/v20dcadv/doc/howto/ep001.html
REDHAT Application Server and Examples
http://www.redhat.com/docs/manuals/rhaps/jonas-guide/
Copyright 2004 Kanti Prasad All rights reserved
Covers
90 % of the
MARKET
Copyright 2004 Kanti Prasad All rights reserved