Java RMI 分布式开发

3. JavaRM

I

门实战

 

4. 

使用

RM

I

CORBA

行分布式

java

程序

设计

 

5. Think in 

java

网络编

RM

I

部分

 

Java RM

I

 

关键

rm

 

我下面

出代

的例子是

转来

的,

我在

里主要要

一下在

这个

例子可能

遇到的

问题

和解

决办

法,希望能

的朋友

时间

,以便快速入

RM

 

 

RM

I

程序的

6

 

 

1

、定

个远

程接口的接口,

接口中的每一

方法必

须声

它将产

生一

Re

m

oteException

常。

 

 

2

、定

个实现该

接口的

 

 

3

、使用

RM

IC

程序生成

实现

所需的

根和框架。

 

 

4

建一

器,用于

2

好的

 

 

5. 

建一

程序

RM

I

用。

 

 

6

启动

rm

iRegistry

并运

行自己的

程服

器和客

程序

 

 

 

1

 

 

个远

程接口的接口,

接口中的每一

方法必

须声

它将产

生一

Re

m

o

teException

 

 

Java

 

 

1.

 

pac

kage 

rm

i; 

 

 

 

2.

 

 

 

 

3.

 

i

m

port 

java.

rm

i.

Re

m

o

teException; 

 

 

 

4.

 

 

 

 

5.

 

/** 

 

 

6.

 

 

第一步,定

个远

程接口,

接口中的每一

方法必

须声

它将产

生一

Re

m

oteException

 

 

 

7.

 

 

*/ 

 

 

8.

 

 

 

 

9.

 

//

接口里定

返回字符串的

程方法

 

SayHello

(),

这个远

程接口

 

I_Hello

public

 

 

 

 

10.

 

//

须从

java.

rm

i.

Re

m

o

te

承而

,接口中的每一

方法都必

抛出

java.

rm

i.

Re

m

o

teException

 

 

 

 

11.

 

// 

 

 

 

12.

 

//

抛出

这个异

常的原因

:

由于任何

程方法

实际

上要

多低

级网络

操作,

因此

络错误

可能在

程中

随时发

 

 

 

 

13.

 

//

因此,所有的

RM

I

操作都

放到

try

-

c

atc

h

 

 

 

 

14.

 

 

 

 

15.

 

 

 

 

16.

 

//

需要

Re

m

o

te

 

 

 

 

17.

 

public 

interface 

I_Hello 

extends 

java.

rm

i.

Re

m

o

