Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2042754
  • 博文数量: 519
  • 博客积分: 10070
  • 博客等级: 上将
  • 技术积分: 3985
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-29 14:05
个人简介

只问耕耘

文章分类

全部博文(519)

文章存档

2016年(1)

2013年(5)

2011年(46)

2010年(220)

2009年(51)

2008年(39)

2007年(141)

2006年(16)

我的朋友

分类:

2010-03-16 15:41:04

说明: 此节针对EJB开发初学者,主要是手动配置一个最基本的基于文本开发的环境,让初学者从头开始编写各类程序和配置文件,以更清楚的了解 EJB 开发和部署的步聚与原理。这是作者在学习 EJB 开发时的一个总结,欢迎指正。

  一、需求软件列表及下载地址

  1、 Sun Java SDK ,我们采用的版本为: j2sdk1.4.1_01 ,下载地址为: ,下载后的文件名为: j2sdk-1_4_1_01-windows-i586.exe

  2、 JBOSS ,一个免费的 EJB 容器。我们采用版本为: jboss-3.2.1_tomcat-4.1.24 ,这是一个内部己集成 Tomcat 的 EJB 容器。下载地址为: ,下载后的文件名为: jboss-3.2.1_tomcat-4.1.24.zip 。

  3、 注意:作者只保证在以上软件版本下以下步聚成功,对于其它的版本也应相同,但作者没有求证。以下步聚请严格按照执行。

  二、安装所需软件

  1、 安装 SDK 到 C:\j2sdk1.4.1_01 ;方法为:双击执行下载的 j2sdk-1_4_1_01-windows-i586.exe 文件,选择安装目录为 C:\j2sdk1.4.1_01 ,其它默认即可。

  2、 安装 JBOSS ;方法为:将下载的 jboss-3.2.1_tomcat-4.1.24.zip 文件解压到任意一个目录,解压后会在此目录中产生一个 jboss-3.2.1_tomcat-4.1.24 文件夹,在此文件夹下有一系列的文件和文件夹。然后在 C 盘根目录下建一个 JBOSS 目录,并将刚才解压后 jboss-3.2.1_tomcat-4.1.24 文件夹下的一系列文件和文件夹全都拷贝到 C : \JBOSS 目录下。即将 JBOSS 安装到了 C:\JBOSS 目录中。

  三、配置运行环境及测试程序目录

  一、设置环境变量

  1、 设置 JAVA_HOME 系统变量:在 win2k 下方法为,在桌面上右键点击“我的电脑”,选择属性,然后在弹出的页面上点“高级” -> “环境变量”,然后在弹出的页面中“系统变量”下点击“新建”,然后在弹出的窗口中“变量名 (N) 输入“ JAVA_HOME ”,在“变量值 (V) ”一栏中输入“ C:\j2sdk1.4.1_01 ”。

  2、 以同样的方法设置: JBOSS_HOME 值为: C:\JBOSS

  3、 以同样的方法在上面地方将 Path 的值后追加:以下内容:“ C:\j2sdk1.4.1_01\bin;C:\JBOSS\bin ”

  二、创建程序目录

  1、 在 C:\JBOSS 下新建一个 myproject 目录,用于存放自己的所有项目。

  2、 在 myproject 目录下新建三个目录:一个是 jsp 目录,其下用于存放所有的 jsp 文件和 servlet 文件及其它的 html , image 文件等;一个是 ejb 目录,用于存放所有即将发布的 EJB 类文件;一个是 src 目录,用于存放所有的 java 源文件。

  3、 在 jsp 目录下新建一个目录,并命名为: hello.war ,用来发布 WEB 程序,然后再在此目录下新建一系列文件夹:即在 hello.war 下新建 WEB-INF (大写)文件夹,再在 WEB-INF 下新建 classes 文件夹,再在 classes 文件夹下新建一个 hello 文件夹。

  4、 在 ejb 目录下新建一个 client 目录和一个 hello.jar 目录,分别用于存放 EJB 客户端和要发布的服务器端类。然后再在 client 目录下新建一个 hello 目录,再在此目录下新建一个 ejb 目录。然后在 hello.jar 目录下新建一个 hello 目录和一个 META-INF( 大写 ) 目录,并在 hello 目录中新建一个 ejb 目录。
