开发现代、轻型JEE 6 · 负载测试 JMeter、Eclipse TPTP 覆盖 Cobertura、Emma Web...

Post on 04-Nov-2020

14 views 0 download

Transcript of 开发现代、轻型JEE 6 · 负载测试 JMeter、Eclipse TPTP 覆盖 Cobertura、Emma Web...

<在此处插入图片>

© 2011 Oracle Corporation

开发现代、轻型JEE 6 应用

何友兵

Oracle中间件咨询顾问

以下内容旨在概述产品的总体发展方向。该内容仅供参考,不可纳入任何合同。该内容不构成提供任何材料、代码或功能的承诺,并且不应该作为制定购买决策的依据。

所描述的有关 Oracle 产品的任何特性或功能的开发、发布和时间安排均由 Oracle 自行决定。

© 2011 Oracle Corporation

© 2011 Oracle Corporation

术语

• “现代”开发是什么意思?

• 显而易见:利用最新创新

• 平衡前沿技术与尖端技术

• 更简单、更易于使用

• “轻型”开发是什么意思?

• 只关注所需

• 运行时内存占用更少

• 易于安装和下载

• 部署单元/库膨胀少

• 容器解耦

© 2011 Oracle Corporation

• 选择

– 工具选择、开发/测试环境

• 生产力

– IDE(或没有),许多开源软件库/开源框架

• 熟悉程度

– 基于标准的扩展,非专有

• 简单性

– 精简、带批注的 POJO 驱动 API

• 质量

– 敏捷开发和测试驱动的开发

• 敏捷性

– 服务器的模块化、可扩展性

现代和轻型开发不足以满足需要

© 2011 Oracle Corporation

开发人员效率

灵活、轻便 可扩展 Web Profile

上下文、依赖注入 采用开源框架

批注更多,IDE 更好 POJO 开发 XML 配置更少

Java EE

Java EE 6 满足并超越了这些要求

Java EE 7:云基础

• 正式确定新角色、多承租方

• 可插式云服务,非 API

• 底层 Java EE 规范的修订版

© 2011 Oracle Corporation

议题

JEE6 中如何实现现代和轻型

开发方法

开发人员工具

构建环境、持续集成

测试、诊断、调优

模块化运行时服务

更容易的 Web 应用程序打包

新的持久化方法

总结

使用轻型、可测试的POJO对象

• 降低配置复杂性

• 更便于测试并与 OS 工具保持一致

– Ant/Maven/Hudson

• Java EE 6 在此领域有所突破

– (CDI) 上下文和依赖注入

– EJB 3.1、JPA

– JSF 2.0(Bean 等)

– Java EE 必将继续完善

• 使用可集群化的 HashMap 进行缓存已成为常态

© 2011 Oracle Corporation

Managed Beans

JPA 2

上下文依赖和注入

JSF2

EJB 3.1

JAX-RS

JAX-WS

持久性

Facelets

JSR330

基本组件

展现

依赖注入

业务服务

REST

SOAP

缓存 内存网格

利用批注,或自建批注

类别 示例

正常批注 — 带多个参数的批注。

这些批注的语法能够为批注类型中定义的所有成员传入数据。

@MyNormalAnnotation(mem1="val1", mem2="val2") public void

someMethod() { ... }

单成员批注 — 只带一个参数的批

注,具有更紧凑的语法。无需提供成员名称。

@MySingleMemberAnnotation("a single value") public class

SomeClass { ... }

标记批注 — 这些批注不带参数。用于标记要以特定方式处理的

Java 元素。

@Deprecated public void doWork() { ... }

© 2011 Oracle Corporation

开发人员工具

NetBeans IDE

© 2011 Oracle Corporation

• 全面的模块化 IDE

> 最先支持 Java SE 7

> 为 Java EE 6 提供同类最佳的支持

> GlassFish 3.1.1 支持, WebLogic 10.3.4

> 广泛的动态语言支持(PHP、Ruby、Groovy 等)

> 持续的开发改进

> 直观的工作流、Java FX、Swing、C++

> 调试器、分析器、重构等。

