JBuilder+WebLogic实现课本打点系统
副标题#e#
摘 要 这篇文章研究了在校园网情况下公道操作原有异构数据库成立相关的部分打点系统的要领,先容了基于WebLogic应用处事器举办课本综合打点系统的设计和实现的进程。
要害词 数据库;J2EE; EJB;WebLogic
引 言
跟着科学技能的不绝提高,计较机网络的成果已为人们深刻认识,它已进入人类社会的各个规模并发挥着越来越重要的浸染。同样种种学校的校园网也运行了多个年初,但尚有不少学校的打点系统缺少统一筹划,单机运行的信息孤岛还为数不少,所以有须要进一步研究在校园网情况下公道操作原有异构数据库成立相关部分的打点系统的要领。
在某高校中教务和课本客栈都已经有了各自独立的数据库打点系统,但课本选订等事情都是人工举办,事恋人员的劳动量,效率很低。校园网情况下操作现有的资源成立课本综合打点系统之须要性是不问可知的!本文先容基于WebLogic应用处事器举办课本综合打点系统的设计和实现的进程。
系统布局
系统包括课本选取、查询、修改、订购子系统,系统所需的教务信息和课本库存信息来自网上原有数据库,如图1所示。个中,教研室通过B/S模式可以举办课本选取、查询、修改等事情,课本打点在课本委员会通过C/S模式当地完成,主要是课本订购及系统打点事情。
课本综合打点系统的设计与实现
1、数据库设计
个中数据库系统中包括教务处数据库(旧)、客栈数据库(旧)和课本委员会数据库(新),充实操作了原有的资源到达共享数据的目标,用到的表有教务处的课程布置表、专业人数表,客栈的库存量表。
教务处专业人数表:
列名 | 数据范例 | 长度 | 答允为空 |
id | Bigint | 8 | 否 |
num | int | 4 | 是 |
教务处课程布置表:
列名 | 数据范例 | 长度 | 答允为空 |
id | Bigint | 8 | 否 |
cid | Int | 4 | 否 |
cname | Varchar | 50 | 是 |
teachunit | Varchar | 50 | 是 |
sname | Varchar | 50 | 是 |
客栈库存量表:
列名 | 数据范例 | 长度 | 答允为空 |
bid | Int | 4 | 否 |
bname | Varchar | 50 | 是 |
bnote | Varchar | 50 | 是 |
bauthor | Varchar | 50 | 是 |
bpublisher | Varchar | 50 | 是 |
bprice | Float | 8 | 是 |
bnum | Int | 4 | 是 |
#p#副标题#e#
课本委员会对课本的选定、订购举办统一打点,它拥有一个当地数据库即课本委员会数据库,在这个新进的数据库中有三张表,一张用于课本选定后的数据的存储,一张用于订单的内容的存储,第三张是教研室登岸暗码的信息存储。
选课本表:
列名 | 数据范例 | 长度 | 答允为空 |
cid | Int | 4 | 否 |
bid | Int | 4 | 是 |
cname | Varchar | 50 | 是 |
bname | Varchar | 50 | 是 |
teachunit | Varchar | 50 | 是 |
#p#分页标题#e#
订单表:
列名 | 数据范例 | 长度 | 答允为空 |
id | Bigint | 8 | 否 |
bname | Varchar | 50 | 是 |
numneed | Int | 4 | 是 |
暗码表:
列名 | 数据范例 | 长度 | 答允为空 |
teachunit | Varchar | 50 | 否 |
pw | Char | 10 | 是 |
它们都是J2EE中的底层布局,WebLogic应用处事器层把底层数据库毗连起来需要设置数据池和数据源。
2、数据池和数据源设置
由于数据库系统中有三个数据库,所以举办WebLogic毗连池设置时需要设置三个毗连池,这里进入WebLogic的节制台页面,以设置的第一个毗连池,教务数据库毗连池(如图2)为例。个中最为要害的是在URL和Driver中运用对应数据库类此外驱动,并填写要会见的数据库名称,数据库处事器的地点和端口。
图2 毗连池设置
客栈数据库的URL为:“jdbc:oracle:CK:@localhost:1521”
Driver为:“oracle.jdbc.drive.OracleDriver”
课本委员会的URL为:“jdbc:weblogic:mssqlserver4:[email protected]:1057”
Driver为:“weblogic.jdbc.mssqlserver4.Driver”
然后设置数据源,按照数据池名,界说数据源的JNDI名。这样就把漫衍在差异地区的三个数据库在WebLogic中毗连起来,并乐成屏蔽了数据库软件的种别、版本、地区等不同,个中教务处数据源设置如图3:
图3 数据源设置
3、成立实体EJB
系统要对三个异地数据库共六张表,举办操纵,因此要逐个引进并成立相应的实体Bean,这里将三个数据库中本系统要用到的的表都引进到同一个EJB Module中。
在JBuilder中生成的实体Bean中会自动识别并生成对应表的名称,数据段的名称、属性,按照措施员配置的当地或长途的home接口文件,封装了操纵数据库的根基行动,如通过主键查找记录的成果,在查找到的记录中获得和配置数据项的函数等,为了后头子系统的需要还要添加一些函数:
在课程布置表Entity Bean中添加两个Finder:
一个finder名为findall,成果是获得教务数据库课程布置表的所有信息。将要在往选课本表中写入所有课程信息时利用。
另一个名为findbycid,成果是按照输入的课程信息找到选了这些课程的专业。
在选课本表中添加两个Finder:
一个名为findall,为了获得所有的选课本表的信息。
另一个名为findbybid,成果是获得输入课本号所对应的专业好。
在Baobiao中添加一个Finder为 findall,获得所有订单内外的信息。
这样就完成了本系统实体bean的成立。
4、成立会话EJB
利用会话bean 可对某一客户的处理惩罚或节制工具建模,对事情流、任务和打点勾当等建模,协调多个实体bean,节制实体bean之间的交互将业务应用逻辑从客户端转移随处事器端,本系统思量到数据不是出格复杂。仅用了具有长途接口的一个无状态会话EJB(connectEJBs)完成所有与实体EJB打交道的任务。
为了系统成果的需要,在个中添加了6个私有变量,6个公有变量,初始化后用以会见六张表对应的实体EJB。初始化代码为:
try{
Context context=new InitialContext();
Object ref=context.lookup("java:/comp/env/Coursearrangement");
crthome=(CoursearrangementHome) ref;
ref=context.lookup("java:/comp/env/Xk");
xkhome=(XkHome) ref;
ref=context.lookup("java:/comp/env/Tp");
tphome=(TpHome) ref;
ref=context.lookup("java:/comp/env/Number");
numberhome=(NumberHome) ref;
ref=context.lookup("java:/comp/env/Ck");
ckhome=(CkHome) ref;
ref=context.lookup("java:/comp/env/Baobiao");
baobiaohome=(BaobiaoHome) ref;
}catch(Exception e){e.printStackTrace();}
这样就能通过会话EJB的长途接口会见实体EJB里自动生成的和本身添加的要领或函数了,前提是这个要领或函数包括在实体EJB的home接口里。
#p#分页标题#e#
还添加了一些当地公有函数和多个长途公有函数,用来修改或会见实体EJB并作劈头的处理惩罚。增加的函数必需在JBuilder中先右击代表会话Bean的图形添加要领(add method),配置各项参数后方可右击会话Bean选择View Bean Sourse菜单,进入代码区编辑要领主体,不然工程将发生编译错误。这里提供了整个系统所需的与数据库打交道的函数,这些接口在后文中都有用到。
3个当地公有函数:为了办理不能持续在同一个函数里多次写入信息而独立出来的函数
①public void writecidcname(Integer cid, String cname, String teachunit)
这是往选课本表写课程信息。
②public void writebook(Integer bid, String bname)
这时保课本信息写入订单表。
③public void writealltp(String unit, String pw)
同理,为了往暗码内外写入暗码信息而编写。
长途公有函数:以下的函数是订票据系统要用到的接口
⑴public java.util.Collection couinfo()
这个函数是认真从教务处获得开设课程的信息。返回值是Collection工具。
⑵public boolean writexk(java.util.Collection rst)
这个函数在运行订票据系统自动挪用。它认真在初始化系统时将从教务处获得的课程信息写进选课本表中,担保既使新增了新的教研室也能及时地得到。它的参数就是函数zhuanyi()的返回值,在措施主体挪用了当地函数①。
⑶public java.util.Collection selectunit()
这个函数是为了从选课本表中获得所有开设了课程的教研室的名称。既为了在B/S的登录界面上获得教研室名下拉框的需要,又为了在暗码表中获得教研室名而编写。留意这里有反复信息,需要再挪用它的函数中过滤掉。
⑷public boolean writetp(Collection rst, String pw)
这是为了成立教研室暗码表而编写,在函数⑵后挪用,当表中没有教研室或是有了新的教研室的时候,它会自动加到暗码表中并分派原始暗码。是教员能登岸再现的课本录入子系统。
⑸public boolean reflushbaobiao()
这是C/S界面用户刷新订单信息时,将选课本表中的已经选了的课本信息写进订单表中。它在得到相应课本应定的数量之前挪用。
●这以下是为了得到订单中所需要订购的书的数目而写的函数,因为不能在一个函数中操纵多个数据库,所以用了下面多个函数以实现。
获得订单内外所有的课本号:
public Collection readbaobiaoforgetnum()
从选课本表中获得已经选好的讲义对应的课程号:
public Integer readxkforgetnum(Integer bid)
再从教务处课程布置表中获得开了这个课程号所代表的课程的专业,大概不止一个:
public Collection readcouforgetnum(Integer cid)
然后从教务处人数表中查到这些专业的人数:
public Integer readnumforgetnum(Long id)
再找出客栈里这本书的库存量,假如所需数量大于库存量,就要在订单中显示出定购量:
public Integer readckforgetnum(Integer bid, int numall)
○●○此以下的函数为教员在线课本选取和相关单元查询要用到的函数。
⑴public String login(String unit)
这在用户登岸时系统查抄暗码是否匹配时利用,就是按照用户名查询到相应的暗码并返回。在用户修改暗码时验证是否为登岸用户也用到了它。
⑵public String login(String unit)
这个函数从名字得知,是用户登岸时系统查抄暗码是否匹配时利用的,就是按照用户名查询到相应的暗码并返回。在用户修改暗码时验证是否为登岸用户也用到了它。
⑶public boolean writein(Integer cid, Integer bid, String name)
这个函数是用户填写了课程信息后将这些信息写入到相应的数据库记录中。
⑷public boolean setpw(String unit, String pw)
此函数在用户修改暗码时利用的。
⑸public boolean isbooksame(Integer bid)
此函数是用户填写课本信息是否反复输入,或是输入了此外课程已经选取的课本时判定用的,防备数据库主键反复插入。
⑹public Object getbidname(Integer cid)
这是为了教研室查询已选课本筹备的接口,为选取课本提供参考。
5、订票据系统
#p#分页标题#e#
为了实现课本委员会对整个课本选取系统的节制,获得课本订单报表,本系统在 C/S端到达上述目标。它是不宣布的,是课本委员会的当地客户端,个中的订单界面如图4。
图4 订票据系统中的订单界面
系统启动时,将自动从教务处数据库取得将要开设的课程信息,添入课本委员会数据库的选课本表中,空出与之对应的课本信息期待教研室教员理用B/S端加进去。焦点代码:
conhome= (connectEJBsHome) PortableRemoteObject.narrow(ref, connectEJBsHome.class);
try
{
con=conhome.create();
if(con.writexk(con.zhuanyi()))
{
System.err.print("你已乐成转移了数据!");
}
}catch(Exception ex)
{
ex.printStackTrace();
System.err.print("数据转移失败!");
}
它获得会话Bean的home接口,将会话Bean的要领couinfo()获得的课程信息再挪用writexk()写入到选课本表中,期待教研室选取课本,然后为教研室分派原始暗码888888。焦点代码:
try
{
con=conhome.create();
if(con.writetp(con.zhuanyi(),”888888”)
{
System.err.print("暗码分派乐成!");
}
}catch(Exception ex)
{
ex.printStackTrace();
System.err.print("暗码分派失败!");
}
当按下“刷新订单”按钮之后,下面的列表框将泛起需要订购的课本的信息,包罗书名和书的ISBN号和订购数量。实现代码为:
conhome= (connectEJBsHome) PortableRemoteObject.narrow(ref, connectEJBsHome.class);
try {
con=conhome.create();
if(con.writebaobiao())
{
System.err.print("获得报表数据!");
if(this.getnum())
{
System.err.print("取到了书的数目!");
}
}
}
catch(Exception ex)
{
ex.printStackTrace();
System.err.print("生成报表失败!");
}
个中writebaobiao()将用到会话EJB中的专门为获得订购书本数目而写的一系列函数,这里不赘述。
6、课本选取系统
课本选取是一个在线系统。焦点部门全部用JSP建造,借助Dreamweavre4开拓JSP将会十分便利。本系统没选择applet做界面是思量到安详性需要,applet需要将措施下再到客户端执行,它实际上是一种可用网页打开的C/S,粉碎了三层布局瘦客户端的利益,但在实现不涉及安详性的部门可以思量利用。本系统的选取界面如图5所示。
图5课本选取系统的选取界面
这里共有五张JSP页面是在线课本选取系统的主要部门。一些jsp页面直接利用同一个JavaBean,加强了代码的复用性,如登岸页面与暗码修改页面同用pwbean的Javaean。为了使大大都逻辑在会话EJB中实现,JavaBean作为JSP的一部门要短小干练。login.jsp为登录界面,可自动得到教务地方有教研室名称,通过课本委员会分派的暗码登岸select.jsp,选择课本。到了select.jsp后,网页自动得到登岸教研室所认真的课程,这里给了两个文本框,让教员输入他认为符合的书本的统一编号和名称,虽然这里是以编号为独一标识的,乐成后会呈现乐成页面success.jsp。在这里尚有教研室可以修改暗码的导航按钮, 转换到修改暗码的界面pwchange.jsp,这里需要输入本来的登岸暗码,输入两次新暗码才气真正修改暗码。修改乐成后会呈现乐成界面。暗码在课本委员会数据库里,在这里完完全全浮现了JSP的安详性。
至此,焦点成果已实现,其他单元的查询欣赏等成果略去。
操作JBuilder开拓系统的长处是很多成果由系统自动完成。上述事情完成后,只需工程部门打包成EAR(Enterprise Archive)。在JBuilder中将Tools->Enterprise Deploy设置长处事器地点、端口,用户名暗码,系统自动将web应用陈设信息写进陈设描写文件web.xml中,要做的只是右击工程宣布即可。