EJB进阶之一_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3534 | 回复: 0   主题: EJB进阶之一        下一篇 
lynda
注册用户
等级:上尉
经验:570
发帖:49
精华:0
注册:2012-8-7
状态:离线
发送短消息息给lynda 加好友    发送短消息息给lynda 发消息
发表于: IP:您无权察看 2012-8-8 16:52:57 | [全部帖] [楼主帖] 楼主

一、引言

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

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

不管是CORBA还是RMI,其实现分布式对象的策略都是相似的,我们可以用一个简单的程序例子来模拟一个分布式对象程序的构成。
这个例子模拟了一个远程请求对象属性的过程。有一个远程对象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即可看到结果。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论