搜索此博客

2008年3月5日星期三

Solaris下GlassFish中EJB的开发

在系统根目录下新建一个名为" hello-ejb "的文件夹,下面我们来在此文件夹下开发我们的 EJB 程序

( 1 )在" hello-ejb "文件夹下新建一个 Hellobean.java 文件编写业务方法,其代码如下

package ejbtest;

import javax.ejb.*;

/* Stateless Session Bean. 这个 Bean 只有一个业务方法 , 输出一个字符串 .*/

@Stateless

public class HelloBean implements HelloRemote{

/* 业务方法 */

public String sayHello(){ return " 欢迎来到 EJB 世界! ";}}

( 2 )在" hello-ejb "文件夹下新建一个 Hello.java 文件,编写业务接口,其代码如下

package ejbtest;

import javax.ejb.*;

// 业务接口,客户端通过这个接口调用 EJB 对象,实现相应的功能。

public interface Hello{public String sayHello();}

( 3 )在" hello-ejb "文件夹下新建一个 HelloRemote.java 文件,编写远程接口,其代码如下

package ejbtest;

import javax.ejb.*;

/* 远程接口,客户端通过这个接口调用 EJB 对象 */

@Remote

public interface HelloRemote extends Hello{ }

( 4 )成功编译完以上 Java 文件后,下面我们来开发 Servlet 中通过远程方式调用 EJB 的方法,在" hello-ejb "文件夹下新建一个 TestEjbServletRemote.java 文件,其代码如下

package ejbtest;

import java.io.*;

import java.util.*;

import javax.naming.*;

import javax.servlet.*;

import javax.servlet.http.*;

import javax.rmi.*;

public class TestEjbServletRemote extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws IOException {

response.setContentType("text/html;charset=GBK");

PrintWriter out = response.getWriter();

out.println("<html><head><title>"+

"Servlet 中调用 Ejb 中的方法―远程方式 </title></head><body>");

try{

Context initial = new InitialContext();

Hello hello=(Hello)initial.lookup("ejbtest.HelloRemote");

String say = hello.sayHello[[egg]];

out.println("************************************<br>");

out.println("EJB 调用结果: "+

"<b><font color=red>"+say+"</font></b><br>");

out.println("************************************");

out.println("</b><h3>"+

" 恭喜你 , 你已经成功调用 EJB!!!</h3></body></html>");

}catch (Exception ex) {

out.println("**** 出现例外!,重新调试! *****");

out.println(ex);}

}

}

( 5 )编译完以上四个文件后,再在" hello-ejb "文件夹下新建一个" bean "文件夹,并将" Hellobean.java "、" Hello.java "和" HelloRemote.java "三个文件放入" bean "文件夹中

( 6 )在" hello-ejb "文件夹下新建一个" ejbtest "文件夹,将我们刚才编译" Hellobean.java "、" Hello.java "和" HelloRemote.java "后所生成的" .class "文件放下入" ejbtest "文件夹

( 7 )在" bean "文件夹下新建一个" MATA-INF "文件夹

( 8 )使用如下命令将" ejbtest "文件夹和" MATA-INF "文件夹打成一个" hello.jar "的包,如图 3-5-1 所示

cd /hello-ejb/bean

jar cvf hello.jar META-INF ejbtest
3-5-1
图 3-5-1

命令执行后我们会看到在" bean "文件夹下会多一个" hello.jar "的文件,如图 3-5-2 所示
3-5-2
图 3-5-2

( 9 )在 " hello-ejb "文件夹下新建一个" war "文件夹,并将" TestEjbServletRemote.java "文件放入" war "文件夹

( 10 )在" war "文件夹下新建一个" ejbtest "文件夹,将我们刚才编译" TestEjbServletRemote.java " 后所生成的" .class "文件放下入" ejbtest "文件夹

( 11 )在" war "文件夹下新建一个" web_war "文件夹

(12) 在" web_war "文件夹下新建一个" WEB-INF "文件夹

(13) 在" WEB-INF "文件夹下新建一个" lib "文件夹,并将" bean "文件夹下" hello.jar "拷贝进来,如图 3-5-3 所示
3-5-3
图 3-5-3

( 14 )在" WEB-INF "文件夹下新建一个" classes "文件夹,并将" war "文件夹下的" ejbtest "文件夹拷贝一份放入其中

( 15 )在" WEB-INF "文件夹下新建一个" sun-web.xml "文件其代码如下

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 8.1 Servlet 2.4//EN" "http://www.sun.com/software/appserver/dtds/sun-web-app_2_4-1.dtd">

<sun-web-app><context-root>/hello</context-root></sun-web-app>

( 16 )在" WEB-INF "文件夹下新建一个" web.xml "文件其代码如下

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"

"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

<web-app><display-name>HelloApp</display-name>

<servlet>

<servlet-name>TestEjbServletRemote</servlet-name>

<servlet-class>ejbtest.TestEjbServletRemote</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>TestEjbServletRemote</servlet-name>

<url-pattern>/TestEjbServletRemote</url-pattern>

</servlet-mapping>

<welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>

</web-app>

创建完成后如图 3-5-4 所示
3-5-4
图 3-5-4

( 17 )回到" web_war "文件夹下新建一个" index.jsp "文件 , 其代码如下

<%@ page contentType="text/html;charset=GBK" %>

<html>

<head><title>EJB 简介 </title></head>

<body>

<a href="TestEjbServletRemote" target="Blank1">

远程调用― TestEjbServletRemote</a><br/>

</body>

</html>

( 18 )使用如下命令将" web_war "文件夹和" index.jsp "文件打成一个" hellotest.war "包,如图 3-5-5 所示

cd /hello-ejb/war/web_war

jar cvf hellotest.war WEB-INF index.jsp
3-5-5
图 3-5-5

命令执行后我们会看到在" bean "文件夹下会多一个" hellotest.war "的文件,如图 3-5-6 所示
3-5-6
图 3-5-6

( 19 )为了方便部署,笔者将" bean "文件夹下的" hello.jar "和" war "文件夹下的" hellotest.war "拷贝到的系统根目录,如图 3-5-7 所示
3-5-7
图 3-5-7

( 20 )启动 GlassFish ,打开浏览器,登入 Glassfish 管理帐户后,点击页面左侧的"应用客户机模块",在右侧窗口处单击"部署"如图 3-5-8
3-5-8
图 3-5-8

( 21 )选中"可以从 Application Server 访问的本地打包文件或目录",使用"浏览文件…"找到我们刚才所打的" hello.jar " 如图 3-5-9
3-5-9
图 3-5-9

( 22 )单击页面左上角的"确定"便会出现如图 3-5-10 所示页面,我们可以看到我们所部署的" hello.jar "文件
3-5-10
图 3-5-10

( 23 )同样的方法,我们在" Web 应用程序"中部署我们的" hellotest.war "文件,部署完毕后如图 3-5-11 所示
3-5-11
图 3-5-11

( 24 )点击打开一个新的浏览器,在地址栏键入" http://localhost:8080/hellotest "便会出现如图 3-5-12 所示页面
3-5-12
图 3-5-12

( 25 )点击网页中的超链接我们便可以进入如图 3-5-13 所示页面
3-5-13
图 3-5-13

自此,我们基于 Solaris 下 GlassFish 中 EJB 的开发完成。

转自http://www.unix-center.net

没有评论:

Google