• 应用程序构建平台

> RCP = 富客户端平台

> 模块化架构易于重用

> 丰富的窗口、菜单、工具栏和操作框架

• 蓬勃发展的开源社区

> 巨大的第三方插件集合

> 下载超过 2000 万次

> 合作伙伴公司超过 100 家

> 活跃的博客社区

构件

AppXRay™

呈现

组件

数据访问

外部资源

JSP CSS JSF ADF

Faces HTML TLD

Faces

配置 POJO 资源包

XML

模式

Java

变量

Java/Java EE/ADF

Oracle Coherence

WebLogic、GlassFish

Spring、ORM、DB、JPA

Spring

DAO

EJB 3

JPA POJO

Eclipse

链接

Oracle Enterprise Pack for Eclipse 适用于融合中间件的免费 Eclipse 插件

© 2011 Oracle Corporation

• 优秀的多语言支持

– Java 7、JavaScript、Ruby、Groovy、HTML、CSS、XML

– 识别其他语言内部的语言

• 强大的重构、源码编辑

• 非常及时地支持第三方技术

– Maven、Groovy、Spring、Flex、Android、Ruby、Python、Scala、PHP

• 非常适用于 Java

• 对于 Java EE,相对于其他选项而言,不是最好的

– GlassFish/WebLogic Server 插件有点棘手

– Java EE 向导相对较少

– 编辑器中无 EE javadoc 代码补全

IntelliJ IDEA

© 2011 Oracle Corporation

• 编辑器始终都是轻型的,但未必是现代的

文本编辑器(VI、Emacs、VIM、UltraEdit 等)

© 2011 Oracle Corporation

+/- 没有要遵守的 IDE 项目模型

+ 适合任何编程语言(通常)

+ 企业架构雷达上甚至都不显现

- 没有集成的调试、向导、验证

- 搜索和替换 ≠ 重构、D-I-Y 代码生成

- 可能有很多正在进行的工作要配置

构建环境、持续集成

免费的Java开源软件生态体系 利用免费的开源软件

© 2011 Oracle Corporation

Hudson

相关性管理工具

自动化 工具

跟踪工具

版本控制工具

测试

持续集成 工具

WebLogic

GlassFish

GIT

Maven,如果你能 构建和依赖管理

• Maven 想控制一切,包括目录结构

• 如果项目能克服这些限制,Maven 将:

• 启用可重复的构建

• 把构建知识嵌入项目

• 使自动构建成为可能

• 有助持续集成

• 可以强制执行统一的项目设置

• 无需让所有开发人员都自编 build.xml 文件

• 没有重复的构建代码

• 简化依赖管理

• 提供许多插件

© 2011 Oracle Corporation

Maven

Repo URI

• glassfish:create-domain

• glassfish:start-domain

• glassfish:deploy

• glassfish:redeploy

• glassfish:undeploy

• glassfish:stop-domain

• glassfish:delete-domain

http://download.java.net/maven/glassfish/

Maven 与 WebLogic 和 GlassFish

© 2011 Oracle Corporation

GlassFish WebLogic

* 在 Java EE 6 中提供

• wls:install*

• wls:create-domain*

• wls:start-server*

• wls:deploy

• wls:undeploy

• wls:re-deploy

• Wls:start-app

• wls:list-apps

• wls:stop-app

• wls:wlst (运行脚本)

• wls:stop-server*

敏捷要求:Hudson CI 持续集成

• 用 Java 编写,有 IDE 插件

• 可以运行在任何 Java 容器

• 无需安装,java –jar hudson.war

• 易于使用、基于浏览器配置

• REST API 和 CLI

• 含 330 多个插件的充满活力的生态系统 – GlassFish 插件

– 即将推出:WebLogic 插件

• 工作原理: – 提交代码 — 触发构建

– Hudson 检测变化,验证代码

– 在另一台计算机上构建项目

– 组织构建输出(库、文档、安装程序)

– 记录和发布结果

– 反馈 — 仅在必要时

© 2011 Oracle Corporation

测试、诊断、调优

测试驱动的开发

