第15章 · 趣味学习

基于中间件的开发:软件世界的"乐高积木" 🧩

小明的奶茶店要对接外卖平台、支付系统、会员系统——每个都不同厂家不同协议。怎么让它们协同工作?答案就是"中间件"——处于操作系统和应用软件之间的"翻译官"和"粘合剂"。本章讲中间件、应用服务器、J2EE、.NET、EAI、轻量级与重量级架构。

🎭 本章导读:中间件的定位

中间件位于操作系统/网络/数据库之上,应用软件之下。它屏蔽底层复杂性,让开发者集中精力在业务上。Standish Group归纳10大优越性。C/S两层结构→三层结构的演变催生了中间件。
小明
老师,中间件到底"中间"在哪?
老师
想象你盖楼:地基是操作系统,装修是应用软件,中间的"水电管线+电梯+消防"就是中间件。你不用自己拉水管接电线,中间件帮你搞定。C/S两层时客户端又管界面又管业务逻辑太累,拆成三层:客户端管界面→应用服务器管业务逻辑→数据库管数据。中间件就是应用服务器里那个"水电管家"。本章6节:中间件技术→应用服务器→J2EE→.NET→EAI→轻量级架构。

🧱 15.1 中间件技术

中间件是基础软件一大类,可复用软件。特性近似Agent(代理):自治性、自主性、隔离性、社会化、激发性、主动性、并发性、认识能力。

15.1.1 中间件的概念

IDC定义:独立的系统软件或服务程序,分布式应用借助它在不同技术间共享资源。有标准程序接口和协议。5特点:满足大量应用需要、运行多种硬件和OS、支持分布计算提供透明性、支持标准协议、支持标准接口。

Standish Group 10大优越性:缩短开发周期、节约开发成本、减少初期建设成本、降低失败率、保护已有投资、简化应用集成、减少维护费用、提高开发质量、保证技术进步连续性、增强应用生命力。总建设费用可减少50%。

15.1.2 中间件8类

类型作用代表产品
通信处理(消息)中间件跨平台可靠高效实时数据传输BEA eLink/IBM MQSeries/TongLINK(销售额最大)
事务处理(交易)中间件大量事务并发+负载均衡+高可靠BEA Tuxedo(增长率最高)
数据存取管理中间件虚拟缓冲存取/格式转换/解压
Web服务器中间件扩充浏览器会话/数据写入SilverStream
安全中间件军事政府商务安全保密国产产品
跨平台和架构中间件集成不同平台构件CORBA(最强但庞大)/JavaBeans(灵活)/COM+(Windows)
专用平台中间件特定领域参考模式电子商务/网站
网络中间件网管/接入/测试/虚拟社区最热门研发
8类中间件像奶茶店的8种"配套基础设施":消息中间件=传菜员(跨平台传数据)、事务中间件=收银系统(大量交易并发+不宕机)、数据存取=中央仓库管理员、Web服务器=前台接待、安全中间件=保安、跨平台=翻译官(不同语言互通)、专用平台=行业定制设备、网络中间件=监控摄像头+网络管理。

15.1.3 两大产品

IBM MQSeries:消息处理中间件。确保信息可靠传输(网络不可靠也不丢不阻塞)。异步消息处理。支持所有主要平台+Internet+Java+LotusNotes/SAP R3接口。

BEA Tuxedo:交易中间件。电子商务交易平台。保证不间断访问(监视故障+逻辑排除+恢复)。负载均衡(自动开关服务)。DDR数据依赖路由。LLE安全机制。ATMI为50+硬件平台提供一致API。

🖥️ 15.2 应用服务器技术

Web应用开发3阶段:①CGI/API(C/Perl,要求高) ②ASP/PHP脚本(简化但扩展性差) ③应用服务器(模块化+集群+分布式)。

15.2.1 应用服务器概念

应用服务器=企业级应用的"操作系统"。提供开发/部署/运行/管理/维护平台。可实现"软件集群",让多异构服务器协同工作。

