`
tiankefeng0520
  • 浏览: 143033 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

理解J2EE组件和容器(转)

阅读更多
转自:http://longtangwan.iteye.com/blog/806797

  EJB容器,是用来管理组件行为的一技术的发展是顺应世界变化的趋势的,从C/S 过渡到B/S模式,从客户端的角度考虑企业级应用或者说电子商务领域不在关心客户端维护问题,这个任务已经交给了任何一台PC都会有的浏览器去维护;从服务器端的角度考虑,以往C/S中的TCP/IP协议实现载体ServerSocket被Web Server Container所取代,例如大家都很熟悉的Tomcat、JBoss、WebLogic等等。总之一切的转变都是为了使得Java技术能更好的为人类生产生活所服务。

有人会问,直接去学J2ee跳过J2se行否?笔者是肯定不赞成的,实际上确实有人走这条路,但笔者自身体会是正是由于J2se的基础很牢固,才会导致在J2ee学习的道路上顺风顺水,知识点上不会有什么迷惑的地方。举个简单的例子吧:

笔者曾经跟大学同学讨论下面这两种写法的区别:
ArrayList list = new ArrayList(); //笔者不说反对,但至少不赞成
List list = new ArrayList(); //笔者支持
曾经笔者跟同学争论了几个小时,他非说第一种写法更科学,第二种完全没有必要。我无法完全说服他,但笔者认为良好的习惯和意识是任何时候都应该针对接口编程,以达到解耦合和可扩展性的目的。下面就以接口开始进入J2ee的世界吧:

1. J2EE与接口

每一个版本的J2EE都对应着一个确定版本的 JDK,J2ee1.4对应Jdk1.4,现在比较新的是JDK5.0,自然也会有J2EE 5.0。其实笔者一直在用的是J2EE1.4,不过没什么关系,大家可以下任何一个版本的J2ee api来稍微浏览一下。笔者想先声明一个概念,J2ee也是源自Java,所以底层的操作依然调用到很多J2se的库,所以才建议大家先牢牢掌握J2se 的主流技术。

J2ee api有一个特点,大家比较熟悉的几个包java.jms、javax.servlet.http、javax.ejb等都以interface居多,实现类较少。其实大家真正在用的时候百分之六十以上都在反复的查着javax.servlet.http这个包下面几个实现类的api函数,其他的包很少问津。笔者建议在学习一种技术之前,对整体的框架有一个了解是很有必要的,J2ee旨在通过interface的声明来规范实现的行为,任何第三方的厂商想要提供自己品牌的实现前提也是遵循这些接口定义的规则。如果在从前J2se学习的道路上对接口的理解很好的话,这里的体会将是非常深刻的,举个简单的例子:

public interface Mp3{
  public void play();
  public void record(); 
  public void stop(); 
}


如果我定义这个简单的接口,发布出去,规定任何第三方的公司想推出自己的名字为Mp3的产品都必须实现这个接口,也就是至少提供接口中方法的具体实现。这个意义已经远远不止是面向对象的多态了,只有厂商遵循 J2ee的接口定义,世界上的J2ee程序员才能针对统一的接口进行程序设计,最终不用改变代码只是因为使用了不同厂商的实现类而有不同的特性罢了,本质上说,无论哪一种厂商实现都完成了职责范围内的工作。这个就是笔者想一直强调的,针对接口编程的思想。

接口到底有什么好处呢?我们这样设想,现在有 AppleMp3、SonyMp3、SamsungMp3都实现了这个Mp3的接口,于是都有了play、 record、stop这三个功能。我们将Mp3产品座位一个组件的时候就不需要知道它的具体实现,只要看到接口定义知道这个对象有3个功能就可以使用了。那么类似下面这样的业务就完全可以在任何时间从3个品牌扩展到任意个品牌,开个玩笑的说,项目经理高高在上的写完10个接口里的方法声明,然后就丢给手下的程序员去写里面的细节,由于接口已经统一(即每个方法传入和传出的格式已经统一),经理只需关注全局的业务就可以天天端杯咖啡走来走去了,^_^:

public Mp3 create();
public void copy(Mp3 mp3);
public Mp3 getMp3();



最后用一个简单的例子说明接口:一个5号电池的手电筒,可以装入任何牌子的5号电池,只要它符合5号电池的规范,装入之后任何看不到是什么牌子,只能感受到手电筒在完成它的功能。那么生产手电筒的厂商和生产5号电池的厂商就可以完全解除依赖关系,可以各自自由开发自己的产品,因为它们都遵守5号电池应有的形状、正负极位置等约定。这下大家能对接口多一点体会了么?

2. EJB组件和EJB容器

针对接口是笔者特意强调的 J2ee学习之路必备的思想,另外一个就是比较常规的组件和容器的概念了。很多教材和专业网站都说J2EE的核心是一组规范与指南,强调J2ee的核心概念就是组件+容器,这确实是无可厚非的。随着越来越多的J2ee框架出现,相应的每种框架都一般有与之对应的容器。

EJB容器,是用来管理组件行为的一个集合工具,组件的行为包括与外部环境的交互、组件的生命周期、组件之间的合作依赖关系等等。J2ee包含的容器种类大约有 Web容器、Application Client容器、EJB容器、Applet客户端容器等。但在笔者看来,现在容器的概念变得有点模糊了,大家耳熟能详是那些功能强大的开源框架,比如 Hibernate、Struts2、Spring、JSF等,其中Hibernate就基于JDBC的基础封装了对事务和会话的管理,大大方便了对数据库操作的繁琐代码,从这个意义上来说它已经接近容器的概念了,EJB的实体Bean也逐渐被以Hibernate为代表的持久化框架所取代。

EJB组件,本意是指可以重用的代码单元,一般代表着一个或者一组可以独立出来的功能模块,在J2ee中组件的种类有很多种,比较常见的是EJB组件、DAO组件、客户端组件或者应用程序组件等,它们有个共同特点是分别会打包成.war,.jar,.jar,.ear,每个组件由特定格式的xml描述符文件进行描述,而且服务器端的组件都需要被部署到应用服务器上面才能够被使用。
稍微理解完组件和容器,还有一个重要的概念就是分层模型,最著名的当然是MVC三层模型。在一个大的工程或项目中,为了让前台和后台各个模块的编程人员能够同时进行工作提高开发效率,最重要的就是实现层与层之间的耦合关系,许多分层模型的宗旨和开源框架所追求的也就是这样的效果。在笔者看来,一个完整的 Web项目大概有以下几个层次:

a) 表示层(Jsp、Html、Javascript、Ajax、Flash等等技术对其支持)
b) 控制层(Struts、JSF、WebWork等等框架在基于Servlet的基础上支持,负责把具体的请求数据(有时卸载重新装载)导向适合处理它的模型层对象)
c) 模型层(笔者认为目前最好的框架是Spring,实质就是处理表示层经由控制层转发过来的数据,包含着大量的业务逻辑)
d) 数据层(Hibernate、JDBC、EJB等,由模型层处理完了持久化到数据库中)

当然,这仅仅是笔者个人的观点,仅仅是供大家学习做一个参考,如果要实现这些层之间的完全分离,那么一个大的工程,可以仅仅通过增加人手就来完成任务。虽然《人月神话》中已经很明确的阐述了增加人手并不能是效率增加,很大程度上是因为彼此做的工作有顺序上的依赖关系或者说难度和工作量上的巨大差距。当然理想状态在真实世界中是不可能达到的,但我们永远应该朝着这个方向去不断努力。最开始所提倡的针对接口来编程,哪怕是小小的细节,写一条List list= = new ArrayList()语句也能体现着处处皆使用接口的思想在里面。Anyway,这只是个开篇,笔者会就自己用过的J2ee技术和框架再细化谈一些经验。
分享到:
评论

相关推荐

    J2EE中文版指南 CHM格式 带全文检索

    J2EE组件 15 J2EE客户端 15 网络浏览器 15 小程序 15 应用客户端 15 JavaBean组件结构 15 网络组件 15 业务逻辑组件 16 二.J2EE容器 16 容器服务 16 三.打包J2EE组件 18 四.开发者角色 18 J2EE产品提供商 18 工具...

    Java理论与实践:理解JTS―平衡安全性和性能

    本文定义了什么是事务,列举了事务的基本特性,并探讨了Java事务服务和J2EE容器如何合作为事务提供对 J2EE 组件的透明支持。在本文中,我们将讨论事务的划分和隔离这个主题。为EJB组件定义事务划分和隔离属性的职责...

    JBoss管理与开发核心技术:第三版

    其中,需要开发者注意的是,本书不是介绍J2EE和如何应用J2EE的,而是关注JBoss服务器架构的内部细节及具体J2EE容器实现的配置和扩展。通过阅读本书,JBoss开发者可以深入理解标准组件的架构、集成,以及扩 资源太大...

    Java理论和实践:理解JTS——幕后魔术

    幸运的是,Java 事务服务和 J2EE 容器自动为您做了大量的事务管理工作,这样您就不必将事务意识直接集成到组件代码中。结果简直是一种魔术―通过遵守几条简单的规则,J2EE 应用程序就可以自动获得事务性语义,只需...

    Head First Servlet JSP (清晰中文版).part1,另有part2

    现在是你学习较新版本(J2EE1.4)Servlets和JSP的时候了,本书会为你的学习加速。你将会熟练掌握Servlets和JSP,并顺利通过Sun的Web组件开发人员认证(SCWCD)1.4考试。也许你并不在意考试,但会在下一个项目中运用...

    深入浅出Servlets and JSP(第二版).rar

    现在是你学习较新版本(J2EE1.4)Servlets和JSP的时候了,《深入浅出Servlets and JSP》会为你的学习加速。你将会熟练掌握Servlets和JSP,并顺利通过Sun的Web组件开发人员认证(SCWCD)1.4考试。也许你并不在意考试...

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    Seam - 语境相关的组件[满江红20071230]............................................................................................................................ 1 Java EE 框架...........................

    Spring面试题

    Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,如图 1 所示。 组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下: ☆...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    4.1 JDBC和容器管理的数据源 179 4.1.1 JDBC概述 179 4.1.2 使用JDBC执行数据库访问 180 4.1.3 使用WebLogic服务器管理的 数据源 182 4.1.4 使用JBoss服务器管理的数据源 187 4.2 事务和JTA 191 4.2.1 事务的基本...

    JAVA上百实例源码以及开源项目源代码

     在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-...

    JAVA上百实例源码以及开源项目

     在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-...

    Java.Web整合开发王者归来01

    全面系统分析EJB容器组件,深入整合JSP+Servlet+Struts+Hibernate+Spring。 ①内容全面:涵盖了Java Web开发所涉及的所有核心技术与主流框架。 ②针对性强:以SSH框架整合开发为核心,可以满足95%的项目需求。 ③...

    Java.Web整合开发王者归来2

    全面系统分析EJB容器组件,深入整合JSP+Servlet+Struts+Hibernate+Spring。 ①内容全面:涵盖了Java Web开发所涉及的所有核心技术与主流框架。 ②针对性强:以SSH框架整合开发为核心,可以满足95%的项目需求。 ③...

    Java.Web整合开发王者归来4

    全面系统分析EJB容器组件,深入整合JSP+Servlet+Struts+Hibernate+Spring。 ①内容全面:涵盖了Java Web开发所涉及的所有核心技术与主流框架。 ②针对性强:以SSH框架整合开发为核心,可以满足95%的项目需求。 ③...

    Java.Web整合开发王者归来6

    全面系统分析EJB容器组件,深入整合JSP+Servlet+Struts+Hibernate+Spring。 ①内容全面:涵盖了Java Web开发所涉及的所有核心技术与主流框架。 ②针对性强:以SSH框架整合开发为核心,可以满足95%的项目需求。 ③...

    Java.Web整合开发王者归来3

    全面系统分析EJB容器组件,深入整合JSP+Servlet+Struts+Hibernate+Spring。 ①内容全面:涵盖了Java Web开发所涉及的所有核心技术与主流框架。 ②针对性强:以SSH框架整合开发为核心,可以满足95%的项目需求。 ③...

    Java.Web整合开发王者归来5

    全面系统分析EJB容器组件,深入整合JSP+Servlet+Struts+Hibernate+Spring。 ①内容全面:涵盖了Java Web开发所涉及的所有核心技术与主流框架。 ②针对性强:以SSH框架整合开发为核心,可以满足95%的项目需求。 ③...

Global site tag (gtag.js) - Google Analytics