重构 提交更新

添加测试

小改

提交更新

© 2011 Oracle Corporation

• 步骤少

• 检测多

• 可测试性设计

• 先做接口,再去

实现

• Mock 对象

类别 工具

持续集成 Hudson、CruiseControl、Continuum

验收 FitNesse、Selenium

负载测试 JMeter、Eclipse TPTP

覆盖 Cobertura、Emma

Web 应用程序 Selenium、HttpUnit

Java EE 服务器 Cactus

数据库 DBUnit

Mock 对象 jMock、EasyMock、Mockito

单元测试 JUnit、TestNG

构建 Ant、Maven、Ivy

争用/死锁 JRockit MissionControl

监测 JRockit Mission Control、NetBeans

内存泄漏 JRockit MissionControl

单元

测试

© 2011 Oracle Corporation

开发时可用的大量免费开源软件

Operations

Production

diagnostics

Development

部署

监测和性能调优

回归测试

故障排除

监视

警报和触发器

© 2011 Oracle Corporation

部署时可用的免费插件:JRMC JRockit Mission Control 和 JRockit Flight Recorder

JRockit Flight Recorder

“黑盒”

© 2011 Oracle Corporation

In-memory/on-disk

buffer

Mission Control Server

1. 发生严重故障

• JVM 崩溃

• 内存不足

• 应用程序意外终止

• 硬件故障或停电

2. 缓冲数据保存到文件

• 既有内存中的缓冲数据,又有磁盘上的

缓冲数据

• 例外:硬件故障将只产生磁盘上的数据

3. 用户在 JRMC 中打开文件进行分析

Flight Recorder

“实时应用程序诊断”

In-memory/on-disk

buffer

Mission Control Server

1. 监视系统检测到问题

• JSP 响应时间太长

• 内存增长出乎意料

• 通过 JMX 公开的一切

2. JRMC 请求诊断数据

• “给我问题的所有诊断数据”

3. 数据发送到 JRMC

• 立即分析(手动或自动)

• 并/或存储起来供以后分析

Flight Recorder 的优点

• 始终可用

– 无需为应用程序另配工具

– 无运行时开销

• 大大减少故障排除时间及成本

– 内部及 Oracle 支持

• 在生产中启用正循环反馈机制

– 从所有 SLA 违规行为中收集数据

– 反复分析、修复、更新应用程序,直至不再有错

• 提高了数据中心的性能和可用性

模块化运行时服务

轻量级运行时中的丰富特性

• 按需使用

– 数秒启动

– 按需动态加载特性,如

• 管理控制台

• EJB 容器、嵌入式 JMS 服务器

• Web 服务容器

• 集群

• Java EE 服务器的标准分布成为常态

– Java EE 6 Web Profile

– 完整 Java EE 6

– 最小化运行,以避免构建自定义平台

© 2011 Oracle Corporation

©2010 Oracle Corporation 29

JEE 6全集和Web Profile

Java EE 服务器模块化

应用程序容器运行时 容器 内核

容器

SD

K

部署

配置

NIO

监视

管理 GUI

WebLogic Server 和 GlassFish 上采用的方法

© 2011 Oracle Corporation

对于开发人员这意味着什么?

• 有望看到更轻量级的 Java EE 服务器

– GlassFish Server Web Profile — 29M

• 有望看到发布的profiles

– WebLogic Server 已发布的 Web Profile 支持关闭 EJB、JMS

和 JCA 容器

• 有望看到 OSGi 编程模型的实验

– GlassFish OSGi/Java EE 混合规范与实施

• 例如 JPA、EJB、JDBC、JTA 等,作为 OSGi 服务

© 2010 Oracle Corporation

更容易的 Web 应用程序打包

简化了 Web 应用程序打包

WEB-INF/classes com/acme/MyServlet.class com/acme/MyFilter.class

WEB-INF/web.xml

index.html main.css jquery-1.4.2.js ui/jquery.ui.core.js ui/jquery.ui.widget.js

Web 应用程序

WEB-INF/lib someframework.jar

简化了 Web 应用程序打包