4大作用

  1. 合理分工企业级开发(系统功能与业务功能分开),加快开发速度,减少开发量(模块化+ORM等)
  2. 应用设计/开发/部署/运行/管理/维护的平台
  3. 使应用与底层平台无关,便于商业逻辑实现与扩展(三层结构,中间层独立)
  4. 提供现成稳定强健灵活成熟的基础架构(分布式+无单点故障)

15.2.2 五大应用服务器

产品厂商特点
WebLogicBEAJava Web应用服务器,EJB Deployer Tool,ZAC发布向导
WebSphereIBM强调集成(Studio+VisualAge+DB2+MQSeries),多平台
iPlanetSUN+Netscape满足J2EE规范,事务监控+负载平衡+集群故障转移
iASOracleApache为入口,插件盒(PL/SQL/Jweb/Perl/C/ODBC),支持CORBA/IIOP+EJB
EAServerSybaseJaguar CTS+PowerDynamo,WebOLTP+动态发布,支持多构件模型

☕ 15.3 J2EE

J2EE=针对Web Service/业务对象/数据访问/消息传送的一组规范。两件事:建立标准使部署与服务器无关+服务器控制构件生命周期和资源。4种构件:应用客户端、EJB、Servlets和JSP、Applet。

15.3.1 表示层

客户端可基于Web(HTML/Javascript/XML)或Java(Applet/独立程序)。HTML首选;HTML不足则用Java客户端。当客户端是HTML时,JSP/Servlet组合是真正客户端;Java程序可直接访问业务逻辑。

15.3.2 应用服务层6技术

1. Servlet:扩展Web服务器功能的程序。类似CGI但用Java类+流,更易写,编译为字节码驻留内存,每用户请求生新线程,速度快。

2. JSP:基于文本的Servlet。与JavaBeans结合可分开内容和显示逻辑。比CGI广(平台无关+资源少)。

3. EJB 3类

类型代表特点
实体Bean数据库数据持久性,数据在库中Bean就存在。容器管理持久性(CMP)或Bean管理持久性(BMP)
会话Bean与客户短暂对话有状态(含对话状态,不表示持久数据)/无状态(资源少,通用服务)
消息驱动Bean处理JMS异步消息EJB2.0规范,不由应用直接调用,监听JMS队列

4. JMS:Java程序间信息交换。2模式:点到点(队列,一个消费者)+出版/订阅(话题,多消费者)。

5. JNDI:Java命名和目录接口,查找用户定义对象(如EJB)和环境实体。

6. 事务处理:JTA(高级API,事务接口+XA资源接口两步提交)+JTS(低级API,映射到OMG对象事务服务)。Bean管理或Container管理事务处理。

🪟 15.4 .NET

微软的下一代Internet可编程结构。4特点:软件变服务、基于XML共同语言、融合多设备多平台、新一代人机界面。

15.4.1 .NET平台

目的:任何地方任何时间任何设备访问所需信息。软件以Web服务形式出现,通过WSDL描述+DISCO查找+SOAP调用。

XML作为应用间无缝接合手段,定义SOAP(简单对象访问)、WSDL(服务描述)、Web服务发现协议。

15.4.2 .NET框架6部分

1. 通用语言运行时(CLR):框架最底层基础。统一运行环境,多语言交互,自动内存管理。受控代码:源代码→MIL微软中间语言+元数据→JITC生成机器码。

2. 基础类库:命名空间点号分隔(如System.Data),统一面向对象可扩展接口。

3. ADO.NET:数据访问。强大XML支持(XMLReader/Writer/Navigator/Document),引入DataSet(内存数据缓冲区,关系型视图),替代Recordset。

4. ASP.NET:网络编程。Web表单(快速开发+代码内容分开+服务器端控件)+Web服务(.ASMX文件)+应用框架(编译运行+复制文件即发布)。

5. WinForms:传统Windows应用,可利用CLR+ADO.NET+Web服务。

6. 开发语言:VB/C++/C#/Jscript,C#是全新面向对象语言。Visual Studio.NET集成开发环境。

COM开发被简化(引用计算/接口描述/注册自动化)。COM+=COM+MTS+DCOM,提供中间层服务(进程管理+连接池)。

其他:安全系统(基于事实的细化权限)+配置系统(并行配置消除"DLL地狱")。

