分布对象 (2) distributed objects 2015-9-12 institute of computer software nanjing university 1

74
分分分分 (2) Distributed Objects 22/6/11 Institute of Computer Software Nanjing University 1

Upload: allen-simmons

Post on 27-Dec-2015

234 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

分布对象 (2)

Distributed Objects

23/4/19Institute of Computer Software

Nanjing University

1

Page 2: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

摘要 More about RMI J2EE/EJB

23/4/19Institute of Computer Software

Nanjing University

2

Page 3: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

摘要 More about RMI J2EE/EJB

23/4/19Institute of Computer Software

Nanjing University

3

Page 4: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

RMI

Java 语言之内,充分利用这一点! Stub 可下载! 可以传“对象”! Garbage Collection!

传“引用” java.rmi.Remote (RemoteException)

23/4/19Institute of Computer Software

Nanjing University

4

Page 5: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

23/4/19Institute of Computer Software

Nanjing University5

Page 6: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

Some important parts of RMI

Stubs: Each remote object class has an associated stub class,

which implements the same remote interfaces. An instance of the stub class is needed on each client. Client-side remote invocations are “actually” local invocations on the stub class.

Serialization: Arguments and results have to be “marshalled”—

converted to a representation that can be sent over the Net. In general this is a non-trivial transformation for Java objects. Serialization is also used for distributing stubs.

The Server-side “Run-time System”: This is responsible for listening for invocating requests

on suitable IP ports, and dispatching them to the proper, local resident, remote object.

23/4/19Institute of Computer Software

Nanjing University

6

Page 7: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

RMI Architecture overview

RMI Layers Stub/skeleton layer

objects used by client and server applications

Remote reference layer creation/management of

remote references distributed garbage collection

Transport protocol layer binary data protocol

23/4/19Institute of Computer Software

Nanjing University

7

By using a layered architecture each layer could be enhanced or replaced without affecting the rest of the system: → transport layer: UDP/IP layer or secure sockets (SSL).

Page 8: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

Remote Reference Layer

RemoteRef Interprets and manages references to

remote objects. The stub objects use the invoke() method in RemoteRef to forward the method call. The RemoteRef object understands the invocation semantics for remote services.

Leasing for distributed garbage collection Naming/Registry Service -- rmiregistry

23/4/19Institute of Computer Software

Nanjing University

8

Page 9: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

23/4/19Institute of Computer Software

Nanjing University

9

Remote Reference Layer

Invocation Semantics v1.1: unicast / point-to-point. v1.2: support for activation of dormant

remote service objects: Remote Object Activation RMI will instantiate a dormant object and

restore its state from disk. As now: No multicast semantics.

Page 10: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

Using RMI

1. Define interfaces for remote classes

2. Create and compile implementation of the remote classes

3. Create stub and skeleton classes using the rmic compilerNo longer necessary in Java 1.5 because Java

1.5 adds support for the dynamic generation of stub classes at runtime.

rmic must still be used to pre-generate stub classes for remote objects that need to support clients running on Java versions ≤ 1.4.

23/4/19Institute of Computer Software

Nanjing University

10

Page 11: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

Using RMI

4. Create and compile the server application (registration)

5. Create and compile a client program to access the remote objects

6. Start the RMI Registry and the server application

7. Test the client

23/4/19Institute of Computer Software

Nanjing University

11

Page 12: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

Point 1 – Remote Interface

Remote All remote interfaces must extend the

interface java.rmi.Remote (tagging interface)

All methods must throw a java.rmi.RemoteException (extension of java.io.IOException)

23/4/19Institute of Computer Software

Nanjing University

12

Page 13: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

Point 2 – Implementation

UnicastRemoteObject Application must implement the defined remote

interface Application extends class UnicastRemoteObject or

calls explicitly UnicastRemoteObject.exportObject link to RMI system base class performs RMI linking and remote object

initialization constructor may throw a RemoteException

Activatable Base class to be used for activatable objects 激活服务的目标:只有在需要时才启动服务进程