te{ 

 

 

 

 

18.

 

 

 

 

19.

 

 

 

 

 

//

需要抛出

r

e

m

o

te

 

 

 

 

20.

 

 

 

 

 

public 

String 

SayHello() 

throws 

Re

m

o

teException; 

 

 

 

 

21.

 

 

 

 

 

 

2

 

 

个实现该

接口的

 

 

Java

 

 

1.

 

pac

kage 

rm

i; 

 

 

 

2.

 

 

 

 

3.

 

i

m

port 

java.

rm

i.*; 

 

 

 

4.

 

i

m

port 

java.

rm

i.server.

UnicastRe

m

o

teObjec

t

 

 

 

5.

 

 

 

 

6.

 

/** 

 

 

7.

 

 

第二步,定

个实现远

程接口的

 

 

 

8.

 

 

*/ 

 

 

9.

 

 

 

 

10.

 

//

实现

接口的

须继

UnicastRe

m

o

teObjec

t

java.

rm

i.server.

UnicastRe

m

o

teObjec

t

 

 

 

 

11.

 

 

 

 

12.

 

public 

class 

Hello 

extends 

UnicastRe

m

o

teObjec

//

须从

UnicastRe

m

o

teObjec

t

 

 

 

 

 

13.

 

 

 

 

 

 

 

 

 

i

m

ple

m

ents 

I_Hello 

 

 

 

14.

 

 

 

 

 

public 

Hello() 

thr

ows 

Re

m

o

teException{ 

//

需要一

抛出

Re

m

o

te

常的默

初始化方法

 

 

 

 

15.

 

 

 

 

 

 

 

 

16.

 

 

 

 

17.

 

 

 

 

 

public 

String 

SayHello(){ 

//

这个

实现

I_Hello

接口的方法

 

 

 

 

18.

 

 

 

 

 

 

 

 

 

r

e

turn 

"Hello 

w

orld 

!!"; 

 

 

 

19.

 

 

 

 

 

 

 

 

20.

 

 

 

 

 

 

3

 

 

使用

RM

IC

程序生成

实现

所需的

Stub 

 

框架

 

 

一步是

关键

,也是最容易出

问题

的地方,需要多

几句:

 

 

RM

I

中,客

机上生成的

调动调

参数

和反

调动

返回

的代

码称为残

根。有的

称这

部分

码为

“主干”。

 

 

器上生成的反

调动调

参数

实际

方法

调动

返回

的代

码称为

框架

 

 

 

2

中的

Hello

编译

好以后,我

就可以用

RM

IC

命令

生成

Stub 

 

操作是:在

c

m

d

下到

Hello.class 

所在目

行以下命令:

rm

ic 

Hello 

 

命令

行完以后,

将会

前目

生成一

 

Hello_Stub.class 

这个

就是我

们远

要的

 

 

如果

是照着上面的方法做的,

应该会

遇到

的第一

个错

Class xxx not 

found 

 

方法分

 

 

首先,

开环

量,

将项

目路

D:\workspace_bohai_

FXM\z

test

目名)

\rm

i

(包

名)添加到

classpath

,在

c

m

d

se

t

一下,看看是否

置好了

 

 

然后,

c

m

d

入要注意,如果

rm

ic

.class

文件在包下,就必

cd

到目

.class

文件所在包的目

下,此例是:

D:\workspace_bohai_

FXM\z

tes

t>rm

ic 

rm

i.

Hello

rm

i

生成

两个

文件

Hello_Stub.class

Hello_Skel.class

Hello_Stub.class 

这个

就是我

们远

需要的

 

 

 

 

4

 

 

建一

,用于

2

好的

 

 

Java

 

 

1.

 

pac

kage 

rm

i; 

 

 

 

2.

 

 

 

 

3.

 

i

m

port 

java.

rm

i.*; 

 

 

 

4.

 

 

 

 

5.

 

/** 

 

 

6.

 

 

4

步,

建一

器,用于

Hello 

 

 

7.

 

 

*/ 

 

 

8.

 

 

 

 

9.

 

public 

class 

RM

I_Server 

 

 

 

10.

 

 

 

 

 

public 

static 

void 

m

ain(String[] 

args) 

 

 

 

11.

 

 

 

 

 

 

 

 

 

try 

 

 

 

12.

 

 

 

 

 

 

 

 

 

 

 

 

 

//

例化要

布的

 

 

 

 

13.

 

 

 

 

 

 

 

 

 

 

 

 

 

Hello 

hello 

new

 

Hello(); 

 

 

 

14.

 

 

 

 

 

 

 

 

 

 

 

 

 

//

RM

I

 

布,即客

端通

过这个

名字

找的

象就是

hello

这个实

 

 

 

 

15.

 

 

 

 

 

 

 

 

 

 

 

 

 

Na

m

ing.

rebind("

RM

I_

Hello", 

hello); 

 

 

 

 

16.

 

 

 

 

 

 

 

 

 

 

 

 

 

Syste

m

.out.

println("=== 

Hello 

ser

ver 

Ready 

=== 

"); 

 

 

 

17.

 

 

 

 

 

 

 

 

 

cat

ch 

(Exception 

exception) 

 

 

 

18.

 

 

 

 

 

 

 

 

 

 

 

 

 

exception.

printS

tac

kTrace(); 

 

 

 

19.

 

 

 

 

 

 

 

 

 

 

 

 

20.

 

 

 

 

 

 

 

 

21.

 

 

 

 

 

 

 

5

 

 

建一

程序

RM

I

 

 

Java

 

 

1.

 

pac

kage 

rm

i; 

 

 

 

2.

 

 

 

 

3.

 

/** 

 

 

4.

 

 

5

步,

建一

程序

RM

I

 

 

 

5.

 

 

*/ 

 

 

6.

 

 

 

 

7.

 

i

m

port 

java.

rm

i.*; 

 

 

 

8.

 

 

 

 

9.

 

public 

class 

RM

I_Client 

 

 

 

10.

 

 

 

 

 

public 

static 

void 

m

ain(String[] 

args) 

 

 

 

11.

 

 

 

 

 

 

 

 

 

try 

 

 

 

12.

 

 

 

 

 

 

 

 

 

 

 

 

 

I_Hello 

hello 

(I_

Hello) 

Na

m

ing.

lookup("

RM

I_Hello"); 

//

RM

I

称查

 

 

 

 

13.

 

 

 

 

 

 

 

 

 

 

 

 

 

//

如果是

地的

RM

I

请参

 

 

 

 

rm

i://127.0.0.1:1099/RM

I_Hello 

 

 

 

 

 

 

 

 

 

 

 

 

14.

 

 

 

 

 

 

 

 

 

 

 

 

 

//

端口

1099

是默

RM

I

端口,如果

你启动

 

rm

i

registry 

,

有指定特殊的端口

,默

就是

1099 

 

 

 

15.

 

 

 

 

16.

 

 

 

 

 

 

 

 

 

 

 

 

 

Syste

m

.out.

println(hello.SayHello()); 

//

核心句:

的方法

 

 

 

 

17.

 

 

 

 

 

 

 

 

 

cat

ch 

(Exception 

e) 

 

 

 

18.

 

 

 

 

 

 

 

 

 

 

 

 

 

e.pr

intS

tac

kTrace(); 

 

 

 

19.

 

 

 

 

 

 

 

 

 

 

 

 

20.

 

 

 

 

 

 

 

 

21.

 

 

 

 

22.

 

 

 

 

 

 

 

6

 

 

启动

rm

iRegistry

并运

行自己的

程服

器和客

程序

 

 

c

m

d

行命令

rm

iregistry

,然后放在一

不用管他(第一

c

m

d

窗口)

 

 

然后通

c

m

d

Server

,直接在

IDE

行一般

会报错

找不到

Stub

,需要用下面的

命令

来运

行,命令里指定了

stub

的路

 

 

c

m

d

D:

\workspace_bohai_

FXM\z

tes

t>

java.exe 

-

Djava.

rmi.server.codebase=file:/D:\workspace_bohai_

FXM\z

tes

t

rmi.

RM

I_Server 

 

(注意:

z

t

ext

目名,

rm

i

是包,最后的那

z

t

est

/

后有一

空格)

 

 

c

m

d

会显

示:

=== 

Hello ser

ver 

Ready 

=== 

 

(代表

Server

成功

启动

,第二

c

m

d

窗口)

 

 

然后在

Client

看到

千辛万苦

程方法

用的

果:

Hello 

w

orld !! 

 

呵呵,如果在上面

程中

遇到了其他

问题

在是不好意思了,我只是把我

尝试

RM

I

遇到

问题

的解

决办

了,祝好

 

 

 

 

 

 

1234567890ABCDEFGHIJKLMNabcdefghijklmn!@#$%^&&*()_+.一三五七九贰肆陆扒拾,。青玉案元夕东风夜放花千树更吹落星如雨宝马雕车香满路凤箫声动玉壶光转一夜鱼龙舞蛾儿雪柳黄金缕笑语盈盈暗香去众里寻他千百度暮然回首那人却在灯火阑珊处

你可能喜欢


你可能感兴趣的:(Java RMI 分布式开发)