ejb,全称是enterprise java bean。现在通用的是ejb3,早期的版本要求业务类必须实现ejb自有的接口,而且ejb应用程序也必须部署在ejb容器环境中才可以运行,具有高侵入性,所以造成难以测试,难以维护,难以部署,难以升级。从而导致很多用户转向ssh框架,为了重整河山,ejb3问世了(鼓掌~)。
先讲一下应用服务器,老师没有给出定义,只是列举了一些,例如weblogic,jboss,websphere,glassfish等,而tomcat只是web容器。
简单地说:应用服务器>=ejb容器∪web容器。
网上搜了一下,某人给出的应用服务器定义,个人以为算是比较全面的:
实际上,可以把应用服务器软件看成是中间件的21世纪版本,或者称做n层计算。这同开发商的说法和白皮书有点类似,但由于开发者的背景不同,具体的产品特征也不尽相同。由于存在这些差异,一直没有一个全面的定义。但是,谁都同意应用服务器软件是一个运行在中层的软件,位于基于HTML的客户端和后台商务应用之间。除此之外,应用服务器软件应该具有以下功能:
1、通过不同的硬件和操作系统链接多个系统。
2、使用HTML和动态HTML以及可扩展标记语言XML等标准控制信息的发布。
3、便于软件各部分的再应用,无论是内部开发或从第三方购买。包括CORBA、COM/DCOM、Internet Inter-ORB协议(IIOP)和企业JavaBean(EJB)。
4、通过像JDBC、ODBC或直接支持CICS、SAP和Lotus Notes等的接口,进行对数据库的访问。
5、通过负载平衡、群集和容错等特性提高系统性能。
6、支持安全特征,包括安全套接层(SSL)、授权和数字认证。
7、把上述所有特点集成到一个集成开发环境(IDE)中。
也有人认为只有同时是系统软件提供商和行业方案提供商提供的服务器才可称为应用服务器,要求不仅包括服务器,还应有一系列的开发工具和集成开发环境或平台,能进行快速的第二次开发。如oracle的webserver,bea的weblogic,IBM的websphere等都可以--不过这样的话jboss可能就不算了。
理解分布式应用(举例):
1、已有一个应用系统,包括在线书店和信用卡支付(creditcard)服务系统;
2、后来客户又有新需求,需要再开发一个在线音乐系统,里面也要用到信用卡支付服务;
3、为避免重复开发,将信用卡支付系统单独抽取出来,放到一个独立的环境(例如一台独立的机器)运行,此时,信用卡支付系统即ejb(组件),这样的开发方式即分布式应用开发。
对于ejb,可以通俗地理解成:分布式应用+组件。ejb容器有很多集成的功能:事务,安全,线程池,容错,持久化技术,远程化,拦截器,定时器,状态管理,消息管理。当把ejb组件部署到ejb容器中的时候,这些组件便自动具有上述功能(例如数据库连接时不用考虑close连接等)。这一技术即称之为框架技术。
现在大部分企业应用都有四层结构:表现层(GUI);业务逻辑层(定义业务逻辑流程);持久化层(处理与数据库的交互);数据库层(存放持久化对象)
下面是一个开发小型企业web后台系统的大致目录:
-dao:data access object,持久化层,面向数据(例如db表)。
-service:业务逻辑层,面向业务,可视为“dao”操作的重新组合,相较于“dao”粒度更大。实现了持久化技术平台的无关性,且更易于维护和扩展。
-web/form:(参考struts)
-web/action:(参考struts)
-util:一些可以从各层抽取的工具类。
-filter:信息传递的过滤操作。
-bean/entity/persistence/domain/model:ejb组件,实体。
(ejb的bean有三种类型,其中一种是实体bean,用于对model建模,由jpa处理,即由持久化供应商--例如hibernate,通过实体管理器接口进行管理。而持久化供应商是可插拔的--利用配置文件。至于开发模式,还有一种,即将model开发和web开发分成两个项目各自独立开发,这个model指实体和dao部分,其他的则是web部分,上述结构里的util和filter部分视情况分别在两个项目里建立。我觉得后面的开发模式更清晰--ms这就是分布式开发的模式:model--ejb组件;web--war包。)
在每个ejb支持的应用层面上,ejb都提供了组件服务。而且每个服务都是独立的,所以可以很容易地集成这些功能到应用程序中:
业务逻辑层:安全,拦截器,远程化,webservices,事务,集成,池化,线程安全,状态管理,消息。
持久化层:集成,持久化,缓存等。