23/4/19Institute of Computer Software

Nanjing University

13

Page 14: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

Dynamic stubs in Java 1.5

Dynamic Proxies Implemented using java.lang.reflect.Proxy

(where the implementation is based on a RemoteObjectInvocationHandler)

Dynamic proxy is only used if no pre-generated stub class is available or if the system property java.rmi.server.ignoreStubClasses = true.

It is only possible if clients run on Java 5. Notice : If a remote object has pre-1.5 clients, then

that remote object should use a stub class pre-generated with rmic. There are two stub class.

protocols: v1.1 / v1.2 (default).

23/4/19Institute of Computer Software

Nanjing University

14

Page 15: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

Point 3 – Server

RMI service must be hosted in a server process whose job is: to create an instance; to register the object with the naming

service. Naming/Registry service

RMI can use different naming services: (i) Simple service: RMI Registry; (ii) JNDI (Java Naming and Directory interface).

23/4/19Institute of Computer Software

Nanjing University

15

Page 16: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

Point 4 – Start RMI Register

rmiregistry <port> default port: 1099 error if port is already used by another process (e.g.

another rmiregistry) daemon has to be started in directory which

contains used classes or the classes have to be on the CLASSPATH

Code Base: You must specify where are the class files.

Security policy file: You must give permission to use port 1099.

23/4/19Institute of Computer Software

Nanjing University

16

Page 17: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

load classes dynamically