四、编写测试程序及相关脚本

  一、 测试 JBOSS 安装成功与否,方法如下:进入 C : \JBOSS 目录中,执行 run.bat –c all 启动具有全部功能的 JBOSS 配置服务器。屏幕经过一会滚动后不再滚动。这时启动 IE 输入: 即可看到 IE 中出现一系列列表,即表明 JBOSS 启动成功。此时可在启动 JBOSS 的 DOS 窗口上按 Ctrl+C 关闭 JBOSS 服务器。

  二、 进入 C:\JBOSS\myproject\jsp\hello.war 目录中,用记事本新建一个 index.jsp 文件,内容如下:用于测试 jsp 程序

< contentType="text/html; charset=gb2312"%>


 
 


 <%
  String hello = "Hello world!this created by jsp file!";
  out.println(hello);
 %>

 

  三、 进入 C:\JBOSS\myproject\src 目录,新建一个 HelloWorld.java ,是一个 Servlet 类,内容如下:

package hello;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorld extends HttpServlet
{
 public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
 {
  response.setContentType("text/html");
  PrintWriter out = response.getWriter();
  out.println("


");
  out.println("Hello World! This is created by Servlet!");
  out.println("
");
 }

  到此,我们就建立好了用于测试的 JSP 文件和 Servlet 类,下面将建 HelloWorld 的无状态 SessionBean 。

  四、进入 C:\JBOSS\myproject\src 目录,新建一个 Hello.java 文件,以实现 EJB 的 Remote 接口,内容如下,

package hello.ejb;
/**
 * Remote interface for Enterprise Bean: Hello
 * Remote 接口
*/

public interface Hello extends javax.ejb.EJBObject {

/**
 * 唯一的方法 hello ,向客户端返回问候。
*/
public String hello() throws java.rmi.RemoteException;
}
 

  同样在此目录中新建一个 HelloLocal.java 文件,实现 Local 接口,内容如下:

package hello.ejb;
import javax.ejb.EJBLocalObject;
public interface HelloLocal extends EJBLocalObject {
 public String hello();

  同样在此目录中新建一个 HelloHome.java 文件,实现 Home 接口,内容如下:

package hello.ejb;

/**
 * Home interface for Enterprise Bean: Hello
 * Home 接口
*/

public interface HelloHome extends javax.ejb.EJBHome{

/**
 * Creates a default instance of Session Bean: Hello
*/
public Hello create() throws javax.ejb.CreateException, java.rmi.RemoteException;

  同样在此目录中新建一个 HelloLocalHome.java 文件,实现 LocalHome 接口,内容如下:

package hello.ejb;
import javax.ejb.EJBLocalHome;

public interface HelloLocalHome extends EJBLocalHome {
 HelloLocal create() throws javax.ejb.CreateException;

  同样在此目录中新建一个 HelloBean.java ,实现 EJB 类,内 [ 容如下:

  package hello.ejb;

/**
 * Bean implementation class for Enterprise Bean: Hello
*/

public class HelloBean implements javax.ejb.SessionBean{
 private javax.ejb.SessionContext mySessionCtx;
 /**
  * getSessionContext
 */

 public javax.ejb.SessionContext getSessionContext(){
  return mySessionCtx;
 }

 /**
  * setSessionContext
 */

 public void setSessionContext(javax.ejb.SessionContext ctx){
  mySessionCtx = ctx;
 }

 /**
  * ejbActivate
 */

 public void ejbActivate(){
 }

 /**
  * ejbCreate
 */
 public void ejbCreate() throws javax.ejb.CreateException{
 }

 /**
  * ejbPassivate
 */

 public void ejbPassivate(){
 }

 /**
  * ejbRemove
 */
 public void ejbRemove(){
 }

 /**
  * 商务方法
 */
 public String hello(){
  return "Hello,World! this is created by EJB!";
 }

  至此,我们己经将 EJB 类所需的所有的所有类编写好了,下面我们编写用于测试此 EJB 程序的文件,具体来说有两个:一个是用客户端 Servlet 来调用 EJB ,另一个是用客户端类来调用 EJB 。实现如下:

五、实现测试 EJB 的程序

  进入 C:\JBOSS\myproject\src 目录中,新建一个 HelloServlet.java 文件,用于测试通过 Servlet 调用 EJB 。内容如下:

package hello;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import javax.ejb.*;
import javax.naming.InitialContext;
import javax.naming.Context;
import hello.ejb.*;
import java.util.*;

public class HelloServlet extends HttpServlet
{
 private HelloHome home;
 public void init() throws ServletException
 {
  try
  {
   String initCtxFactory = getInitParameter(Context.INITIAL_CONTEXT_FACTORY);
   String providerURL = getInitParameter(Context.PROVIDER_URL);
   Properties env = new Properties();
   if(initCtxFactory!=null)
   {
    env.put(Context.INITIAL_CONTEXT_FACTORY,initCtxFactory);
   }
   if(providerURL!=null)
   {
    env.put(Context.PROVIDER_URL,providerURL);
   }
   Context ctx=new InitialContext(env);
   Object objRef = ctx.lookup("Hello");
   // 主接口
   home=(HelloHome)javax.rmi.PortableRemoteObject.narrow(objRef,hello.ejb.HelloHome.class);
  }catch(javax.naming.NamingException ne){
   System.out.println("Create Exception caught:"+ne);
   throw new ServletException(ne.toString());
  }catch(Exception e)
  {
   throw new ServletException(e.toString());
  }
 }
 
 public void service(HttpServletRequest req,HttpServletResponse res) throws IOException
 {
  res.setContentType("text/html");
  PrintWriter out =res.getWriter();
  out.println("the first EJB");
  try{
   // 组件接口
   Hello bean =home.create();
   out.println(bean.hello());
  }catch(javax.ejb.CreateException ce){
   out.println("Create Exception caught:"+ce);
   ce.printStackTrace(out);
  }catch(java.rmi.RemoteException re){
   out.println("Remote Exception caught:"+re);
   re.printStackTrace(out);
  }
  out.println("");
 }

  同样在此目录中,新建一个 HelloClient.java 文件,用于通过客户端类测试 EJB ,内容如下:

package hello.ejb;
import java.util.*;
import java.io.*;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import javax.naming.Context;
import javax.rmi.PortableRemoteObject;
import hello.ejb.*;

public class HelloClient
{
 public static void main(String[] args)
 {
  try
  {
   //jndi 配置 , 应实现为外部属性文件
   Properties env = new Properties();
   //config.properties 文件应该放在和 hello 包目录所在目录的同级目录中。即它和 hello 文件夹同在一个文件夹中。

   env.load(new FileInputStream("config.properties"));

   // Get a naming context
 
   System.out.println(env);
   InitialContext ctx = new javax.naming.InitialContext(env);
   System.out.println("Got context");
   // Get a reference to the Interest Bean
   //jboss 默认 jndi 名为 ejb-jar.xml 中的 :ejb-name
   Object ref = ctx.lookup("Hello");
   System.out.println("Got reference");
   // Get a reference from this to the Bean"s Home interface
   HelloHome home = (HelloHome)PortableRemoteObject.narrow(ref, HelloHome.class);
   // Create an Hello object from the Home interface
   Hello hello = home.create();
   // call the hello() method
   System.out.println(hello.hello());
  }catch(Exception e)
  {
   System.out.println(e.toString());
  }
 }

  然后,我们还需增加一个此客户端程序运行时所需的 JNDI 配置文件。方法如下:

  进入 : C:\JBOSS\myproject\ejb\client 目录,用记事本新建一个 config.properties 文件,内容如下三行:

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=jnp://192.168.10.114:1099 


六、 编写服务器端的配置文件,

  首先进入 C:\JBOSS\myproject\jsp\hello.war\WEB-INF 目录,用记事本创建一个 web.xml 文件,用于配置 servlet ,内容如下:





HelloWorld
HelloWorld
hello.HelloWorld


HelloServlet
HelloServlet
hello.HelloServlet


HelloWorld
/HelloWorld


HelloServlet
/HelloServlet

 

  然后进入 C:\JBOSS\myproject\ejb\hello.jar\META-INF 目录,创建一个 ejb-jar.xml 文件,内容如下:


"">

This is Hello EJB example
helloeEJB


Hello
Hello
hello.ejb.HelloHome
hello.ejb.Hello
hello.ejb.HelloLocalHome
hello.ejb.HelloLocal
hello.ejb.HelloBean
Stateless
Container


 

  在此目录中,再建一个 jboss-service.xml 文件,内容如下:





Hello
Hello

true


 

  七、 到此为止,我们将所有的测试文件和配置文件己编写完成。

  八、 下面我们编写编译这些类文件的脚本程序,进入 C:\JBOSS\BIN 目录下,新建一个 com.bat 文件,内容如下:

set classpath=.;c:\j2sdk1.4.1_01\lib\tools.jar;C:\JBOSS\client\jbossall-client.jar;C:\JBOSS\client\jboss-client.jar;C:\JBOSS\client\jboss-iiop-client.jar;C:\JBOSS\server\default\lib\jnpserver.jar;C:\JBOSS\client\jnp-client.jar;C:\JBOSS\client\log4j.jar;C:\JBOSS\client\jboss-j2ee.jar; C:\JBOSS\server\all\lib\javax.servlet.jar

javac %1 

  同样在此目录新建一个 runclient.bat ,用于运行客户端程序,内容如下:

set classpath=.;c:\j2sdk1.4.1_01\lib\tools.jar;C:\JBOSS\client\jbossall-client.jar;C:\JBOSS\client\jboss-client.jar;C:\JBOSS\client\jboss-iiop-client.jar;C:\JBOSS\server\default\lib\jnpserver.jar;C:\JBOSS\client\jnp-client.jar;C:\JBOSS\client\log4j.jar;C:\JBOSS\client\jboss-j2ee.jar; C:\JBOSS\server\all\lib\javax.servlet.jar

java %1 

  五、编译和运行测试程序

  1、 进入 C:\JBOSS\myproject\src 目录中,运行 :

com *.java

  将产生一系列 .class 文件。

  2、 将产生的 HelloWorld.class 和 HelloServlet.class 拷贝到 C:\JBOSS\myproject\jsp\hello.war\WEB-INF\classes\hello 目录中。

  3、 将产生的 HelloHome.class 和 HelloClient.class 和 Hello.class 文件放入 C:\JBOSS\myproject\ejb\client\hello\ejb 目录中

  4、 将产生的 Hello.class 和 HelloBean.class 和 HelloHome.class 和 HelloLocal.class 和 HelloLocalHome.class 放入 C:\JBOSS\myproject\ejb\hello.jar\hello\ejb 目录中。

  至此,我们己经完成了所有类的编译,并将它们放入到适当的地方。

  这时,我们将 myproject 下 ejb 目录中的 hello.jar 目录和 jsp 下的 hello.war 目录拷贝到
C:\JBOSS\server\all\deploy 下。

  这时启动 JBOSS 的工作台自动会发布此两个目录。我们便可以测试了。
 
  启动 JBOSS :

run.bat –c all

  用 IE 打开 测试 JSP 文件

  用 IE 打开 测试 Serlvet

  用 IE 打开 测试用 Servlet 调用 EJB

  然后进入

  C:\JBOSS\myproject\ejb\client 运行:

Runclient hello/ejb/HelloClient

  成功!

 

阅读(501) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~