第四部分:测试Session bean
在前面的三个部分已经完整地讲述了一个Session Bean的建立过程。下面来建立测试工程。
添加测试类:
在右边的树型菜单中选中com.inspiresky.trader右键 〉new 〉package,在对话框的输入框最后添加user,新建com.inspiresky.trader.user包。
选中com.inspiresky.trader.user右键 〉new 〉class,创建UserInfo.java类,代码如下。
----------------------------------
UserInfo.java
----------------------------------
package com.inspiresky.trader.user;
import javax.naming.InitialContext;
import trader.UserInfoLocalHome;
import trader.UserInfoLocal;
import javax.naming.NamingException;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import java.util.HashMap;
import java.util.Date;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2005</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class UserInfo {
public UserInfo() {
}
public HashMap getUserInfo(){
HashMap map = new HashMap();
try {
UserInfoLocal local = (UserInfoLocal) findEjb();
map = local.showUserInfo();
} catch (CreateException ex) {
System.out.println("Error 1");
} catch (RemoteException ex) {
System.out.println("Error 2");
} catch (NamingException ex) {
System.out.println("Error 3");
}
return map;
}
private Object findEjb() throws NamingException, RemoteException,
CreateException {
javax.naming.Context context = new javax.naming.InitialContext();
Object obj = context.lookup("UserInfoLocal");
UserInfoLocalHome home = (UserInfoLocalHome)javax.rmi.PortableRemoteObject.narrow(obj,
UserInfoLocalHome.class);
UserInfoLocal local = (UserInfoLocal)home.create("Jak","12",new Date().toString());
return local;
}
}
添加客户类:
同样的方法在同一个包中创建类Test.java,代码如下。
---------------------------------
Test.java
-----------------------------------
package com.inspiresky.trader.user;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import com.inspiresky.trader.user.UserInfo;
public class Test extends HttpServlet {
private static final String CONTENT_TYPE = "text/html; charset=GBK";
private HashMap map;
//Initialize global variables
public void init() throws ServletException {
UserInfo user = new UserInfo();
map = user.getUserInfo();
}
//Process the HTTP Get request
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>Test</title></head>");
out.println("<body bgcolor=\"#ffffff\">");
out.println(map.toString());
out.println("</body>");
out.println("</html>");
out.close();
}
//Process the HTTP Post request
public void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
doGet(request, response);
}
//Process the HTTP Put request
public void doPut(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
}
//Process the HTTP Delete request
public void doDelete(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
}
//Clean up resources
public void destroy() {
}
}
修改web.xml:
在第二部分我们曾修改过web.Xml,同样的方法,我们接着添加如下的部分:
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>com.inspiresky.trader.user.Test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
修改后的web.xml文件的全部内容为:
----------------------------------------
web.xml
----------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
<display-name>WebTrader</display-name>
<servlet>
<servlet-name>log4j-init</servlet-name>
<servlet-class>com.inspiresky.trader.init.Log4jInit</servlet-class>
<init-param>
<param-name>log4j-init-file</param-name>
<param-value>WEB-INF/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>com.inspiresky.trader.user.Test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
</web-app>
创建J2EE应用程序部属包:
前面已经完成了工程的所有的开发工作,为了部署的方便,我们现在来创建一个应用程序的部署包。
选择菜单:new 〉enterprise 〉Application Module(EAR)〉 OK 〉 Create empty application module 〉 Next 〉 输入名称 ETrader 〉 Next 〉选择Trader 〉Next 〉 选择WebTrader 〉Finish。
编译工程:
在树型菜单中右键点击ETader 〉Rebuilder。没有错误提示则编译成功。
启动JBoss:
运行D:\jboss-4.0.2RC1\bin\run.bat,启动JBoss。因为我们在path中设置了路径,所以也可以直接在命令行下运行run命令。
部署应用程序:
在树型菜单中右键点击ETader 〉deploy option for “ETrader.ear” 〉 deploy。
下面的两个命令分别是重新部署和卸载应用时使用。
运行程序:
打开IE浏览器,在地址栏中输入
http://localhost:8080/WebTrader/test
此时,会显示
{userName=Jak, loginTime=Wed Mar 30 11:26:18 CST 2005, userAge=12}
表明我们的程序已经正常运行了。
OK,到此一个简单的Session Bean应用就开发完成了。这里理论的东西较少,只是希望能用例子给大家一些启示,能够更好的理解和应用我们所看到的一些关于J2EE的一些理论,更好的熟悉我们所用的工具。
成文仓促,难免有错误疏漏之处,欢迎指正。