Required classes can be loaded over the network: e.g. provided by a web server via http; other protocols are also possible (file://, ftp://, ….)

RMI class loading and security. Two conditions must be met: 1. a special class loader is provided: RMIClassLoader 2. a security manager has to support remote class

loading System.setSecurityManager(new

RMISecurityManager()) Start of RMI-Registry in this case:

rmiregistry must not contain the needed classes in its path (otherwise what is the point of dynamically load the classes?)

23/4/19Institute of Computer Software

Nanjing University

17

Page 18: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

load classes dynamically

Start of server: specify codebase for downloading class files

java -Djava.rmi.server.codebase=http://10.0.2.112:8080/calculator.jar nju.ics.yuping.dc.rmi.CalculatorServer

Start of client: permission to access server has to be provided (due to security

manager): java -Djava.security.policy=java.policy

nju.ics.yuping.dc.rmi.CalculatorClient Policy file:

grant { // connect to or accept connections on unprivileged ports // (ports greater than 1024) on host loki.cs.fh-aargau.ch

permission java.net.SocketPermission ”10.0.2.112:2001-", "connect,resolve"; };

23/4/19Institute of Computer Software

Nanjing University

18

Page 19: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

Point 5 - Codebase

23/4/19Institute of Computer Software

Nanjing University

19

-Djava.rmi.server.codebase=file:///e:\course\code\rmi\server\

-Djava.rmi.server.codebase=http://10.0.2.112:8080/calculator.jar

Page 20: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

Point 6 - Marshalling

How are parameters transferred to remote objects? Primitive Parameters

passed by value, in a machine-independent format Serializable Objects

serializable objects are copied → call by value Remote Object Parameters

only the reference to the remote object is passed, i.e. a new proxy is generated → call by reference

Non-Serializable/Remote Objects cannot be transferred checked at runtime (not by rmic!)

23/4/19Institute of Computer Software

Nanjing University

20

Page 21: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

Note on passing remote objects

Remote objects are commonly defined as parameters and return types.

Example of usage: → Callbacks → Factory classes that create remote references

Reminder: Remote objects are passed by reference.

When Remote exported objects are passed to a client, RMI substitutes the reference with that of the Remote proxy (stub).

23/4/19Institute of Computer Software

Nanjing University

21

Page 22: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

Callbacks

In many cases, applications require more complex bi-directional interactions. Servers may wish to make calls to the client (this is known as a callback). Why? → Error or problem reporting → Periodic updating and progress reports → UI notification (Observer pattern ! )

In OO programs the role of clients and servers are not always clear cut.

Client-server applications often operate in a peer-to-peer manner. At different stages an object may either act as a server or as a client.

23/4/19Institute of Computer Software

Nanjing University

22

Page 23: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

Callback: How to

How do you create a callback? → Make your client into a server!

1. Make your client implement a Remote interface:→ Define a client remote interface

2. Make it available as a server (export your client interface as a Remote object)→ extend UnicastRemoteObject→ or use

UnicastRemoteObject.exportObject(Remote)

3. Pass a client Remote reference to the server. The server can then use this reference to make calls on the client.

23/4/19Institute of Computer Software

Nanjing University

23

Page 24: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

Callback Example

23/4/19Institute of Computer Software

Nanjing University

24

Page 25: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

摘要 More about RMI J2EE/EJB

23/4/19Institute of Computer Software

Nanjing University

25

Page 26: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

J2EE

JDBC JNDI EJB RMI Java IDL/CORBA JSP Java Servlet

23/4/19Institute of Computer Software

Nanjing University

26

XML JMS JTA JavaMail JAF

Page 27: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

Application Servers

"The Multi- tier applications" have several independent components

An application server provides the infrastructure and services to run such applications

Application server products can be separated into 3 categories: J2EE-based solutions Non-J2EE solutions (PHP, ColdFusion, Perl, etc.) And the Microsoft solution (ASP/COM and now .NET

with ASP.NET, VB.NET, C#, etc.)

23/4/19Institute of Computer Software

Nanjing University

27

Page 28: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

J2EE Application Servers

Major J2EE products: BEA WebLogic IBM WebSphere Borland AppServer Sun/Oracle GlassFish JBoss

23/4/19Institute of Computer Software

Nanjing University

28

Page 29: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

Web Server and Application Server

23/4/19Institute of Computer Software

Nanjing University

29

Web Server

(HTTP Server)

App Server 1

App Server 2

Internet Browser

HTTP(S)

Page 30: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

J2EE Multi-tier Model

23/4/19Institute of Computer Software

Nanjing University

30

Page 31: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

J2EE Application Scenarios

Multi-tier typical application

23/4/19Institute of Computer Software

Nanjing University

31

Page 32: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

J2EE Application Scenarios

Stand-alone client

23/4/19Institute of Computer Software

Nanjing University

32

Page 33: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

J2EE Application Scenarios

Web-centric application

23/4/19Institute of Computer Software

Nanjing University

33

Page 34: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

J2EE Application Scenarios

Business-to-business

23/4/19Institute of Computer Software

Nanjing University

34

Page 35: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

J2EE Architecture

23/4/19Institute of Computer Software

Nanjing University

35

Page 36: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

Now

JEE 5 JEE 6

Homepage: http://www.oracle.com/technetwork/java/javaee/tech/index-jsp-142185.html

23/4/19Institute of Computer Software

Nanjing University

36

Page 37: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

Main technologies

JavaServer Pages (JSP) Servlet Enterprise JavaBeans (EJB)

JSPs, servlets and EJBs are application components

23/4/19Institute of Computer Software

Nanjing University

37

Page 38: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

JSP

Used for web pages with dynamic content

Processes HTTP requests (non-blocking call-and-return)

Accepts HTML tags, special JSP tags, and scriptlets of Java code

Separates static content from presentation logic

Can be created by web designer using HTML tools

23/4/19Institute of Computer Software

Nanjing University

38

Page 39: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

Servlet

Used for web pages with dynamic content

Processes HTTP requests (non-blocking call-and-return)

Written in Java; uses print statements to render HTML

Loaded into memory once and then called many times

Provides APIs for session management

23/4/19Institute of Computer Software

Nanjing University

39

Page 40: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

EJB

EJBs are distributed components used to implement business logic (no UI)

Developer concentrates on business logic

Availability, scalability, security, interoperability and integrability handled by the J2EE server

Client of EJBs can be JSPs, servlets, other EJBs and external aplications

Clients see interfaces

23/4/19Institute of Computer Software

Nanjing University

40

Page 41: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

EJB

EJB 1.1 EJB 2.0 EJB 2.1 EJB 3.0 EJB 3.1

23/4/19Institute of Computer Software

Nanjing University

41

更简单

Page 42: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

EJB 技术要解决的问题 EJB™ 技术的初衷是简化企业级应用的开发 通过 EJB 容器环境

提供可共享的服务: Concurrency , Distribution, Transactions, EIS integration, Resource pooling, Security, Persistence

提供 EJB 运行环境 减轻企业级应用开发人员的负担

23/4/19Institute of Computer Software

Nanjing University

42

Page 43: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

EJB 的相关概念 EJB 容器:由厂商提供的位于 EJB 服务器上的

实体,管理 EJB 的系统级服务,控制 EJB 的生命周期。针对每一种组件,都有相应的容器进行处理。

EJB 服务器:作为容器和低层平台的桥梁管理着 EJB 容器和函数,向 EJB 容器提供了访问系统服务的能力。

EJB 接口 (2.x) : Home 接口, Remote 接口,Local 和 LocalHome 接口

23/4/19Institute of Computer Software

Nanjing University

43

Page 44: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

EJB 分类 Session Bean

Stateless Stateful

Entity Bean Message Driven Bean

23/4/19Institute of Computer Software

Nanjing University

44

同步通信

异步通信

Page 45: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

Session Bean

Stateless session bean: Contains no user-specific data Business process that provides a generic

service Container can pool stateless beans Example: shopping catalog

23/4/19Institute of Computer Software

Nanjing University

45

Page 46: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

Session Bean

Stateful session bean: Retains conversational state (data) on

behalf of an individual client If state changed during this invocation, the

same state will be available upon the following invocation

Example: shopping cart

23/4/19Institute of Computer Software

Nanjing University

46

Page 47: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

Entity Bean

Represents business data stored in a database persistent object

Underlying data is normally one row of a table

A primary key uniquely identifies each bean instance

Allows shared access from multiple clients Can live past the duration of client' s session Example: shopping order

23/4/19Institute of Computer Software

Nanjing University

47

Page 48: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

Message-Driven Bean

Message consumer for a JMS queue or topic

Benefits from EJB container services that are not available to standard JMS consumers

Has no home or remote interface Example: Order processing – stock info

23/4/19Institute of Computer Software

Nanjing University

48

Page 49: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

EJB 2.x 的问题 APIs 设计的角度不对,多是为了容器正常工作设计,

较少考虑易用性 EJBHome interface EJBObject interface EnterpriseBean interfaces JNDI interfaces Deployment descriptor …

解决了老问题,引入了新问题 程序复杂,臃肿,普及度不高。 Boiler Code 部署脚本

23/4/19Institute of Computer Software

Nanjing University

49

Page 50: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

简单的 EJB 2.x 例子// EJB 2.1 Stateless Session Bean: Bean Class

public class PayrollBean implements javax.ejb.SessionBean {SessionContext ctx;DataSource payrollDB;public void setSessionContext(SessionContext ctx) {

this.ctx = ctx;}public void ejbActivate() {}public void ejbPassivate() {}public void ejbRemove() {}

23/4/19Institute of Computer Software

Nanjing University

50

Page 51: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

简单的 EJB 2.x 例子// EJB 2.1 Stateless Session Bean: Bean Class (continued)

public void ejbCreate() { ...

Context initialCtx = new InitialContext();

payrollDB = (DataSource)initialCtx.lookup(“java:com/env/jdbc/empDB”);

...}public void setTaxDeductions(int empId,int deductions){

...Connection conn = payrollDB.getConnection();Statement stmt = conn.createStatement();...

}}

23/4/19Institute of Computer Software

Nanjing University

51

Page 52: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

简单的 EJB 2.x 例子// EJB 2.1 Stateless Session Bean: Interfacespublic interface PayrollHome

extends javax.ejb.EJBLocalHome {public Payroll create() throws CreateException;

}public interface Payroll

extends javax.ejb.EJBLocalObject {public void setTaxDeductions(int empID, int

deductions);}

23/4/19Institute of Computer Software

Nanjing University

52

Page 53: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

简单的 EJB 2.x 例子// EJB 2.1 Stateless Session Bean: Deployment Descriptor<session>

<ejb-name>PayrollBean</ejb-name><local-home>com.example.PayrollHome</local-home><local>com.example.Payroll</local><ejb-class>com.example.PayrollBean</ejb-class><session-type>Stateless</session-type><transaction-type>Container</transaction-type><resource-ref>

<res-ref-name>jdbc/empDB</res-ref-name><res-type>javax.sql.DataSource</res-type><res-auth>Container</res-auth>

</resource-ref></session>

23/4/19Institute of Computer Software

Nanjing University

53

Page 54: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

简单的 EJB 2.x 例子// Deployment Descriptor(continued)<assembly-descriptor>

<method-permission><unchecked/><method>

<ejb-name>PayrollBean</ejb-name><method-name>*</method-name>

</method></method-permission><container-transaction>

<method><ejb-name>PayrollBean</ejb-name><method-name>*</method-name>

</method><trans-attribute>Required</trans-attribute>

</container-transaction></assembly-descriptor>

23/4/19Institute of Computer Software

Nanjing University

54

Page 55: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

为什么开发 EJB 3.0 ?

简化 EJB!

23/4/19Institute of Computer Software

Nanjing University

55

Page 56: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

EJB 类 POJO (Plain Old Java Object)

会话 Bean 和消息驱动 Bean 本身是普通的 Java类

通过注解来指定 EJB 的类型 注解

用在类的级别上 @Stateless, @Stateful, @MessageDriven

EJB 3.0 取消实体 Bean JPA(Java Persistence API) 取而代之 通过 @Entity 注解

23/4/19Institute of Computer Software

Nanjing University

56

Page 57: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

EJB 2.x 中的 EJB 类// EJB 2.1 Stateless Session Bean: Bean Classpublic class PayrollBean implements javax.ejb.SessionBean

{SessionContext ctx;public void setSessionContext(SessionContext ctx) {

this.ctx = ctx;}public void ejbCreate() {...}public void ejbActivate() {}public void ejbPassivate() {}public void ejbRemove() {}public void setTaxDeductions(int empId, int deductions) {

...}

}

23/4/19Institute of Computer Software

Nanjing University

57

Page 58: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

EJB 3.0 中的 EJB 类// EJB 3.0 Stateless Session Bean: Bean Class@Statelesspublic class PayrollBean implements Payroll {

public void setTaxDeductions(int empId,int deductions){

...}

}

23/4/19Institute of Computer Software

Nanjing University

58

Page 59: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

EJB 接口 接口就是最普通的接口

不再需要 extend: EJBObject, EJBHome 接口可以是 local 或 remote

注解: @Local, @Remote Remote 方法不需抛出 RemoteException

23/4/19Institute of Computer Software

Nanjing University

59

Page 60: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

EJB 2.x 中的 EJB 接口// EJB 2.1 Stateless Session Bean: Interfacespublic interface PayrollHome extends

javax.ejb.EJBLocalHome {public Payroll create() throws CreateException;

}public interface Payroll extends

javax.ejb.EJBLocalObject {public void setTaxDeductions(int empId, int

deductions);}

23/4/19Institute of Computer Software

Nanjing University

60

Page 61: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

EJB 3.0 中的 EJB 接口// Local Interface@Localpublic interface Payroll {

public void setTaxDeductions(int empId, intdeductions);

}// Remote Interface@Remotepublic interface Payroll {

public void setTaxDeductions(int empId, intdeductions);

}

