J2EE Server下的第一个EJB程序.docx
- 文档编号:12714550
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:28
- 大小:853.57KB
J2EE Server下的第一个EJB程序.docx
《J2EE Server下的第一个EJB程序.docx》由会员分享,可在线阅读,更多相关《J2EE Server下的第一个EJB程序.docx(28页珍藏版)》请在冰豆网上搜索。
J2EEServer下的第一个EJB程序
J2EEServer下的第一个EJB程序(图文进阶篇)
flyingwcy原创 (参与分:
805,专家分:
2530) 发表:
2002-9-5下午6:
11 更新:
2002-12-24上午11:
28 版本:
2.5 阅读:
32808次
作者:
翁驰原
编按:
为了帮助国内J2EE初学者,写了这篇文章,期望能够对广大Java爱好者有所帮助。
文章内容:
1、本文一步步图文并茂的教读者配置出一个标准的J2EE开发环境
2、启动cloudscape数据库的cloudview,并建立数据库
3、让读者开发第一个EJB程序
4、设置EJB的datasource、部署应用程序等。
开发环境:
开发环境使用SUN的j2sdk1.4和j2sdkee1.3.1(注:
关于j2sdk的版本,只要是1.3.1_02以后的都可以)。
数据库:
j2sdkee自带的cloudscape数据库。
第一、配置系统环境
确认你下载了j2sdk1.3.1_02以上的jdk版本和j2sdkee.1.3.1这些软件可以到sun的网站上去找目前j2se的最高版本是j2sdk1.4。
然后安装上述软件。
我的安装目录是在H:
盘。
在安装之前如果你以前装有不同版本的jdk,请先卸载,然后再安装。
安装好以后,请设置classpath.windows下的设置如下:
为了方便,所以加入大部分的路径。
setJAVA_HOME=h:
\j2sdk1.4
setJ2EE_HOME=h:
\j2sdkee1.3.1
setclasspath=h:
\j2sdk1.4\jre\lib\jaws.jar;
h:
\j2sdk1.4\lib\dt.jar;
h:
\j2sdk1.4\lib\tools.jar;
h:
\j2sdkee1.3.1\lib\ejb10deployment.jar;
h:
\j2sdkee1.3.1\lib\j2ee.jar;
h:
\j2sdkee1.3.1\lib\jhall.jar;
h:
\j2sdkee1.3.1\lib\j2eetools.jar;
h:
\j2sdkee1.3.1\lib;
上面是我的机器上的目录,如果你安装在不同的目录上的话,请自行改变
如果操作系统是win98,要运行这个文件或者重新启动才可以生效.
这样可以顺利的启动j2ee,在dos窗口下运行%j2ee_home%\bin\j2ee-verbose命令如果顺利的话,就会看到在DOS窗口中出现J2EEserverstartupcomplete的提示(如下图)。
打开浏览器敲入地址http:
//localhost:
8000/index.html可以看到首页就说明配置正确并成功启动了J2EE应用服务器。
(如下图)
第二、启动数据库
加入如下的路径
h:
\j2sdkee1.3.1\lib\system\cloudutil.jar;h:
\j2sdkee1.3.1\lib\cloudscape\cloudclient.jar;
h:
\j2sdkee1.3.1\lib\cloudscape\rmijdbc.jar;h:
\j2sdkee1.3.1\lib\system\cloudscape.jar;
关键的问题出在如何调出cloudscape数据库的图形管理界面!
你在命令行方式下敲入javaCOM.cloudscape.tools.cview很可能会出现错误。
什么原因呢?
第一、你要看看你的jdk版本对不对,是不是1.3.1_02以上或者1.4的。
第二、关键中的关键,原来sun的j2ee里的cloudview是不能在他附带的cloudscape4.0.6下工作的(真不知道sun在搞什么东东:
))
这里是在ibm网站上的一句原话:
TheJava2SDK,EnterpriseEditionv.1.3.1includesCloudscape4.0.6butincludesaversionofCloudviewwhichwillnotfunctionwiththe4.0.6system。
所以同志门就自己去下一个吧!
这里还需要两个jar文件。
下载地址是
cloudview.jar和jd.jar把这两个文件放在j2sdkee1.3.1下的cloudscape目录下,我这里还需要加两个classpaht路径
h:
\j2sdkee1.3.1\cloudscape\cloudview406.jar;
h:
\j2sdkee1.3.1\cloudscape\jh.jar
OK!
一起大功告成!
现在看看怎么启动cloudview,在命令行下键入
java-Dcloudscape.system.home=%j2ee_home%\cloudscapeCOM.cloudscape.tools.cview
这里-Dcloudscape.system.home是设置数据库存放的路径,这个路径可以在建立数据库的时候改变
%j2ee_home%\cloudscape是cloudscape的默认工作目录
也可以将-Dcloudscape.system.home后的路径去掉,不过要记住,要将数据库建在改路径下,否则j2eeserver找不到它!
好了,接下来你会发现一个图形界面。
用file——>new菜单来新建一个数据库(如下图)
很多数据库的管理模式都差不多,比如cloudview和sqlserver、db2的控制中心使用方法基本相同。
在弹出的菜单中输入你所要创建的数据库名。
在这个例子里输入ExampleDB。
按directory按钮选择目录在j2ee的安装目录下的cloudscape目录(如下图)
这时在面板的左面就会发现有了table、view等列表。
如果下次启动时候左面的面板不见了,可以选view菜单下的detailsonly后再选一次。
然后在Table上点右键选择new子菜单下的table,新建好了一个表后可以在右边的框的name旁边的框内修改表名,这里表名设成employee。
在columns这一栏可以按+号新增一个列。
也可以选择所要删除的列后按-号。
新建两个列,一个是employeeID、一个是name类型和字段长度如下图所示。
选择Data标签可以新增数据,你可以输入一些测试数据。
鼠标右键选择左边窗口的Keys在弹出的窗口里选择new——>key。
在右边的窗口修改名字为employeeKey,类型选择primaryKey,然后点选EmployeeID字段(如下图),按下面的OK按钮确定,最后按OK按钮关闭cloudview窗口。
接下来启动j2ee自带的cloudscape数据库,这个也简单
在命令行方式下到h:
\j2sdkee1.3.1\bin目录下打cloudscape-start可以启动cloudscape数据库如下图
第三、接下来开始写三个范例程序
分别是EmployeeHome.java、EmployeeBean.java、Employee.java。
把这三个程序一起放在一个叫first的目录里
(1)EmployeeHome.java
package;
importjava.util.Collection;
importjava.rmi.RemoteException;
importjavax.ejb.*;
publicinterfaceEmployeeHomeextendsjavax.ejb.EJBHome{
publicEmployeecreate(StringemployeeID)throwsDuplicateKeyException,javax.ejb.CreateException,java.rmi.RemoteException;
publicEmployeefindByPrimaryKey(StringemployeeID)throwsObjectNotFoundException,FinderException,RemoteException;
}
这个文件实现了Home接口。
Home接口必须遵守以下的规定:
(1)类型必须为interface。
(2)必须是public。
(3)至少要声明一个create()或者finder方法其中的一个。
(4)create和finder方法必须包含java.rmi.RemoteException异常,finder方法必须另外包含java.ejb.FinderException异常。
客户端利用Homeinterface取得EJBObject的远端对象参考(Remoteinterface)什么是Remoteinterface呢?
看下来的程序
(2)Employee.java
package;
importjavax.ejb.EJBObject;
importjava.rmi.RemoteException;
publicinterfaceEmployeeextendsjavax.ejb.EJBObject{
publicStringgetName()throwsjava.rmi.RemoteException;
}
这个文件实现了Remote接口。
Remote接口必须遵守以下的规定:
(1)类型必须为interface。
(2)必须是public。
(3)必须直接或者间接继承java.ejb.EJBObject。
(4)声明的方法必须和Beanclass里的方法一样。
(3)EmployeeBean.java
package;
importjava.util.*;
importjavax.ejb.*;
publicclassEmployeeBeanimplementsEntityBean{
publicStringemployeeID;
publicStringname;
privateEntityContextcontext;
publicvoidsetEntityContext(EntityContextcontext){
this.context=context;
}
publicvoidunsetEntityContext(){
context=null;
}
publicStringejbCreate(StringemployeeID)throwsDuplicateKeyException,CreateException{
this.employeeID=employeeID;
this.name="";
returnnull;
}
publicvoidejbPostCreate(StringemployeeID){
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetName(){
returnname;
}
publicvoidejbActivate(){
employeeID=(String)context.getPrimaryKey();
}
publicvoidejbPassivate(){
employeeID=null;
name=null;
}
publicvoidejbRemove(){
}
publicvoidejbLoad(){
}
publicvoidejbStore(){
}
}
以上是一个EntityBean和一个远程接口和一个Home接口。
下面写一个JavaBean来调用EntityBean里的方法
EmployeeOut.java
packageemployee.beans;
import.*;
importjava.util.*;
importjavax.naming.*;
importjavax.rmi.PortableRemoteObject;
importjavax.ejb.*;
importjava.sql.*;
publicclassEmployeeOut{
privateStringid="";
privateStringname="";
EmployeeHomeemployeeHome=null;
publicEmployeeOut()throwsSQLException
{
try{
Contextinitial=newInitialContext();
Objectobjref=initial.lookup("ejb/EmployeeEntityBean");
employeeHome=(EmployeeHome)PortableRemoteObject.narrow(objref,EmployeeHome.class);
}catch(Exceptionex){
thrownewSQLException(ex.toString());
}
}
publicStringgetName(Stringid)throwsException
{
try
{
Employeeemployee=employeeHome.findByPrimaryKey(id);
name=employee.getName();
returnname;
}
catch(ObjectNotFoundExceptionnotfoundex){
return"notfound";
}
catch(Exceptionex){
throwex;
}
}
}
在dos方式下,更换工作目录至first目录,然后执行下列的编译指令:
javac-d.*.java(注d后面和*前面都有一个空格)
就可以在first下生成一个com目录和一个beans目录里面有编译好了的.class文件。
接下来写一个jsp文件,将jsp文件放在first目录下,通过调用JavaBean里的方法来简洁调用EntityBean里的方法。
login.jsp
<%@pagelanguage="java"import="java.sql.*,employee.beans.*"contentType="text/html;charset=GB2312"%>
useBeanid="employee"scope="page"class="employee.beans.EmployeeOut">
useBean>
<%
Stringname="";
Stringid=request.getParameter("id");
if(id==null)
{
id="";
}
if(!
id.equals(""))
{
name=employee.getName(id);
}
%>
<%=name%>