EJB轻松进阶之一

EJB轻松进阶之一

来源:硅谷动力作者:中流砥柱

一.导言

EJB(Enterprise JavaBeans)是Java编程中比较高级的内容,也是Java程序员从入门级晋升到大师级的门槛。SUN认证Java程序员(SCJP)和SUN认证Java开发人员(SCJD)之间的一个重要区别是,SCJP不测试EJB,但SCJD测试。随着越来越多的企业采用J2EE平台开发电子商务应用系统,EJB开发已经成为当今Java程序员必须面对的问题。

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

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

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

此示例模拟远程请求对象属性的过程。网络上有一个远程对象Dog,现在我们要获取它的name (strName)属性。程序在客户端设置一个stub (Dog_Stub)类,在服务器端启动一个skeleton (Dog_Skeleton)类。两个类都实现了dog接口,Dog_Stub和Dog_Skeleton通过Socket进行远程通信。当客户端DogClient向Dog_Stub发送获取name属性的请求时,Dog_Stub对象通过Socket将方法名“getName()”作为字符串发送给远程Dog_Skeleton对象。Dog_Skeleton对象接收到这个字符串后,根据字符串的内容执行DogServer对象的getName()方法得到狗的名字,然后通过Socket返回给DogStub对象。整个过程都是通过网络实现的,但是对于客户端程序DogClient来说,它并不知道真正的狗对象在哪里,甚至不知道这个过程已经通过了网络。它只知道获取name属性的请求已经被满足。

事实上,CORBA或Java RMI也是以类似的方式实现的,但远没有那么简单。这个程序对于解释分布式对象应用程序的执行机制非常有用。

程序源代码如下:

记录Dog.java

公共接口狗

{

公共字符串getName()引发异常;

}/*狗*/

记录DogClient.java

公共类狗客户端

{

公共静态void main( String[] args)引发异常

{

狗狗=new Dog _ Stub();

string strName=dog . getname();

system . out . println( name: strName );

}//main()

}/*狗客户端*/

记录DogServer.java

公共类DogServer实现Dog

{

字符串strName

intAge

公共字符串getName()引发异常

{

返回strName

}//getName()

公共狗服务器(字符串输入)

{

strName=strNameInput

}//DogServer()

公共静态void main( String[] args)引发异常

{

new Dog _ Skeleton(new Dog server( TOMCAT ));

}//main()

}/* DogServer */

文件Dog_Skeleton.java

导入Java . io . *;

导入Java . net . *;

公共类Dog_Skeleton扩展线程

{

静态服务器套接字ss=null

DogServer ds

公共Dog_Skeleton( DogServer dsInput)抛出异常

{

ds=dsInput

if ( ss==null)

ss=新服务器套接字(8000);

this . start();

}//狗_骷髅()

公共同步void运行()

{

尝试

{

而(ss!=空)

{

socket socket=ss . accept();

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

object output stream OOS=new object output stream(socket . get output stream());

String strMethodName=(String)ois . read object();

if(strmethodname . equals( getName()))

OOS . writeobject(ds . getname());

OOS . flush();

ois . close();

OOS . close();

socket . close();

}//当

}//尝试

捕捉(例外e)

{

e . printstacktrace();

}//捕捉

}//run()

}/*狗_骷髅*/

文件Dog_Stub.java

导入Java . io . *;

导入Java . net . *;

公共类Dog_Stub实现Dog

{

插座插座;

ObjectOutputStream oos

对象输入流操作系统:

public Dog_Stub()抛出异常

{

套接字=新套接字(‘武帝’,8000);

OOS=新对象输出流(套接字。getutputstream());

ois=新对象输入流(套接字。getinpertstream());

}//Dog _存根()

公共字符串getname()引发异常

{

OOS。writeobject( getname());

Oos.flush():

返回(字符串)ois。read object();

}//getName()

}/*狗狗_Stub */

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

EJB轻松进阶之一