23/4/19Institute of Computer Software

Nanjing University

61

Page 62: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

消息驱动 Bean

注解 @MessageDriven

消息驱动 Bean 需要实现javax.jmx.MessageListener onMessage(Message msg) 方法

23/4/19Institute of Computer Software

Nanjing University

62

Page 63: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

消息驱动 Bean 的例子

// EJB 3.0 Message-driven bean: Bean Class

@MessageDriven public class PayrollMDB implements

javax.jms.MessageListener {public void onMessage(Message msg) {

...}

}

23/4/19Institute of Computer Software

Nanjing University

63

Page 64: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

调用资源 不再需要繁琐的 JNDI Lookup 。 资源注射

注解 Instance variable 注解 setter 方法

动态 Lookup 注解 class

23/4/19Institute of Computer Software

Nanjing University

64

Page 65: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

注解 @Resource

For connection factories, simple environment entries, topics/queues, EJBContext, UserTransaction, etc.

@PersistenceContext 容器管理的 EntityManager

@PersistenceUnit EntityManagerFactory :获取非容器管理的

EntityManager

23/4/19Institute of Computer Software

Nanjing University

65

Page 66: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

Dependency Injection

Bean instance is supplied with references to resources in environment

Occurs when instance of bean class is created

No assumptions as to order of injection Optional @PostConstruct method is

