10B_EJB - Andrew.cmu.edu

Download Report

Transcript 10B_EJB - Andrew.cmu.edu

95-702 Distributed Systems
Lecture 19: Enterprise Java
Beans
95-702 OCT
Master of Information System
Management
1
Some Useful Resources
• Advanced Java 2 Platform How to
Program by Deitel, Deitel, & Santry
• Thinking in Enterprise Java Bruce Eckel et. Al.
• EJB 3.0 API Sun documentation
http://java.sun.com/products/ejb/docs.html
• Java Enterprise In A Nutshell
Farley, Crawford & Flanagan
95-702 OCT
Master of Information System
Management
2
From The Java EE Tutorial
Session beans
Servlets
JSP’s
Axis2
HTML
95-702 OCT
Master of Information System
Management
Entity beans
Message Driven
Beans
3
From The Java EE Tutorial
95-702 OCT
Master of Information System
Management
4
From The Java EE Tutorial
95-702 OCT
Master of Information System
Management
5
SOAP and Java EE
Slide from JAXM/JMS tutorial at Sun Microsystems
95-702 OCT
Master of Information System
Management
6
Slide from JAXM/JMS tutorial at Sun Microsystems
95-702 OCT
Master of Information System
Management
7
Benefits of Enterprise
Beans(1)
• Simplify development of large,
distributed applications.
• The developer can concentrate on
business problems.
• The EJB container handles
transaction management, security,
and authorization.
• Portable – may be moved to other
Java EE containers.
95-702 OCT
Master of Information System
Management
8
Benefits of Enterprise
Beans(2)
• Scalable – the components may be
distributed across many machines.
• Support for Location Transparency
– the client need not be concerned
with the location of the bean.
• Support for Transaction
management - ensures data
integrity (over concurrent access
of shared resources).
• Promotes thin clients and web
9
services.
95-702 OCT
Master of Information System
Management
Main Concept: Interposition
EJB Container
Application
stub
skeleton
95-702 OCT
Master of Information System
Management
• examine security credentials
• start or join transaction
• call any necessary persistence
functions
• trigger various callbacks
• call business logic
• more work with transactions,
persistence and callbacks
• send back result or an
exception
10
The Container Implements the
component interface (From Eckel)
95-702 OCT
Master of Information System
Management
11
Enterprise Java Beans
• Part of Java EE Enterprise Application Technologies
• Currently at EJB3.0 (Big simplification of code with
annotations – less concern with configuration files)
• Server-side managed components
• Server-Side
EJB objects may offer a remote view (via
a remote procedure call protocol) a local view
(direct procedure call) or both
• Managed
EJB container services are more involved than the
plain old JVM
• Components
distributed in binary format and are
configurable
95-702 OCT
Master of Information System
Management
12
Server-Side Implications
• In order to pull off the RPC trick we need:
• A naming service
-- Recall how RMI clients make requests on the
rmiregistry.
-- A stand alone EJB client would use a global JNDI
name.
InitialContext ic = new InitialContext(); // provider properties
Foo foo = (Foo) ic.lookup("FooEJB"); // and address of
// naming service
// found in
// jndi.properties
• RPC proxies
-- communications code along with
the appropriate interface
95-702 OCT
Master of Information System
Management
13
Managed: EJB Container
Services
• Object Persistence
• Declarative Security Control
• Declarative Transaction Control
• Concurrency Management
• Scalability Management
The programmer
need not worry
about the details.
Think “JVM on
steroids”.
95-702 OCT
Master of Information System
Management
14
EJB Types
• Entity Beans
• Session Beans
• Message-Driven Beans
95-702 OCT
Master of Information System
Management
15
EJB Types
• Entity Beans
• Session Beans
}
RMI-based server side components
Accessed using distributed object
Protocols (RMI IIOP)
• Message-Driven Beans}
95-702 OCT
Master of Information System
Management
New since EJB 2.0
Asynchronous server side
component that responds to
JMS asynchronous messages
(Think provider like JAXM)
16
Entity Beans (1)
• Represent a row of a relation. O/R mapping.
• Represent real world entities (customers,
orders, etc.).
• Persistent objects typically stored in a
relational database using CMP (Container
Managed Persistence) or BMP (Bean
Managed Persistence).
• The client sees no difference between CMP
and BMP beans.
• CMP promotes component portability (more
reliant on the container to handle detail).
• CMP uses its own Query Language EJB QL.
• CMP relies on an Abstract Schema in the
deployment
descriptor.
95-702
OCT
Master of Information System
Management
17
Entity Beans (2)
• Define a primary key class:
– Required for entity beans.
– Provides a pointer into the database.
– Must implement Java.io.Serializable.
• The EJB instance represents a particular row in
the corresponding database table.
• The home interface for the entity EJB
represents the table as a whole (has finder
methods.)
95-702 OCT
Master of Information System
Management
18
Entity Beans (3)
• The primary key can be used by the
client to locate the bean
• Rows may have columns that reference
other entity beans (e.g. an order has a
buyer)
• These relationships may be managed by
the bean or by the container (container
managed relationships)
95-702 OCT
Master of Information System
Management
19
Entity Bean(4)
OrderEJB
1
CusomerEJB
Many
1
Many
LineItemEJB
ProductEJB
Many
1
A relationship field is like a foreign key in a database.
If a
b then a “knows about” or “holds a pointer to” b.
95-702 OCT
Master of Information System
Management
20
Session Beans
•
•
•
•
Are an extension of the client application.
Manage processes or tasks.
Are not persistent.
Often employ several different kinds of entity
beans.
• Implement business logic.
• May be used as a web service.
• Come in two types:
– Stateless session beans (no memory between calls)
purchase(severalIems,creditCardNo);
– Stateful session beans (remember earlier calls)
addToCart(item);
purchase(creditCardNo);
95-702 OCT
Master of Information System
Management
21
Session Bean Quiz
• Which session bean promotes loose coupling?
– Stateless session beans (no memory between calls)
purchase(severalIems,creditCardNo);
– Stateful session beans (remember earlier calls)
addToCart(item);
purchase(creditCardNo);
Answer: Stateless session beans.
95-702 OCT
Master of Information System
Management
22
Implementing Entity and
Session Beans
• Define the component interfaces
– The remote interface specifies how the outside world
can access the bean’s business methods
– The remote home interface specifies how the outside
world can access the bean’s life-cycle methods (for
creating, removing and finding)
– The local interface specifies how the inside world
(same EJB container) can access the bean’s business
methods
– The local home interface specifies how the inside
world can access the bean’s life-cycle methods
EJB 3.0 Makes this process much easier.
95-702 OCT
Master of Information System
Management
23
Message-Driven Beans (1)
• Work in cooperation with Java Messaging System
(JMS).
• JMS is an abstraction API on top of MessageOriented Middleware (MOM) – like JDBC is an
abstraction API on top of SQL databases or like
JAXR is an abstraction API on different types of
XML registries or like JNDI is an abstraction API on
directories.
• Each MOM vendor implements things differently.
• MDB’s allow the developer to program using the
publish-subscribe messaging model based on
asynchronous, distributed message queues.
• The MOM vendor need only provide a service
provider for JMS (IBM’s MQSeries or Progress’
SonicMQ). 95-702 OCT
Master of Information System
Management
24
Message-Driven Beans (2)
• Are like session beans.
• Have no persistent state.
• Coordinate tasks involving other session
beans or entity beans.
• Listen for asynchronous messages.
• Unlike Session beans, provide no
remote interface describing the
methods that can be called.
95-702 OCT
Master of Information System
Management
25
Message-Driven Beans (3)
• Are receivers of MOM messages
coming through the JMS API.
• Usually take action when a
message is received.
• Unlike session and entity beans,
Message-Driven Beans expose no
remote or local view. They are not
called directly by a client.
95-702 OCT
Master of Information System
Management
26
Message-Driven Bean (4)
• Has no local, local home, remote, or remote
home interfaces to define.
• The container will call the onMessage()
method when an asynchronous message
arrives. (Like JAXM message provider.)
• Extends the EnterpriseBean class and
implements the javax.ejb.MessageDrivenBean
and javax.jms.MessageListener interfaces
95-702 OCT
Master of Information System
Management
27
Message-Driven Bean (5)
• Two basic messaging-system models
(1) point-to-point model allows messages to
be sent to a message queue to be read by
exactly one message consumer.
(2) publish/subscribe model allows
components to publish messages on a topic to
a server to be read by zero or more
subscribers. Subscribers register for a topic.
95-702 OCT
Master of Information System
Management
28
In Both Messaging Models
• The messages hold:
-- a header containing the destination and the
sending time.
-- message properties to allow the receiver to
select which messages they would like to
receive. These may be set by the sender.
-- the message body itself.
95-702 OCT
Master of Information System
Management
29
Point-to-point on the
Client Side
import javax.jms.*;
QueueConnection qCon;
QueueSession qSes;
QueueSender qSen;
Through JNDI get access to a QueueSender.
Build messages and send them to the queue.
The queue is responsible for transporting the
message to another queue on the server.
95-702 OCT
Master of Information System
Management
30
Point-To-Point on the Server
Side
import javax.jms.*;
QueueConnection qCon;
QueueSession qSes;
QueueReceiver qRec;
Through JNDI get access to a QueueReceiver.
Build a MessageListener with an onMessage
method.
95-702 OCT
Master of Information System
Management
31
Message Driven Beans (6)
• Handles asynchronous messages.
• Normally acts as a JMS message listener.
• The message may have originated from an
application client, another enterprise bean, a
web component or a non-Java application that
can generate messages.
• Like a stateless session bean but with no
interfaces.
• All operations within onMessage may be in a
transaction context.
95-702 OCT
Master of Information System
Management
32
From Sun
95-702 OCT
Master of Information System
Management
33
On The Client
// locate the connection factory and queue
connectionFactory =
(ConnectionFactory) jndiContext.lookup
("java:comp/env/jms/MyConnectionFactory");
destination =
(Queue)
jndiContext.lookup("java:comp/env/jms/QueueName");
95-702 OCT
Master of Information System
Management
34
// Next, the client creates the queue connection, session, and sender:
connection = connectionFactory.createConnection();
session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
messageProducer = session.createProducer(destination);
// Finally, the client sends several messages to the queue:
message = session.createTextMessage();
for (int i = 0; i < NUM_MSGS; i++) {
message.setText("This is message " + (i + 1));
System.out.println("Sending message: " +
message.getText());
messageProducer.send(message);
}
95-702 OCT
Master of Information System
Management
35
JMS Message Types(1)
The Message Body Contains:
TextMessage
A java.lang.String object (for example,
an XML document).
MapMessage
A set of name/value pairs, with names as
String objects and values as primitive types
in the Java programming language. The
entries can be accessed sequentially by enumerator
or randomly by name.
The order of the entries is undefined.
95-702 OCT
Master of Information System
Management
36
JMS Message Types(2)
BytesMessage
A stream of uninterpreted bytes. This message type is
for literally encoding a body to match an existing message
format.
StreamMessage
A stream of primitive values in the Java programming
language, filled and read sequentially.
ObjectMessage A Serializable object in the Java
programming language.
95-702 OCT
Master of Information System
Management
37
Listening to the Queue
public void onMessage(Message inMessage) {
TextMessage msg = null;
try {
if (inMessage instanceof TextMessage) {
msg = (TextMessage) inMessage;
System.out.println("MESSAGE BEAN: Message received: "
+msg.getText());
} else {
System.out.println("Message of wrong type: " +
inMessage.getClass().getName());
}
} catch (JMSException e) {
e.printStackTrace();
mdc.setRollbackOnly();
} catch (Throwable te) {
te.printStackTrace();
}}
95-702 OCT
Master of Information System
Management
38
Web Services
• A Web service client can access Java EE
applications in two ways.
• First, the client can access a Web
service created with JAX-RPC. Behind
the scenes, JAX-RPC uses a servlet to
implement the SOAP Web Service.
• Second, a Web service client can access
a stateless session bean through the
service endpoint interface of the bean.
Other types of enterprise beans cannot
be accessed by Web service clients.
95-702 OCT
Master of Information System
Management
39
A Stateless Session Bean as
a Web Service
• The client need not know that its
interacting with a Java EJB.
• It calls the bean like it calls any
other web service.
• Thus, .NET interoperates with Java
EE using XML on the wire.
95-702 OCT
Master of Information System
Management
40
The Web Service Endpoint
Interface
package helloservice;
import java.rmi.RemoteException;
import java.rmi.Remote;
The client cannot
see that it’s interacting
with an EJB
public interface HelloIF extends Remote {
public String sayHello(String name)
throws RemoteException;
}
95-702 OCT
Master of Information System
Management
41
The Web Service Session
we added remote and home
BeanIfInterfaces
then this bean could
package helloservice;
import java.rmi.RemoteException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
also be called using in the traditional
manner – with remote references.
No change to the bean would be
necessary.
public class HelloServiceBean implements SessionBean {
public String sayHello(String name) {
return "Hello " + name + "from HelloServiceEJB";
}
public HelloServiceBean() {}
WSDL can be generated and all
public void ejbCreate() {}
of the previous clients will work.
public void ejbRemove() {}
public void ejbActivate() {}
public void ejbPassivate() {}
public void setSessionContext(SessionContext sc) {}
}
95-702 OCT
Master of Information System
Management
42