WEB-INF/classes com/acme/MyServlet.class com/acme/MyFilter.class

index.html main.css jquery-1.4.2.js ui/jquery.ui.core.js ui/jquery.ui.widget.js

Web 应用程序

@WebServlet(urlPatterns=”/foo”) public class MyServlet { … }

@WebFilter(urlPatterns=”/foo”) public class MyFilter { … } WEB-INF/lib

someframework.jar

简化了 Web 应用程序打包

WEB-INF/classes com/acme/MyServlet.class com/acme/MyFilter.class

WEB-INF/lib someframework.jar

index.html main.css jquery-1.4.2.js ui/jquery.ui.core.js ui/jquery.ui.widget.js

Web 应用程序

META-INF/web-fragment.xml com/fw/FwServlet.class com/fw/FwFilter.class

框架 Jar

简化了 Web 应用程序打包

WEB-INF/classes com/acme/MyServlet.class com/acme/MyFilter.class

WEB-INF/lib someframework.jar jquery-ui-1.8.4.jar

index.html main.css

Web 应用程序

META-INF/resources/jquery-1.4.2.js META-INF/resources/ui/jquery.ui.core.js META-INF/resources/ui/jquery.ui.widget.js

jQuery 资源 Jar

简化了 Web 应用程序打包

WEB-INF/classes com/acme/MyServlet.class com/acme/MyFilter.class WEB-INF/lib someframework.jar jquery-ui-1.8.4.jar

index.html main.css

Web 应用程序

• 自包含

• 通用

• 可重用

新的持久性方法

结构化存储的新方法

© 2011 Oracle Corporation

RDBMS

• 无处不在

• 更新、更高级的 API

内存数据网格

• 成熟

• 分布式存储、处理和缓存

NRDBMS

(noSQL)

• 新兴

• 经常是分布式的

Java 持久性 API 2.0 简述

• 为何采用 JPA 而不采用其他 Java 持久性方法?

– 使用批注带来的生产力提升令人难以置信

– 减少使用低级 API 重复编码造成的错误

– 标准、非专有 — 提供商很多

– 内存数据网格的集成点

– JPA 2.0 ORM 可以处理现实的数据库模式

• JPA 概要

– 具体类 (POJO)

– 无必需的接口或继承

– 使用 new() 创建实例

– 使用批注和/或 XML 实现映射

– 由一个 EntityManager 管理

– 可以脱离容器(“分离”)

© 2011 Oracle Corporation

内存缓存简述

• 为何采用内存数据网格?

– 因为公共互联网的规模

– 因为固定的响应时间

– 处理大量事件

• 内存数据网格概要

– Java 进程的无容器集群

– 在整个集群/网格范围内管理数据的数据结构

– 实时事件观察 — 监听器模式

– 数据的物化视图

– 并行查询和聚合 — 基于对象的查询

– 并行数据处理

– 并行网格处理

– 无 RemoteException 的分布式计算

© 2011 Oracle Corporation

NRDBMS(即 NoSQL)简述

• 为何采用 NRDBMS?

– 可以为大量文档建立索引

– 以商业互联网负载提供数据密集型页面

– 提供流媒体

– 可为性能牺牲数据一致性

• NRDBMS 概要

– 文档存储、图形、键值存储、多值数据库、OODBMS、表存储、元组存储

– 不一定需要固定的表模式

– 通常避免联接

– 横向扩展

© 2011 Oracle Corporation

总结

© 2011 Oracle Corporation

• 企业需要商业支持与服务

• 商业升级方案很多

• 技术支持和专业服务

• 敏捷往往意味着项目未来会出乎意料

• 具有关联商业产品组合意味着不会受困于单点解决方案

• 企业需要具有健康生态系统的平台

• Java EE 和开源不断相互影响,应一同考虑

• Java EE6 完全满足要求

• 并有免费的开源软件用于测试、质量、故障排除

• 服务器可扩展性意味着投资将延续到:

• 下一代解决方案

• 下一代优秀语言

总结:Java EE6 是企业的最佳选择

<在此处插入图片>

© 2011 Oracle Corporation