called when injection is complete

23/4/19Institute of Computer Software

Nanjing University

66

Page 67: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

资源注射的例子// EJB 3.0 Stateless Session Bean: Bean Class// Data access using injection and Java Persistence

API@Statelesspublic class PayrollBean implements Payroll {

@PersistenceContext EntityManager payrollMgr;public void setTaxDeductions(int empId,int deductions){

payrollMgr.find(Employee.class,empId).setTaxDeductions(deductions);

}}

23/4/19Institute of Computer Software

Nanjing University

67

Page 68: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

动态 Lookup 的例子// EJB 3.0 Stateless Session Bean// Using dynamic lookup@PersistenceContext(name=”payrollMgr”)@Stateless public class PayrollBean implements Payroll {

@Resource SessionContext ctx;public void setTaxDeductions(int empId,int deductions){

EntityManager payrollMgr = ctx.lookup(“payrollMgr”);

payrollMgr.find(Employee.class,empId).setDeductions(deductions);

}}

23/4/19Institute of Computer Software

Nanjing University

68

Page 69: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

Bean Lifecycle Event

EJB 2.1 需要实现 EnterpriseBean 接口,并重写 Lifecycle 相关的方法

EJB 3.0 通过注解指定需要的方法 注解 :

@PostConstruct @PreDestroy @PostActivate @PrePassivate

