开发现代、轻型JEE 6 · 负载测试 JMeter、Eclipse TPTP 覆盖 Cobertura、Emma Web...
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