J2EE Server下的第一个EJB程式(图文进阶篇)-JSP教程,J2EE/EJB/服务器
4001 点击·0 回帖
![]() | ![]() | |
![]() | 文章内容: 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的网站上去找http://java.sun.com 目前j2se的最高版本是j2sdk1.4。然后安装上述软件。我的安装目录是在h:盘。在安装之前如果你以前装有不同版本的jdk,请先卸载,然后再安装。安装好以后,请设置classpath.windows下的设置如下:为了方便,所以加入大部分的路径。 set java_home=h:\ j2sdk1.4 set j2ee_home=h:\j2sdkee1.3.1 set classpath=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窗口中出现j2ee server startup complete的提示(如下图)。 ![]() 打开浏览器敲入地址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数据库的图像管理界面!你在命令行方式下敲入java com.cloudscape.tools.cview非常可能会出现错误。什么原因呢?第一、你要看看你的jdk版本对不对,是不是1.3.1_02以上或1.4的。第二、关键中的关键,原来sun的j2ee里的cloudview是不能在他附带的cloudscape4.0.6下工作的(真不知道sun在搞什么东东 :)) 这里是在ibm网站上的一句原话:the java 2 sdk, enterprise edition v. 1.3.1 includes cloudscape 4.0.6 but includes a version of cloudview which will not function with the 4.0.6 system。所以同志门就自己去下一个吧!这里还需要两个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%\cloudscape com.cloudscape.tools.cview 这里-dcloudscape.system.home是设置数据库存放的路径,这个路径能在建立数据库的时候改动 %j2ee_home%\cloudscape是cloudscape的默认工作目录 也能将-dcloudscape.system.home后的路径去掉,不过要记住,要将数据库建在改路径下,否则j2ee server未找到他!好了,接下来你会发现一个图像界面。用file??>new 菜单来新建一个数据库(如下图) ![]() 非常多数据库的管理模式都差不多,比如cloudview和sqlserver、db2的控制中心使用方法基本相同。在弹出的菜单中输入你所要创建的数据库名。在这个例子里输入exampledb。按directory按钮选择目录在j2ee的安装目录下的cloudscape目录(如下图) ![]() 这时在面板的左面就会发现有了table、view等列表。如果下次启动时候左面的面板不见了,能选view菜单下的details only后再选一次。然后在table上点右键选择new子菜单下的table,新建好了一个表后能在右边的框的name旁边的框内修改表名,这里表名设成employee。在columns这一栏能按+号新增一个列。也能选择所要删除的列后按-号。 新建两个列,一个是employeeid、一个是name类型和字段长度如下图所示。选择data标签能新增数据,你能输入一些测试数据。 ![]() 鼠标右键选择左边窗口的keys在弹出的窗口里选择new??> key。在右边的窗口修改名字为employeekey,类型选择primary key,然后点选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 employee.com; import java.util.collection; import java.rmi.remoteexception; import javax.ejb.*; public interface employeehome extends javax.ejb.ejbhome { public employee create(string employeeid) throws duplicatekeyexception,javax.ejb.createexception,java.rmi.remoteexception; public employee findbyprimarykey(string employeeid ) throws objectnotfoundexception,finderexception,remoteexception; } 这个文件实现了home 接口。home接口必须遵守以下的规定:(1)类型必须为interface。(2)必须是public。(3)至少要声明一个create()或finder方法其中的一个。(4)create和finder方法必须包含java.rmi.remoteexception异常,finder方法必须另外包含java.ejb.finderexception异常。 客户端利用home interface 取得ejb object的远端对象参考(remote interface)什么是remote interface呢?看下来的程式 (2)employee.java package employee.com; import javax.ejb.ejbobject; import java.rmi.remoteexception; public interface employee extends javax.ejb.ejbobject { public string getname()throws java.rmi.remoteexception; } 这个文件实现了remote接口。remote接口必须遵守以下的规定:(1)类型必须为interface。(2)必须是public。(3)必须直接或间接继承java.ejb.ejbobject。(4)声明的方法必须和bean class里的方法相同。 (3) employeebean.java package employee.com; import java.util.*; import javax.ejb.*; public class employeebean implements entitybean{ public string employeeid; public string name; private entitycontext context; public void setentitycontext (entitycontext context){ this.context=context; } public void unsetentitycontext(){ context=null; } public string ejbcreate (string employeeid) throws duplicatekeyexception, createexception{ this.employeeid=employeeid; this.name=""; return null; } public void ejbpostcreate(string employeeid){ } public void setname(string name){ this.name=name; } public string getname(){ return name; } public void ejbactivate(){ employeeid=(string) context.getprimarykey(); } public void ejbpassivate(){ employeeid=null; name=null; } public void ejbremove(){ } public void ejbload(){ } public void ejbstore(){ } } 以上是个entitybean 和一个远程接口和一个home接口。 下面写一个javabean来调用entitybean里的方法 employeeout.java package employee.beans; import employee.com.*; import java.util.*; import javax.naming.*; import javax.rmi.portableremoteobject; import javax.ejb.*; import java.sql.*; public class employeeout{ private string id=""; private string name=""; employeehome employeehome=null; public employeeout() throws sqlexception { try{ context initial = new initialcontext(); object objref=initial.lookup("ejb/employeeentitybean"); employeehome=(employeehome)portableremoteobject.narrow(objref,employeehome.class); }catch (exception ex){ throw new sqlexception (ex.tostring()); } } public string getname(string id) throws exception { try { employee employee=employeehome.findbyprimarykey(id); name=employee.getname(); return name; } catch (objectnotfoundexception notfoundex){ return "notfound"; } catch (exception ex){ throw ex; } } } 在dos方式下,更换工作目录至first目录,然后执行下列的编译指令: javac -d . *.java (注d后面和*前面都有一个空格) 就能在first下生成一个com目录和一个beans目录里面有编译好了的.class文件。 接下来写一个jsp文件,将jsp文件放在first目录下,通过调用javabean里的方法来简洁调用entitybean里的方法。 login.jsp <%@page language="java" import ="java.sql.*,employee.beans.*" contenttype="text/html; charset=gb2312"%> <jsp:usebean id="employee" scope="page" class="employee.beans.employeeout"> </jsp:usebean> <% string name=""; string id=request.getparameter ("id"); if (id==null) { id=""; } if (!id.equals("")) { name=employee.getname(id); } %> <html> <body bgcolor="#cccccc"> <br><br><br><br> <form name="f1" action="login.jsp" method="post"> <table width=60% align="center"> <tr><td>编号:<input name=id value="" size=15></td> <td>姓名:<%=name%></td></tr> <tr><td><br><br></td></tr> <tr><td clospan=2 align="center"><input type="submit" name="查询姓名"></td></tr> </table> </form> </body> </html> 第四、设置datasource 部署j2ee 用文本编辑工具打开%j2ee_home%\config\resource.properties文件,找到jdbcdatasource.4.name=jdbc/db2 jdbcdatasource.4.url=jdbc:cloudscape:rmi:cloudscapedb;create=true 这行,在这行下面加上 jdbcdatasource.5.name=jdbc/exampledb jdbcdatasource.5.url=jdbc:cloudscape:rmi:exampledb;create=true 各个不同的j2ee版本的datasource 设置文件不相同,以前的版本有的是在default.properties文件下设置的。 接下来用j2ee自带的部署工具部署应用程式,在dos窗口在键入%j2ee_home%\bin\deploytool打开deploytool工具 选择file---->new---->application如图选择应用程式存放的地址和名字,名字以ear结尾。接下来输入显示名后按ok关闭小窗口。在左边的frame里能看到employeedisname的符号。(如下图) ![]() 用鼠标选上employeedisname,选择file---->new enterprise bean,第一个屏幕是一些介绍,直接按next,在第下面的屏幕如图,填写jar display name为employeejar。 ![]() 在contents面板点选旁边的edit按钮,在弹出的窗口中的starting directory里选择first目录,用鼠标按住ctrl键一起选择在下面的avaliable files里选择first下的employee下的com目录里的三个.class文件后,按add按钮。这时在最下面的contents of employeejar里就会出现这三个类文件。如下图 ![]() 按ok键关闭窗口后在contents面板里能看到employee这个标志。按下next 在bean type里选择entity,在enterprise bean class里选择你的bean class employeebean,在remote home interface里选择employeehome ,在remote interfaze里选择employee如图后, 按下next。 ![]() 在prisistence management里选择container managed prisistence (1.0),在fields to be persisted里把两个字段都选上,在primary key class里改成java.lang.string,在primary key field name里选上employeeid,如下图所示,按next。 ![]() 在接下来的界面都按next按钮一直到resource references 面板,点击右边的add按钮 在coded name 和下面的jndi name中填写jdbc/exampledb,如下图所示。按finish按钮结束。 ![]() 如下图选择窗口左边的employeebean,按下右侧entity tab页次的deployment settings按钮。 ![]() 在deployment settings窗口取消database table面板里的create table on deploy和delete table on undeploy。按下database settings在弹出的窗口里的database jndi name 里填写jdbc/exampledb后按ok返回。按下generate sql now 按钮,生成sql语句,成功的话系统会给出一个提示,这样就生成好了sql语句,选取左边的method里的各个方法能看到在右边sql query里出现相应的sql语句。(如下图) ![]() 将所有sql语句里的employeebeantable修改成employee后按下ok关闭窗口。 点选左边的employeedisname,在右边选择jndi name标签,在application下的jndi标签中填写ejb/employeeentitybean,这个名字要和employeeout程式里的initial.lookup("ejb/employeeentitybean")相同。(如下图) ![]() 接下来添加web component 选择file---->new web component,第一个窗口直接next,进入war file窗口,在war display name中输入一个显示名:employeeweb。(如下图) ![]() 点击content下的edit按钮,弹出edit contents of employeeweb的窗口里,选择first下employee下beans目录下的employeeout.class文件和first目录下的login.jsp文件后点击add按钮(如下图),按ok关闭窗口。 ![]() 在war file窗口里按next按钮 在choose component type 窗口里选择jsp按next到component general properites 选择jsp filename为login.jsp,web component name里输入employeeweb。后按finish(如下图) ![]() 点选左边窗口的employeedisname,选取右边的web context的面板。在context root里输入employee,这相当于虚拟目录名。选择tools----->deploy application,在introduction窗口选择object to deploy里为employedisname,target server为localhost。按next后检查jndi有没有写对,如果正确,按next。确认context root后按next。最后按finish开始部署应用程式。部署成功后出现如下图所示的信息。 ![]() 然后打开ie输入http://localhost:8000/employee/login.jsp 就能看到数据库的用户的姓名了。 注意事项:如果运行的时候提示未找到表或字段的话,请把sql语句里的表名和字段名改成大写的。因为cloudview建立好数据库后默认是大写的。 更多黑客技术 黑客软件 计算机技术 编程技术 网站技术 qq技术 IT新闻 黑客基地 请访问 灯火安全联盟 灯火黑客 www.hack8888.com/bbs | |
![]() | ![]() |