Java EE架构概述

主要内容

  • 分布式多层应用
  • Java EE容器
  • Web Service支持
  • 打包应用
  • 开发角色
  • Java EE APIs

引子

  • Java Platform, Enterprise Edition(Java EE)为设计、开发、装配和部署企业应用程序提供了一个基于组件的方法
  • Java EE平台提供了:
    • 一个多层分布式应用模型
    • 可复用组件模型
    • 一个统一的安全模型
    • 灵活的事务控制
    • Web Services
  • 通过Java EE平台,可以
    • 更快地构建创新的商业解决方案
    • 基于Java EE组件的平台独立性,使开发的应用不依赖于特定厂商的产品和API
    • 软件厂商和客户都能自由地选择符合其需求的产品和组件

分布式多层应用

  • 应用逻辑按照功能分成若干组件,组成Java EE应用的各种应用组件按照多层Java EE环境中的层次结构,安装在不同的机器上。


  • 安全
    • 在每个应用中使用平台无关的安全策略
    • 允许在部署时定义安全约束
    • 应用程序能够在多种安全实现上移植
    • 对应用开发者屏蔽实现安全特性的复杂性
    • Java EE平台提供了标准的声明式访问控制规则,可由开发者定义并在应用部署到服务器时解释
    • Java EE提供了标准的登录机制,开发者可以不用重复开发
  • Java EE组件
    • A Java EE component is a self-contained functional software unit that is assembled into a Java EE application with its related classes and files and that communicates with other components.
    • Java EE规范定义了如下组件:
      • 应用客户端(application clients)和Applets是客户端运行的组件
      • Servlet和JSP组件是服务器上运行的web组件
      • Enterprise JavaBeans (EJB)组件是服务器上运行的业务组件
  • Java EE客户端
    • Web客户端 → thin client
      • 动态Web页面:由Web层运行的web组件生成
      • Web浏览器:显示页面
    • Applet
    • 应用客户端 → richer user interface
      • 直接访问企业Beans
      • 打开HTTP连接,与Web层的servlet通信
    • JavaBeans组件
    • 瘦客户端可提升应用的可分布性、可部署性和可管理性,而富客户端可获得良好的用户体验。
  • 服务器通信


  • Web组件
    • Servlet
      • Servlets are Java programming language classes that
        dynamically process requests and construct responses.
    • JSP
      • JSP pages are text-based documents that execute as servlets but allow a more natural approach to creating static content.
    • JavaBeans (optional)
  • 业务组件
    • Session beans
      • A session bean represents a transient conversation with a client. When the client finishes executing, the session bean and its data are gone.
    • Entity beans
      • An entity bean represents persistent data stored in one row of a database table. If the client terminates or if the server shuts down, the underlying services ensure that the entity bean data is saved.
    • Message-driven beans
      • A message-driven bean combines features of a session bean and a Java Message Service (JMS) message listener, allowing a business component to receive JMS messages asynchronously.


  • EIS (Enterprise Information System) 层
    • ERP
    • 数据库系统
    • 遗产系统
    • ……

Java EE容器

  • 为什么需要容器?
    • 瘦客户端多层应用程序开发面临的难题
      • 事务管理
      • 状态管理
      • 多线程
      • 资源池
      • 其它复杂的底层细节
    • Java EE服务器对所有类型的组件,以容器的形式提供了一组底层服务。开发者不需重复开发,而只需关注业务问题
  • 容器服务
    • 容器是一个组件和支持组件的底层平台特定功能之间的界面
    • Web组件、企业Bean、应用客户端组件必须组装成Java EE模块并部署于容器中才能执行
    • 组装过程包括
      • 为Java EE应用中每个组件定义容器方面的设置
      • 为Java EE应用本身定义设置项
  • 容器管理的服务有
    • 可配置的服务
      同一Java EE应用中的应用组件依照部署方式不同而表现出不同的行为
      • 安全服务
      • 事务服务
      • JNDI查找服务
      • Java EE远程连接服务
      • ……
    • 不可配置的服务
      • 企业Bean和Servlet寿命周期
      • 数据库连接资源池
      • 数据持久化
      • 访问其它Java EE平台API
  • Java EE服务器和容器


对Web services的支持

  • Web services是基于Web的企业应用,它使用开放的、基于XML的标准和传输协议与调用它的客户端进行数据交换
  • XML: 跨平台、可扩展、基于文本的描述数据的标准。
    • 自定义标签(tag)
    • 用schema定义其格式
    • 用XSL定义处理和展现数据的方式
  • SOAP: 客户请求和web服务响应描述成SOAP消息
    • 信封: 消息中有什么?如何处理消息?
    • 编码规则: 表示消息中的特定格式的数据实例
    • 消息约定: 描述请求和响应的格式
  • WSDL: 用XML格式描述网络服务
    • 服务名
    • 服务位置
    • 与服务通信的方式
  • UDDI和ebXML: 在Internet上发布web服务信息的标准

打包应用

  • Java EE应用打包成EAR文件(Enterprise Archive),包括
    • Java EE模块
    • 部署描述符: 描述应用、模块或组件的部署设置
      • Java EE部署描述符
      • 运行时部署描述符
        ——应用服务器特定


  • Java EE模块: 一个Java EE模块包括一或多个具有相同容器类型的Java EE组件,以及一个组件部署描述符
    • EJB模块
      • 企业bean (class) + EJB部署描述符 → .jar
    • Web模块
      • Servlet (class) + JSP + 其它Class + HTML + 图片 + Web部署描述符 → .war
    • 应用客户端模块
      • Java class + 应用客户端部署描述符 → .jar
    • 资源适配器模块
      • Java interface, class, native libraries, and other documentation + 资源适配器部署描述符 → .rar


