在上一讲,我们将EJB通过Application Deployment Tool发布进了服务器中去。我想大家十分想使用一个客户端的程序来调用它。好,我们这一讲就来讲讲客户端程序的编 写。
首先,我们先理一下思路。如果要使用服务器上的EJB哪么首先我们要得到一个Home接口,而这个接口需要你通过JNDI来得到,哪么JNDI是通过什么来找Home接口呢?哪就是我们在上一讲中所提到的在Application Deploying Tools里最后一步定义的JNDI name。再来理一下,首先,我们通过JNDI name利用JNDI来得到一个Home接口。再通过这个Home接口中的creat方法来得到一个Bean的实例化对象。以下为这段程序的代码:
我们新建一EJBClient的工程,在这个工程中我们加入一ConverterClient.java文件,同时在工程中加入J2EE的lib引用,并且更增加一个lib,这个lib指向我们在上一讲中使用Application Deployment Tool生成的ConverterAppClient.jar文件。这里包括了EJB在客户端所使用的库文件。以下是ConverterClient.java文件代码:
ConverterClient.java
/**
* Title: EJB Client Test Project$#@60;p$#@62;
* Description: $#@60;p$#@62;
* Copyright: Copyright (c) HD$#@60;p$#@62;
* Company: China Code$#@60;p$#@62;
* @author HD
* @version 1.0
*/
package ejbclient;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
//引用了EJB及EJB在Home的接口
import ejbtest.Converter;
import ejbtest.ConverterHome;
public class ConverterClient {
public static void main(String[] args) {
try {
//创建一个JNDI naming contest
Context initial = new InitialContext();
//从JNDI中以MyConverter名子来定位到对象(我们在发布时指定了这里能定位的JNDI的名称)
Object objref = initial.lookup("MyConverter");
//通过objref得到ConverterHome本地接口
ConverterHome home =
(ConverterHome)PortableRemoteObject.narrow(objref,
ConverterHome.class);
//再由Home接口的create方法来创建一个服务器上的EJB实例
Converter currencyConverter = home.create();
//调用EJB中的方法
double amount = currencyConverter.dollarToYen(100.00);
System.out.println(String.valueOf(amount));
amount = currencyConverter.yenToEuro(100.00);
System.out.println(String.valueOf(amount));
} catch (Exception ex) {
System.err.println("Caught an unexpected exception!");
ex.printStackTrace();
}
}
}
把这个java文件加入到在第一讲中我们建立的工程文件中去,让Jbuilder make工程一次。这样就会得到ConverterClient.class文件。在运行前我们要设置一下Jbuilder的工程,在Project-Project Properties…的Project Properties对话框中的Run Tab中设置Application的Main Class为ConverterClient。
如果你得到java.lang.ClassCastException的意外。哪么你需要确定是否在Project的lib中加入了对ConverterAppClient.jar包的引用。另外你一定要确认你在工程中使用的JNDI name是否与你在程序中使用的名称一样。通常出现问题就在这点了。
好,这里让你运行起来了第一个EJB的程序。实际上很简单,不是吗?我们会在下一讲中来讲讲EJB实施的原理。我在大多数的教程中都看到的是将理论放在最开始的地方,而我觉得先运行起一个实例更有利于大家的学习,更能有效的对EJB有一个深入的认识。我们在下一讲中来依照我们刚完成的实例理解一下EJB的部属和使用。