RSS
热门关键字:
当前位置 : 主页>编程开发>java编程>J2EE>列表

J2EE的客户端

来源:我要研发网 作者:(IBM DW http://www-900.ibm.com 时间:2008-03-02 点击:



王晓强(forff@sina.com)

2001 年 12 月

字串9


这篇文章试图从J2EE客户端的角度出发来介绍J2EE体系。将介绍J2EE的客户端如何对EJB进行访问。J2EE的客户端分类。最后重点分析J2EE中两种相似的客户端Stand
alone Client与J2EE Application Client。并会给出针对同一个Stateless Session Bean的这两种不同客户端的实现实例来具体说明它们的异同。

本文的所有实例都基于SUN的J2EE SDK进行发布。附录中也会对SUN的这个非常方便我们学习J2EE的开发工具集进行介绍。 字串9


J2EE客户端简介

J2EE的客户端,简单的说就是所有针对EJB而言都处于客户调用逻辑的组件与程序。因为J2EE结构的复杂性,J2EE客户端也比较多,一般分为以下五种。Stand
Alone Client,J2EE Application Client,JSP,Servlets,其它EntERPrise JavaBeans(处于客户逻辑的EJB)。 字串5


这其中,大家对JSP与Servlets可能是比较熟悉的,因为现在基于J2EE的应用开发大部分是Broswer/Server模式,所以它们也是最常用的J2EE的客户端。而EJB本身起到客户端作用,我们也会经常碰到,比如在Session
Bean中调用Entity Bean中的商业方法,那么Session Bean 就是这个Entity Bean的客户端。

字串6


谈到J2EE就不能不提到EJB。EJB是J2EE结构的核心,我们在它里面实现商业逻辑,而由实现J2EE结构的服务平台提供商为我们提供J2EE
Server、EJB Container、Web Container,从而为我们提供诸如安全控制、事务处理、客户连接、以及数据库访问这些服务。这样通过对整个体系划分出不同的角色(如应用开发者,J2EE服务器提供商等等),让我们这些开发者可以专心于商业逻辑的实现,并能最大限度的实现代码的可复用性。

字串8


在EJB1.1规范中有两种EJB,一种是Session Bean另一种是Entity Bean。这两种EJB也是我们最常用到的。不论是Session
Bean 还是Entity Bean它们在实现上都是由三部分组成。首先是Remote Home Interface,在这个远程接口中定义的是可由客户端调用的创建、查找(对Entity
Bean而言)EJB的方法。然后是Remote Interface,这个远程接口中定义的是可供客户端访问的商业方法。最后是Bean Class,这个类对客户端而言是不可访问的,在这个类中我们要具体实现相应的商业方法,以及一些供EJB
Container调用的方法。对Session Bean 与Entity Bean,以及对Entity Bean 中的bmp模式以及cmp模式而言,这个类会有很大的不同。但这不是这篇文章要重点介绍的,你只要记住对J2EE的客户端,能看到的只是Remote
Interface与Remote Home Interface这两个接口而已。下面让我们看看客户端是如何具体完成对EJB的访问的。 字串4


客户端如何访问EJB

不论是那种J2EE的客户端,它要调用一个EJB的相应商业方法都要经过以下这三步:


1、 通过JNDI定位EJB的Remote Home Interface

创建JNDI名称环境,通过在发布时你给EJB定义的JNDI名称找到该EJB的Remote Home Interface。 字串1


2、 创建EJB的实例,得到Remote Interface

调用上一步得到的Remote Home Interface中的create()方法,EJB Container会创建相应EJB的实例。而你得到的就是一个定义了EJB要实现的商业方法的Remote
Interface。(EJB Container创建EJB实例的基本过程如下:客户端调用create()方法-'EJB Container实例化相应的EJB
Bean Class'EJB Container调用Bean Class中的ejbCreate方法'最后返回给我们的是EJB的Remote
Interface)

字串5


3、 调用Remote Interface中的商业方法

客户端调用上一步创建的Remote Interface中的商业方法,EJB Container就会调用相应Bean Class实例中的相应方法。 字串1


下面让我们通过具体的代码来说明这个过程。首先我们先来创建一个Stateless Session Bean。这个Session Bean实现的功能很简单,在其中的商业方法只有一个sayHello方法,打印一句"Hello
World:"。如我上边所介绍的这个EJB共有三个部分,它们的源代码如下所示:

字串8


包括create()方法的Remote Home Interface接口:







package com.javausr.example;

import java.rmi.*;
import javax.ejb.*;

public interface HelloWorldHome extends EJBHome {
public HelloWorld create() throws RemoteException, CreateException;
}
字串4


字串8


定义商业方法的Remote Interface接口:







package com.javausr.example;

import java.rmi.*;
import javax.ejb.*;

public interface HelloWorld extends EJBObject {
public void sayHello() throws RemoteException;
}
字串1


字串7


实现商业方法的Bean Class :





package com.javausr.example;

import java.rmi.*;
import javax.ejb.*;

public class HelloWorldBean implements SessionBean {
private SessionContext sessionContext;
public void ejbCreate() {}
public void ejbRemove() throws RemoteException {}
public void ejbActivate() throws RemoteException {}
public void ejbPassivate() throws RemoteException {}
public void setSessionContext(SessionContext sessionContext) throws
RemoteException {
this.sessionContext = sessionContext;
}

/**唯一的商业方法*/
public void sayHello(){
System.out.println("Hello :)");
}
}
字串7
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册