🔗 15.5 企业应用集成(EAI)

将企业内应用彼此连接或企业间连接。典型企业49个应用系统,33% IT预算花在集成上。

3种集成(按深度):①应用集成(A2A实时,代码/API/RPC/中间件/Web服务) ②业务过程集成(交互式流程/多步流程,含工作流) ③数据集成(数据库间数据移动,切入点多,批量/实时同步)。

EAI通过中间件连接企业级应用4好处:兼容开放硬件/OS/网络/数据库、平台透明性、交易一致完整性、缩短开发周期50-75%。

⚖️ 15.6 轻量级架构和重量级架构

MVC模式将业务处理与显示分离。J2EE庞大臃肿,轻量级Web架构保持优势还简化开发。主流轻量级=Struts+Spring+Hibernate基于MVC结合。

15.6.1 Struts框架

基于J2EE的MVC框架(Servlet+JSP)。模型=JavaBean/EJB,控制器=ActionServlet+Action,视图=JSP。Front Controller模式统一入口。工作流程:JSP发.do请求→ActionForm封装验证→ActionServlet据struts-config.xml获Action→调model→返view。

15.6.2 Spring框架

Rod Johnson创立,轻量级J2EE应用框架。核心概念:控制反转(IoC),又称依赖注入(DI)——不必在程序码维护物件依赖关系,只需构件设定,Spring容器自动注入。

核心容器=BeanFactory(Factory模式实现)。模块:Core+DAO(JDBC抽象)+ORM(Hibernate/JDO/Ibatis/JPA)+Context(EJB/JNDI/Mail)+Web+MVC。

15.6.3 Hibernate框架

对象关系映射(ORM)框架,Java应用和关系数据库的桥梁。将数据库资源映射为POJO。核心是XML映射文件*.hbm.xml。用HQL(类似SQL但对象和字段代替表和列)检索。支持主流数据库+父表子表+事务+继承多态。只是工具不是J2EE服务器。

15.6.4 SSH轻量级架构3层

表示层(Struts):管理请求响应+控制器代理+异常处理+数据模型+Web层验证。

持久层(Hibernate):HQL检索+存储/更新/删除+支持主流数据库+事务+继承多态。

业务层(Spring):延时注入提扩展性+插件式编程+AOP集中处理业务逻辑+封装Hibernate会话工厂和事务管理。

15.6.5 轻量级 vs 重量级

重量级:依赖庞大容器(EJB),开发效率低,配置等待久,单元测试难,但大规模运行性能优异。

轻量级:不用庞大容器,开发迅速,单元测试简单,但大规模运行性能与重量级有差异。

新选择:JPA标准(持久化与框架无关,开发用Hibernate测试,上线部署EJB实体Bean)+事务注解(开发用Spring映射,上线用EJB会话Bean)。解决两者矛盾。

MVC三层对应:Struts(表示)+Spring(业务)+Hibernate(持久)。Spring核心=IoC/DI依赖注入。Hibernate是ORM工具不是服务器。轻量级vs重量级核心区别=容器依赖度+开发效率vs运行性能。

🏆 本章总结:中间件开发全栈

  • 中间件:5特点+10优越性+8类(消息/交易/数据存取/Web/安全/跨平台/专用/网络)+2产品(MQSeries/Tuxedo)
  • 应用服务器:3阶段演变+4作用+5产品(WebLogic/WebSphere/iPlanet/iAS/EAServer)
  • J2EE:4构件+表示层+应用服务层6技术(Servlet/JSP/EJB3类/JMS2模式/JNDI/事务JTA+JTS)
  • .NET:4特点+框架6部分(CLR/类库/ADO.NET/ASP.NET/WinForms/语言)+COM+与安全
  • EAI:3种集成(应用/过程/数据)+4好处
  • 轻量级vs重量级:MVC+SSH三层(Struts/Spring核心IoC/Hibernate ORM)+轻重量级对比+JPA新选择
中间件8类5特点、应用服务器5产品、J2EE 4构件6技术、.NET 4特点6部分、EAI 3集成、SSH三层+IoC+ORM