开发角色

  • Java EE规范定义了如下角色
    • Java EE Product Provider
      • 实现Java EE产品,提供容器、实现API及其它Java EE特性
    • Tool Provider
      • 提供组件开发、组装和打包工具
    • Application Component Provider
      • 构建Java EE应用中使用的Web组件、企业Bean、Applets,或应用客户端
    • Application Assembler
      • 将应用模块组装成Java EE应用的EAR文件
    • Application Deployer and Administrator
      • 配置和部署Java EE应用程序、管理计算和网络架构、监控运行环境

Java EE APIs (1)

  • Enterprise JavaBeans
    • 执行业务逻辑
    • 三种企业bean
      • Session beans
      • Entity beans (在Java EE 5中被Java persistence API entities取代)
      • Message-driven beans
  • Java Servlet
  • JavaServer Pages
  • JavaServer Pages Standard Tag Library (JSTL, new in Java EE 5)
    • 封装了对许多JSP应用来说通用的核心功能。
    • JSTL有迭代和条件Tag,可以处理流程控制;有处理XML文档的Tag;有用于国际化的Tag;有使用SQL访问数据库的Tag;及一些经常使用的功能。

Java EE APIs (2)

  • JavaServer Face (JSF, new in Java EE 5)
    • 是一个创建Web应用的用户界面框架
    • 主要组件包括
      • 一个GUI组件框架
      • 用于在不同的HTML或各种标记语言和技术下渲染组件的柔性模型
      • 一个用于生成HTML/4.01标记的标准RenderKit
  • Java Message Service (JMS)
    • Java EE应用组件创建、发送、接收和读取消息的消息通信标准
    • 支持分布式通信,具有松散耦合、可靠、异步的特征
  • Java Transaction API (JTA)
    • JTA提供了划分事务的标准接口,UserTransaction接口是核心
    • 大多数情况下使用容器管理的事务,而不是JTA
  • JavaMail API
    • 发送email通知的API
    • 包括:一个应用级的接口;和一个服务提供者接口

Java EE APIs (3)

  • JavaBeans Activation Framework (JAF)
    • JavaMail使用它,如处理MIME编码的邮件附件;
    • 确定任意数据片断的类型;
    • 封装对其访问;
    • 发现其可用操作;
    • 创建可以执行这些操作的合适的JavaBean组件。
  • Java API for XML Processing (JAXP)
    • 支持使用DOM、SAX和XSLT处理XML文档
    • 支持使用任何XML兼容的解析器和XSL处理器
    • 支持W3C XML Schema
  • Java API for XML-Based RPC (JAX_RPC)
    • 使用SOAP标准和HTTP,可以在Internet上实现基于XML的远程过程调用
    • 支持WSDL,可以输出和输入WSDL文档
    • 可与运行在Java和非Java平台上的web服务客户端和服务器端实现互操作

Java EE APIs (4)

  • Java API for XML Web Services (JAX_WS, new in Java EE 5)
    • 是JAX-RPC的升级
    • 使用JAXB API绑定XML数据到Java对象
    • 引入了面向消息的功能,支持异步编程模型
    • 支持SOAP1.2
    • 可直接使用 XML/HTTP 绑定
  • SOAP with Attachments API for Java (SAAJ)
    • 是一个底层API
    • 允许生成和使用符合SOAP1.1和SOAP附件规范的消息
    • 一般不会直接被使用,而是使用JAX-RPC、JAX-WS

Java EE APIs (5)

  • Java API for XML Registries (JAXR)
    • 支持ebXML注册和存储标准
    • 支持UDDI规范
  • Java EE Connector Architecture (JCA)
    • 用于开发资源适配器
    • 基于Java EE的Web服务与已有EIS间同步或异步集成,这种集成是面向性能的、安全的、可扩展的、基于消息的、和事务的
  • JDBC API
    • 用Java编程语言的方法调用SQL命令
    • 分成两部分
      • 应用级接口 → 应用组件访问数据库
      • 服务提供者接口 → 将JDBC驱动程序绑缚到Java EE平台上

Java EE APIs (6)

  • Java Naming and Directory Interface (JNDI)
    • 提供目录和命名功能
    • 允许Java EE应用程序发现和获得任意类型的对象
    • 与实现无关,可以访问多种已有的命名和目录服务
    • 使用javax.naming.InitialContext对象在java:comp/env名字下查找对象
  • Java Authentication and Authorization Service (JAAS)
    • 鉴别和授权特定用户或用户组运行Java EE应用

Java EE APIs Example

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容

  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,368评论 1 92
  • 虽然工作中没有用到Java EE体系结构,但连续两年的系统架构师考试案例部分,都考到了这个知识点,马上又要参加考试...
    CoryLiu阅读 4,373评论 0 1
  • 一. Java基础部分.................................................
    wy_sure阅读 3,807评论 0 11
  • 参考W3C Spring教程 Spring致力于J2EE应用的各种解决方案,而不仅仅专注于某一层解决方案。可以说S...
    王侦阅读 1,154评论 0 6
  • 1.成功日记已经满九个月啦~ 2.昨天看见我的日志,然后私信我发生什么事了,内心是感动的。 3.七夕那天,收到了女...
    映月黑珍珠阅读 202评论 0 0