一、 简介
Enterprise Java Beans(EJB) 1.1规范正式定义了一个Java服务器端的组件模型,以及应用服务器的编程接口。开发人员建立的这类型组件称为enterprise beans,包含了企业的商业逻辑。Enterprise beans运行在EJB服务器上,该服务器为beans提供如事务、安全性方面的服务。开发人员并不需要编程来实现这些低层的、复杂的服务,仅仅需要知道当他们开发的beans需要这些服务的时候,这些服务是可用的。这样,他们就可以将精力集中在处理beans内部的商业逻辑上。
分布式多层应用系统一般来说由一个运行在本地机器上的客户层、一个运行在应用服务器上包含商业逻辑的中间层、一个后台的企业信息系统(典型的如数据库)。而在这里我们关心的焦点是怎样开发EJB,即中间层的东西。
本文提供一个步骤,通过简单的例子介绍怎样在JBuilder5的集成开发环境下开发EJB。这些步骤都很简单,对于了解EJB体系结构和一般的编程规则的人很容易理解。目的是为了能够让大家掌握在JBuilder5下开发分布式的多层应用系统的简单、快速的方法,达到举一反三的效果。
二、环境配置
1、 介绍
Borland JBuilder 是 基于Java 2 企业平台、创建跨平台环境、纯Java 的端对端解决方案的最佳 Java 开发工具。 JBuilder5是开发EJB和基于Java的应用程序的强有力的快速开发工具(RAD)。它提供了一个集成开发环境和大量的向导引导我们一步一步开发我们的应用。
本文将引导读者利用JBuilder5提供的向导和特性一步一步的开发和配置两类EJB(session beans 和entity beans)。
2、安装与配置
■ 安装:
本文所有的例子都是在Windows NT平台上完成的。因为Java本身具有的跨平台特性,所以在其它平台上基本的步骤都是一样的。为了完成我们这篇文章的所有例子,所需软件有:JDK1.3.1、Borland JBuilder5、Inprise Application Server 4.51、InterBase 6.01以及InterClient2.01。你可以使用另外的数据库系统来代替InterBase和InterClient,只要你的数据库系统拥有JDBC驱动程序。所有前面列出的软件,在SUN公司和Borland/Inprise公司的网站上都有评估版可以下载,以满足学习的需要。如下表:
安装JBuilder5:首先安装JBuilder5 Foundation,然后安装JBuilder 5 Enterprise,你还可以将JBuilder5附带的文档和例子安装进去(本文中,JBuilder5安装在D:\JBuilder5)。安装完成之后,启动JBuilder5,选择"File"-"New",将弹出一个对话框,让你选择要建立什么样的应用。点击"Enterprise"页,你将会发现,里面所有项目都是灰色、不可选择的。不要着急,等我们安装配置好Inprise Application Server之后,就会有了。
安装JDK1.3.1:按照提示进行安装(本文中JDK安装在D:\jdk1.3.1)。
安装Inprise Application Server 4.51:在安装IAS45时配置osagent端口为14000(缺省)本文中IAS4.5安装在D:\IAS45目录下。
安装InterBase和InterClient:因为在后面的Entity Beans例子中,我们将要访问数据库,在这里,我们安装InterBase6.01和针对InterBase6.01的第三类的JDBC驱动程序InterClient2.01。按照安装提示进行下去就可以了(本文中,InterBase安装在D:\InterBase Corp\InterBase目录下;InterClient安装在D:\InterBase Corp\InterClient目录下)。
■ 配置:
我们需要配置JBuilder5,让它知道IAS45的存在。启动JBuilder5,在菜单栏选择"Tools"-"Enterprise Setup"。在"Enterprise Setup"窗口中,如图1。在"CORBA"页中的"select configuration"中选择"VisiBroker",然后点击旁边的"Edit"按钮,在"Edit Configuration"窗口中配置"Path of ORB tools"为Inprise Application Server安装目录下的"bin"子目录,在本文中是"D:/IAS45/bin"(注意:这里的路径符号为"/"),如图2。
图1
图2
在"Application Server"页中,如图3,配置IAS安装目录为"D:/IAS45"(注意:这里的路径符号为"/")。
图3
这两项配置完成之后,点击"OK",然后重新启动JBuilder5。
另外,我们需要建立一个由Inprise Application Server的JAR文件组成的库,这样,JBuilder5才能够依靠库中的类来编译项目。
在JBuilder5中,选择菜单中的"Project"-"Default Project Properties…",在打开的窗口中选择"Paths"页面中的"Required Librares"页,如图4,然后点击"Add…"按钮。在"Select One or More Libraries"窗口中,点击"New…"按钮。在"New Library Wizard"窗口中,点击"Add"按钮。将D:/IAS45\lib目录下的所有的JAR文件添加进去。如图5。完成之后如图6。设置New Library Name为:ias。
图4
图5
图6
三、Session Beans
1. 开发Session Beans
准备工作完成之后,就可以开始我们的JBuilder5--EJB之旅了。首先,我们将建立一个JBuilder的项目(Project)。在这个项目里,我们将写一个无状态的(Stateless)的Session Beans,命名为TellerBean。在这个Session Bean中,有一个方法用来返回一个假定的号码,这个号码代表一个银行出纳员的编号。完成之后,我们还要建立一个测试用的"客户"来访问这个Bean。
打开你的JBuilder5,如果JBuilder5有默认打开的项目,先关闭它。然后,建立一个新的项目。
步骤:
1、 选择"File"-"New Project…"
2、 设置Project Name、Project directory name为"quickstart";设置Root path为D:/project。(注意路径),如图7。
3、 点击"Finish"。
图7
然后,我们将建立一个EJB Group,这样,我们无论什么时候编译项目时,JBuilder5都将自动的建立一个包含我们的EJBs的、可配置的jar文件。
步骤:
1、 选择"File"-"New…"-"Enterprise"标签-"Empty EJB Group"-"OK"。
2、 在"Empty EJB Group Wizard"窗口中设置Name为"quickstart"。
3、 点击"OK"。如图8。
图8
下一步,我们就开始建立Bean。JBuilder5提供了建立EJB的向导,这里,我们当然是用向导了。
步骤:
1、 选择"File"-"New…"-"Enterprise"标签-"Enterprise JavaBean"。
2、 点击"OK"之后,向导提示我们选择EJB Group,当然是用我们刚才建立的EJB Group。
3、 点击"Next",设置Class name为TellerBean。其它保持不变。如图9。
图9
4、 点击"Next",设置"Bean home name"为TellerHome。其它保持不变,如图10。
图10
5、 点击"Finish"。
这样,你在JBuilder5的左边窗口中将可以看到三个类,其中:TellerHome和Teller是为EJB容器实现的接口;TellerBean是我们自己的Bean。我们将增加一个方法到这个Bean中。
选择"TellerBean"类,然后在这个类中增加下面的方法:
public int getTellerNo(){
return 1;
}
保存所有的文件。然后编译这个项目。(单击工具栏的
和
图标)。
现在,我们需要在远程接口中增加我们的放法签名,这样EJB容器才能够将我们的方法暴露给远程调用的客户。
步骤:
1、 双击项目窗格中的:TellerBean.java。在内容窗格中可以看到TellerBean.java的源文件。
2、 在TellerBean标签的下面,点击Bean标签,再选择Methods标签。
3、 选择int getTellerNo()。如图11。
图11
现在,我们已经完成了EJB的代码编写工作。下面将要做的工作是关于配置描述符。
配置描述符是EJB重要的组成部分之一。它将编写EJB代码与EJB的配置设置分割开。这样,在不影响源代码的情况下,可以对应用程序进行分割和调整。
实际上,在我们的项目中已经有了配置描述符。在我们利用EJB Group向导的时候,就生成了。当我们使用向导时,它生成了TellerBean的Java代码,增加了一个相应的配置描述符入口,现在我们只需要调整一下就可以了。
步骤:
1、 在项目窗格双击quickstart.ejbgrp,在下面的结构窗格,展开TellerBean,单击Container Transactions。如图12。
2、在右边的内容窗格中,单击下部的"Add"按钮,为我们的方法增加一个"Required"的事务属性。如图13。这个"Required"的事务属性将对这个Bean的所有方法和接口起作用。
图13