摘 要 在分析Java EE5.0规范最新推出的Web层框架JSF1.2和EJB层框架EJB3.0结构的基础上,提出了基于Java EE的Web框架与组件的集成方案,并设计该方案下的教学质量测评系统的体系结构。最后结合课堂测评子系统开发实例,探讨了JSP2.1+JSF1.2+EJB3.0开发模式在高校教学测评系统实现过程中的应用。
关键词 POJO;JSF1.2 ;EJB3.0;持久层;质量测评
1 引言
质量问题是高等教育发展的生命线。在高等教育竞争十分激烈的情况下,保证和提高教育质量是一所学校可持续发展的基本保障。因此要根据不同院校的特点,在正确的评估目的下,依据教学过程的特点、学校与学生对教师素质与发展的需要,开发一套合理的教学质量测评体系势在必行。
SUN公司最新推出的JSF1.2这个新的表现层框架和一套以注释为基础的EJB编程模型EJB3.0,并引入了新的Java Persistence标准,这是一套基于Java EE的基本架构[1]。以JSF1.2+EJB3.0的集成模式开发的教学质量测评系统,从用户界面表现层到业务逻辑控制层,再到数据对象持久层,提供了Java EE的一站式解决方案,为系统的实现、维护与移植提供了高度的灵活性和可靠性。两类框架的融合能很好的兼顾开发效率与维护成本,具有极高的实用价值,同时两者均为Web应用框架并且都遵循Servlet规范,也为二者的整合提供了基础。
2 Java EE的核心技术
2.1 JSF1.2
JavaServer Faces(JSF)是一项使用Java技术来快速构建Web应用程序的新的框架。
JSF主要包括两大方面的内容:一个API集合,用来表示用户接口组件、管理组件的状态、处理事件和验证输入、定义页面间的导航以及支持国际化;一个JSF的自定义标签库,用来在JSP页面中显示JSF接口。其中API集合是JSF的核心组成部分。
在Web开发方面,JSF基于事件及UI组件模型的开发方式颠覆了传统的web开发习惯,结合开发工具的支持,使其更接近于一个真正的MVC编程环境。使用JSF开发表现层现在看起来更象Swing编程,基于UI组件的模型能够把web界面定制的很多工作独立出来,厂商可以针对具体的目标定制更多更好用的组件。
2.2 EJB3.0
在EJB3.0里,任何类型的企业级Bean只是一个加了适当注释的简单Java对象(POJO),这就减少了在创建EJB时所需的类、接口、部署描述符的数量,注释可以用于定义bean的业务接口、O/R映射信息、资源引用信息。EJB 3.0通过用纯旧式Java对象(POJO)取代抽象bean类,用纯旧式Java接口(POJI)取代组件与主接口(Component & Home),也不必实现业务接口,简化了EJB的开发过程。
2.3 Java Persistence API 1.0( EJB3 Entity Bean)
在Java EE5中,开发了通用持久化规范Java Persistence API 1.0代替以前规范中的Entity Bean,其实就是完全重新定义了的Entity Bean规范(目前在很多场合中,由于历史原因仍然使用ejb3持久化来称呼这个规范)。JPA作为java中负责关系数据持久化的组件已经完全独立出来成为一个单独的规范,而不再属于EJB的范畴。JPA可以说是java持久化技术的一个集大成者,它吸取了Hibernate、JDO、TopLink等优秀技术和框架,将这几年发展成熟起来的基于POJO模型的O/R Mapping技术标准化,成为在java中通用的API。
2.4 JSF与EJB的集成
系统架构的实现方式有很多的选择,基于JSF1.2和EJB3.0框架的集成,使用MVC结构和POJO技术能够更容易开发松散耦合的组件。backing bean和EJB在功能上有一定程度的并列关系,只是backing bean适用于小型系统、EJB适用于大型系统的开发。
包含JSF标签的JSP页面是表示层,Faces Servlet提供了controller的功能,将JSF中的属于Bean角色的Backing Bean作为EJB与UI的接口,其作用是在真正的业务逻辑Bean及UI组件之间搭起桥梁。而另一面的EJB容器则成为MVC模式中的Model层,其中会话bean执行独立的、解除耦合的任务,譬如检查客户的信用记录;消息驱动bean用于接收异步JMS 消息,随后这些消息由应用程序来处理;实体bean已经升级为独立的持久层框架(即JPA1.0),应用O/R Mapping技术处理与数据库之间的业务,通过EntityManager对实体(Entity)的操作的定义包括持久化,查询,删除等。如图所示:
图1:JSF1.2和EJB3.0的集成模型
3 集成JSF1.2与EJB3.0的教学质量测评系统的体系结构
图2:系统的体系结构图
系统的体系结构如图2所示:系统主要包括登录模块,评教模块,系统管理模块,打分模块,留言板模块,模糊算法模块、数据库访问模块(DBVM)等。
用户在浏览器端经过验证登录后进入主界面,管理员对各种信息进行管理和维护,并制定学生打分时间段以及对提交的数据通过模型和持久层处理后提交给视图;学生可以修改一些个人基本信息、通过留言板模块与老师进行交流、在指定时间内对任课老师进行测评。管理员进入管理模块查看用户提交的数据,如果各种数据满足条件则调用模糊算法进行运算处理,将结果提交到数据库供用户查询和使用。
4 系统的开发与实现
下面以课堂教学测评子系统为例,对系统的开发过程进行说明,系统的开发工具使用NetBean5.5,配置环境使用glassfish(免费,开源的Java EE5应用服务器,支持EJB 3.0, JSF 1.2,Servlet 2.5, JSP2.1, Java Persistence 1.0)+ant服务模式,后台数据库采用Oracle10g,使用数据库库连接池技术,jndi名为campusjndi,JSP2.1+JSF1.2+EJB3.0总体开发模式。
4.1 数据库的设计
campus为全局数据库名,下设若干个表,包括学生信息表(student)、教师信息表(teacher)、课程信息表(course)、留言板信息表(lyb)、记分表(mark)等。
4.2 视图的设计
视图层是一些加入JSF标签的JSP文件,每个文件都加入下面三条语句以引入JSF自定义标签库,并且声明page属性:
%@ taglib uri="http://java.sun.com/jsf/html"prefix= "h"%
%@ taglib uri="http://java.sun.com/jsf/core"prefix= "f"%
%@ taglib uri="http://java.sun.com/jsp/jstl/core"prefix= "c"%
登陆界面login.jsp,主界面index.jsp,打分界面mark1.jsp、mark2.jsp(简写为1-2),学生界面student.jsp(1-5),教师界面teacher.jsp(1-5),管理员界面administer.jsp(1-3),留言板界面lyb.jsp(1-3),连接数据库conn.jsp,文件头head.jsp,文件尾tail.jsp等。
其中以login.jsp文件为例加以说明,部分代码
. . .
f:view
h:form id=“loginform”
h2Please enter your username and password/h2
Username :
h:inputText id=“input_username”value #{userBean.username} required=“true”/br
!一一把输人的信息放人模型(javabean)-一!
h:message for= “input_username”//br
. . .
/h:form
/f:view 注释部分说明了View是如何与Model和Controller关联的。
. . .
4.3 控制器的设计
需要配置Web应用程序的web.xml文件,加入以下内容:放置在campus“WEB-INF“web.xml:
servlet
servlet-name Faces Servlet /servlet-name
servlet-class javax.faces.webapp.FacesServlet /servlet-class
load-on-startup 1 /load-on-startup
/servlet
servlet-mapping
servlet-name Faces Servlet /servlet-name
url-pattern /login/* /url-pattern
/servlet-mapping
在本应用程序中,将该faces-config.xml用于bean管理和页面导航的配置,放置在campus“WEB-INF“faces-config. xml:
. . .
faces-config
navigation-rule
from-view-id/pages/index.jsp/from- view-id
navigation-case
from-outcomelogin/from-outcome
to-view-id/pages/student.jsp/to-view-id
/navigation-case
/navigation-rule
. . .
managed-bean
managed-bean-nameuser/managed-bean-name
managed-bean-class
campus“WEB-INF“classes“user.UserBean
/managed-bean-class
managed-bean-scopesession/managed-bean
-scope
/managed-bean
/faces-config
. . .
还有一些Servlet应用程序,如:用来验证用户登陆的StudentConfirm.java,TeachetConfirm.java,AdminConfirm.java等,处理页面数据传输的StudentSvlt.java,TeacherSvlt.jfava,AdminSvlt.java等。
4.4 模型设计
EJB 3.0会话bean类指定了系统的业务方法,可使用元数据注释来指定bean类型,即使用@Stateful和@Stateless来分别指定有状态或无状态。也可在一个会话bean中用一个业务接口来取代组件与主接口,因为业务接口是一个POJI,所以可用@Local和@Remote来指定其为本地或远程类型,而一个会话bean可同时实现本地与远程接口。可以看出下面的POJO取代了EJB以前版本中的home接口。
以打分模块为例,其中实现了两个业务方法add和getNumber,add方法就是对班级提交的测评分取平均值(供模糊算法使用),getNumber方法用来获取平均值。
这个例子主要有4个文件: StuCounter.java:业务接口;StuCounterBean.java:业务实现类; jndi.properties:jndi属性文件,提供访问jdni的基本配置属性(略);Build.xml:ant配置文件,用以编译、发布、测试、清除EJB(略)。
l StuCounter.java
. . .
@Remote
public interface StuCounter
{
public int add(int class[]);
public int getNumber();
}
l StuCounterBean.java
. . .
@Stateless
public class StuCounterBean implements Counter
{ . . .
StudentCounter sc=new StudentCounter();
private int average = 0;
public int add(int class[])
{
for(int i=0; iclass.lenth; i++)
{ average=(average+sc.class[i])/class.lenth; //u为指标数组 }
return average;
}
. . .
//得到当前的计数
public int getNumber()
{ return average; }
. . .
}
4.5 持久层的设计
在EJB3.0中开发实体Bean非常简单,同开发一般的java bean一样,只需做少量的注释。一个实体bean不需要实现Home接口或者Remote、Local接口。实体Bean通过EntityManager产生、查找、和持久层结合、从持久层收回等操作。
下面的例子主要实现了管理学生提交测评分数的功能。Student是一个实体Bean,管理学生的基本信息(姓名和各课分数),其中学生提交的测评分数又是一个实体Bean。StuCounterBean是一个无状态的会话Bean,用来调用实体Bean。Student.java:实体Bean;Counter.java:实体Bean;StudentBean.java:会话Bean的实现类jndi.properties:jndi属性文件,提供访问jdni的基本配置属性(略);Build.xml:ant 配置文件,用以编译、发布、测试、清除EJB(略)。
l Student.java
. . .
@Entity
@Table(name = "STUDENT")
public class Student implements Serializable
{ private EntityManagerFactory emf;
private EntityManager em;
private int id; //主键
private String name; //学生名
private Counter counter; //学生的分数
@Id(generate = GeneratorType.AUTO) //主键自动产生
public int getId()
{ return id; }
public void setId(int id)
{ this.id = id; }
void saveCounter(Counter counter) {
EntityTransaction tx=em.getTransaction();
tx.begin();
em.persist(counter);
tx.commit();
}
User getUser(String s) {
return (User)em.find(User.class,s);
}
. . .
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "student_id")
. . .
5 结束语
通过使用规范里UI组件、注释和POJO等新技术,采用JSF1.2与EJB3.0集成的方法减轻了开发人员进行底层开发的工作量,而且开发和设计过程层次分明、结构简单。依据本文提出的JSF1.2、EJB3.0框架和新的持久层规范JPA集成的设计思路,成功的开发了教学质量测评系统。这套基于Java EE技术架构的解决方案从运行性能来说,支持大并发量的用户访问,具有较快的响碰速度;从维护性能来说,具有良好的可变更性、可移植性和可重用性。
参考文献
[1] JCP Expert Group.JSR-244(java EE5.0)[S/OL] . http://jcp.org/en/jsr/detail?id=244
JCP Expert Group.JSR-252(JSF1.2)[S/OL] .
JCP Expert Group.JSR-220(EJB3.0)[S/OL] .
相关文章
学术参考网 · 手机版
https://m.lw881.com/