一、Java EE应用的分层模型
不管是经典的Java EE架构,还是本书所介绍的轻量级Java EE架构,大致上都可分为如下几层。
1.Domain Object(领域对象)层: 由系列的POJO(Plan Old Java Object,普通的、传统的java对象)组成,一般包含了自身所需要实现的业务逻辑方法;
领域对象组件,领域对象抽象了系统的对象模型,一般存储在数据库里。
2.DAO(Data Access Object,数据库访问对象)层:由系列的DAO组件组成,实现对数据库的CRUD等原子操作;
Dao组件,被称为数据访问对象。为了将业务逻辑组件的实现与DAO组件的实现分离,应为每个DAO组件提供接口,业务逻辑组件面向DAO接口编程。
3.业务逻辑层:由业务逻辑对象组成,实现了系统所需要的业务逻辑方法。可能仅仅用于暴露Domain Object对象所实现的业务逻辑方法,或可能依赖DAO组件实现的业务逻辑方法;
业务逻辑组件,是系统的核心组件,实现系统的业务逻辑。通常,一个业务逻辑方法对应一次用户操作。一个业务逻辑方法应该是一个整体的,因此要求增加事务性,但不能对数据库进行访问。
4.控制器层:用于拦截用户请求,并调用业务逻辑组件的业务逻辑方法,处理用户请求,并根据处理结果转发到不同的表现曾组件;
5.表现层:负责收集用户请求,并将显示处理结果。
二、Java EE应用的组件
Java EE应用大致包括如下几类组件。
1、表现层组件:主要负责收集用户输入数据,或者向客户显示系统状态。常用的表现层技术有JSP、Velocity、FreeMaker和Tapestry等,或者使用普通的应用程序充当表现层组件,甚至可以是小型智能设备。
2、控制器组件:对于Java EE的MVC框架,框架提供一个前端核心控制器,而核心控制器负责拦截用户请求,并将请求转发给用户实现的控制器组件。而这些用户实现的控制器负责处理调用业务逻辑方法,处理用户请求。
3、业务逻辑组件:是系统的核心组件,实现系统的业务逻辑。通常,一个业务逻辑方法对应一次用户操作。一个业务逻辑方法应该是一个整体。因此对业务逻辑方法增加事务性。业务逻辑方法仅仅负责业务逻辑,不应该进行数据库访问。因此,不应该出现原始的Hibernate、JDBC等API。
4、DAO组件:Data Access Object,也被称为数据访问对象。这个类型的对象比较缺乏变化,每个DAO组件都提供Domain Object对象基本的创建、查询、更新和删除等操作,这些操作对应于数据表的CRUD等操作。
5、领域对象组件:领域对象(Domain Object)抽象了系统的对象模型。通常,它们的状态都必须保存在数据库里。因此,每个领域对象通常对应于一个或多个数据表,领域对象通常需要提供对数据记录访问方式。
三、常用的Java EE服务器
何为应用服务器呢?它主要为应用程序提供运行环境,为组件提供服务。想进一步了解,可以查看我的博客:何为容器?
Java 的应用服务器很多,从功能上分为两类: WEB 应用服务器 和 Java EE 应用服务器 。相对来说 Java EE 服务器的功能更加强大。
下面简单介绍三个应用服务器。
Apache Tomcat
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
优点:
1、免费的开源代码
2、轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用
3、占用的系统资源小,启动快
4、扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能
目前最新版本是8.0。
Jetty
Jetty 是一个开源的WEB容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行的Java应用提供网络和web连接。
优点:
1、免费的开源代码
2、轻量级,运行速度快。
3、易用
默认配置可以满足大部分的需求;将 Jetty 嵌入到应用程序当中只需要非常少的代码;
4、可扩展
Jetty 设计了非常良好的接口,用户可以非常方便地对 Jetty 的某些实现进行修改,使得 Jetty 适用于特殊的应用程序的需求。
5、易嵌入
Jetty 设计之初就是作为一个优秀的组件来设计的,这也就意味着 Jetty 可以非常容易的嵌入到应用程序当中。从某种程度上,你也可以把 Jetty 理解为一个嵌入式的Web服务器。
目前最新版本是:9.1.4
Resin: 目前最快的JSP、Servlet运行平台,支持EJB。个人学习是免费的。
此外,
Java EE 服务器
TongWeb 、BES Application Server 、 Apusic Application Server 、 IBM Websphere 、Sun Application Server 、Oracle 的 Oracle9i/AS 、Sun Java System Application Server 、Bea Weblogic 、JBoss、开源GlassFish。
JBoss
JBoss是全世界开发者共同努力的成果,一个基于J2EE的开放源代码的应用服务器。因为JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用它,而不用支付费用。2006年,Jboss公司被Redhat公司收购。JBoss 是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3.0的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。
另外,JBoss在J2EE应用服务器领域已成为发展最为迅速的应用服务器.在市场占有率和服务满意度上取得了巨大的成功,丝毫不逊色于其它的非开源竞争对手,如WebSPhere、WebLogic、Application Server.
1、标准的开源J2EE容器
2、性能好,执行效率高
3、支持集群,理论上无最大访问量限制一说。
4、可伸缩性强
可伸缩性应该是架构选择的主要标准,所谓可伸缩性,只在小型系统、一台服务器情况下,我的系统也可以良好运转,多台服务器扩展后,我的系统只需通过增加硬件就可以实现性能扩展,无需修改太多软件。
5、支持热部署
目前JBOSS的最新版本号为7.1。
BEA WebLogic (收费)
WebLogic是Oracle的主要产品之一,是商业市场上主要的Java(J2EE)应用服务器软件(application server)之一,是世界上第一个成功商业化的J2EE应用服务器。它是一套基于JAVA功能强大的电子商务套件,提供了许多功能强大的中间件以方便编程人员编写的JSP、SERVLET 等电子商务应用,可以为企业提供一个完整的商务应用解决方案。
优点:
1、标准
对业内多种标准的全面支持,使Web应用系统的实施更为简单。
2、可扩展性
WebLogic Server以其高扩展的架构体系闻名于业内,包括客户机连接的共享、资源pooling以及动态网页和EJB组件群集。
3、快速开发
凭借对EJB和JSP的支持,以及BEA WebLogic Server 的Servlet组件架 构体系,可加速投放市场速度。
4、更趋灵活
BEA WebLogic Server的特点是与领先数据库、操作系统和Web服务器紧密集成。
5、可靠性
其容错、系统管理和安全性能已经在全球数以千记的关键任务环境中得以验证。
目前WEBLOGIC最新版本号为:12c
IBM WebSphere (收费)
WebSphere Application Server 是一种功能完善、开放的Web应用程序服务器,是IBM电子商务计划的核心部分。WebSphere 是随需应变的电子商务时代的最主要的软件平台。使用它,你可以开发、部署和整合新一代的电子商务应用,如B2B电子商务,并支持从简单的网页内容发布到企业级事务处理的商业应用。
目前WEBSPHERE最新版本号为:8.5.5
BEA公司的Weblogic服务器和IBM的Websphere在J2EE应用服务器市场中占据绝对主导地位,都是商用产品。而JBoss和Tomcat算是开源的应用服务器界的两大明星。个人愚见,如果开发的是大型的、开放的、需要安全级别较高的系统,最好选用WebLogic 或Websphere等商用应用服务器,如果你开发的系统是分布式的,而且仅仅在公司内部使用,那么你可以选择JBoss。当然,大家都知道Tomcat是一个web 应用服务器,如果你开发的系统较小型,不涉及分布式等,那Tomcat将是你不错的选择。
对于轻量级的Java EE而言,没有必要使用Java EE服务器,使用简单的Web容器已经完全能胜任。
四、轻量级Java EE应用相关技术
轻量级Java EE应用以传统的JSP作为表现层技术,以系列开源框架作为MVC层、中间层、持久层解决方案,并将这些开源框架有机地组合在一起,使得Java EE应用具有高度的可扩展性、可维护性。
1、JSP、Servlet3.0和JavaBean
2、Struts2.2
3、Hibernate3.6
4、Spring3.0