多个注解可用于同一个方法。

23/4/19Institute of Computer Software

Nanjing University

69

Page 70: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

简化了 EJB 调用 使用资源注射的方式 不再需要 Home interface 不再抛出 RemoteException

23/4/19Institute of Computer Software

Nanjing University

70

Page 71: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

EJB 2.x 的调用// EJB 2.1: Client View

...

Context initialContext = new InitialContext();

PayrollHome payrollHome = (PayrollHome)

initialContext.lookup(“java:comp/env/ejb/payroll”);

Payroll payroll = payrollHome.create();

...

// Use the bean

payroll.setTaxDeductions(1234, 3);

23/4/19Institute of Computer Software

Nanjing University

71

Page 72: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

EJB 3.0 的调用

// EJB 3.0: Client View@EJB Payroll payroll;

// Use the beanpayroll.setTaxDeductions(1234, 3);

23/4/19Institute of Computer Software

Nanjing University

72

Page 73: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

EJB 3.0 Summary

Major simplification of EJB technology for developers Beans are plain Java classes with plain Java interfaces APIs refocused on ease of use for developer Easy access to container services and environment Deployment descriptors available, but generally

unneeded EJB 3.0 components interoperate with existing

components/applications Gives developer powerful and easy-to-use

functionality

23/4/19Institute of Computer Software

Nanjing University

73

Page 74: 分布对象 (2) Distributed Objects 2015-9-12 Institute of Computer Software Nanjing University 1

作业 ( 本次作业不用提交 )

Java 1.5 对 RMI 做了哪些改进? EJB 3.0 相比 EJB 2.1 有哪些改进?

23/4/19Institute of Computer Software

Nanjing University

74