服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

ejb轻松进阶之一

ejb轻松进阶

一、引言

  ejb(enterprise javabeans)是java程序设计中比较高级的内容,也是java程序员由入门级向高手级前进的门槛。sun公司认证java程序员(scjp)与sun公司认证java开发员(scjd)之间的一个显著区别就是:scjp不考ejb,而scjd要考。随着越来越多的企业采用j2ee平台开发电子商务应用系统,ejb开发已成为今天的java程序员必须要面对的问题。

  本文首先以一个例程介绍了一般分布式对象应用程序的基本原理,然后从基本的下载、安装、配置开始,逐步介绍ejb程序编程的方法,从而使ejb的学习成为一件轻松而有趣的事情。

二、典型的分布式对象程序

  不管是corba还是rmi,其实现分布式对象的策略都是相似的,我们可以用一个简单的程序例子来模拟一个分布式对象程序的构成。

ejb轻松进阶之一



  这个例子模拟了一个远程请求对象属性的过程。有一个远程对象dog在网络上,现在要得到它的名字(strname)属性。程序在客户端设一个存根(dog_stub)类,在服务器端启动一个骨架(dog_skeleton)类,这两个类都实现了dog接口,dog_stub与dog_skeleton通过socket进行远程通信。当客户程序dogclient向dog_stub发出获取名字属性的请求时,dog_stub对象把方法名“getname()”作为一个字符串通过socket发给远程的dog_skeleton对象,dog_skeleton对象收到这个字符串后再根据字符串的内容执行dogserver对象的getname()方法,得到dog的名字,然后又通过socket返回给dogstub对象。整个流程通过网络实现,但对于客户程序dogclient来讲,它并不知道真正的dog对象在哪里,甚至也不知道这个过程通过了网络,它只知道发出的获取名字属性的请求得到了满意的结果而已。

  事实上,corba或java rmi的实现方式与此类似,只不过远没有这么简单而已。这个程序对于说明分布式对象应用程序的执行机理是很有用的。

程序源代码如下所示:


文件dog.java

public interface dog

{

public string getname() throws exception;

}/* dog */

文件dogclient.java

public class dogclient

{

public static void main( string[] args ) throws exception

{

dog dog = new dog_stub();

string strname = dog.getname();

system.out.println( "姓名:" + strname );

}//main()

}/* dogclient */

文件dogserver.java

public class dogserver implements dog

{

string strname;

int intage;

public string getname() throws exception

{

return strname;

}//getname()

public dogserver( string strnameinput )

{

strname = strnameinput;

}//dogserver()

public static void main( string[] args ) throws exception

{

new dog_skeleton( new dogserver( "tomcat" ) );

}//main()

}/* dogserver */

文件dog_skeleton.java

import java.io.*;

import java.net.*;

public class dog_skeleton extends thread

{

static serversocket ss = null;

dogserver ds;

public dog_skeleton( dogserver dsinput ) throws exception

{

ds = dsinput;

if ( ss == null )

ss = new serversocket( 8000 );

this.start();

}//dog_skeleton()

public synchronized void run()

{

try

{

while ( ss != null )

{

socket socket = ss.accept();

objectinputstream ois = new objectinputstream( socket.getinputstream() );

objectoutputstream oos = new objectoutputstream( socket.getoutputstream() );

string strmethodname = ( string )ois.readobject();

if ( strmethodname.equals( "getname()" ) )

oos.writeobject( ds.getname() );

oos.flush();

ois.close();

oos.close();

socket.close();

}//while

}//try

catch( exception e )

{

e.printstacktrace();

}//catch

}//run()

}/* dog_skeleton */

文件dog_stub.java

import java.io.*;

import java.net.*;

public class dog_stub implements dog

{

socket socket;

objectoutputstream oos;

objectinputstream ois;

public dog_stub() throws exception

{

socket = new socket( "wudi", 8000 );

oos = new objectoutputstream( socket.getoutputstream() );

ois = new objectinputstream( socket.getinputstream() );

}//dog_stub()

public string getname() throws exception

{

oos.writeobject( "getname()" );

oos.flush();

return ( string )ois.readobject();

}//getname()

}/* dog_stub */


运行该分布式对象程序时,首先运行dogserver,然后在客户端运行dogclient即可看到结果。

扫描关注微信公众号