了解 Java EE 6 和 WebLogic
Arun Gupta,Java EE 和 GlassFish 专家blogs.sun.com/arungupta, @arungupta
以下内容旨在概述产品的总体发展方向。该内容仅供参考,不可纳入任何合同。该内容不构成提供任何材料、代码或功能的承诺,并且不应该作为制定购买决策的依据。此处所述有关 Oracle 产品的任何特性或功能的开发、发布以及相应的日程安排均由 Oracle 自行决定。
JPE
项目
J2EE 1.2Servlet、
JSP、EJB、JMS
RMI/IIOP
J2EE 1.3CMP、
Connector
架构
J2EE 1.4Web Services、管理、部署、Async.
Connector
Java EE 5易于开发Annotations
EJB 3.0 持久性API 新增和更新Web Services强健性
Web
Services
企业 Java
平台
Java EE 6Pruning
可扩展性Profiles
易于开发EJB Lite
RESTful WS
CDI
Java EE 6Web Profile
易于开发
灵活性
Java EE:过去和现在
ManagedBean 1.0
1998 年 5 月 1999 年 12 月 2001 年 9 月 2003 年 11 月 2006 年 5 月 2009 年 12 月10 个规范 13 个规范 20 个规范 23 个规范 28 个规范
兼容的 Java EE 5 实现
http://java.sun.com/javaee/overview/compatibility-javaee5.jsp
兼容的 Java EE 6 实现
当前:
已发布:
Java EE 6 主题
开发人员效率
灵活和
轻量
可扩展
•Web Profile
•Pruning
•采用开源框架
•实现拖放式框架安装
•更多的annotations
•POJO 开发
•更少的 XML 配置
Java EE 6
Java EE 6 — 完成
• JCP 批准的规范
• 参考实现——GlassFish Server 3 开源版
• TCK
Java EE 6 规范
• 平台
• Java EE 6 Web Profile 1.0
• Managed Beans 1.0
Java EE 6 Web Profile 1.0
• 功能全面的中型profile
• 已在 Java EE 6 专家组内外展开积极讨论
• 技术• Servlets 3.0、JSP 2.2、EL 2.2、Debugging Support for
Other Languages 1.0、JSTL 1.2、JSF 2.0、Common
Annotations 1.1、EJB 3.1 Lite、JTA 1.1、JPA 2.0、Bean
Validation 1.0、Managed Beans 1.0、Interceptors 1.1、Context & Dependency Injection 1.0、Dependency
Injection for Java 1.0
Java EE 6 规范新增
• Contexts and Dependency Injection for
Java EE (JSR 299)
• Bean Validation 1.0 (JSR 303)
• Java API for RESTful Web Services (JSR 311)
• Dependency Injection for Java (JSR 330)
Java EE 6 规范重大变更
• Java Server Faces 2.0 (JSR 314)
• Java Servlets 3.0 (JSR 315)
• Java Persistence 2.0 (JSR 317)
• Enterprise Java Beans 3.1 和 Interceptors 1.1
(JSR 318)
• Java EE Connector Architecture 1.6 (JSR 322)
Java EE 6 规范更新
• Java API for XML-based Web Services 2.2 (JSR 224)
• Java API for XML Binding 2.2 (JSR 222)
• Web Services Metadata MR3 (JSR 181)
• JSP 2.2/EL 2.2 (JSR 245)
• Web Services for Java EE 1.3 (JSR 109)
• Common Annotations 1.1 (JSR 250)
• Java Authorization Contract for Containers 1.3 (JSR 115)
• Java Authentication Service Provider Interface for
Containers 1.0 (JSR 196)
Java EE 6 规范未变
• JDBC 4.0 API
• Java Naming and Directory Interface 1.2
• Java Message Service 1.1
• Java Transaction API 1.1
• Java Transaction Service 1.0
• JavaMail API Specification 1.4
• JavaBeans Activation Framework 1.1
• Java API for XML Processing 1.3
• Java API for XML-based RPC 1.1
• SOAP with Attachments API for Java 1.3
• Java API for XML Registries 1.0
• Java EE Management Specification 1.1 (JSR 77)
• Java EE Deployment Specification 1.2 (JSR 88)
• Java Management Extensions 1.2
• Java Authentication and Authorization Service 1.0
• Debugging Support for Other Languages (JSR 45)
• Standard Tag Library for JSP 1.2 (JSR 52)
• Streaming API for XML 1.0 (JSR 173)
http://blog.eisele.net/2010/12/who-is-afraid-of-java-ee-6-get-rid-of.html
Managed Beans 1.0
• 用于 Java EE 的 JavaBeans 组件模型• 简单、通用
• 配套规范中的高级概念
• 基本服务• 资源注入、生命周期回调、拦截器
• 使用方式• @Resource / @Inject
• java:app/<module-name>/<bean-name>
• java:module/<bean-name>
public class MyManagedBean {
public void setupResources() {
// setup your resources
}
public void cleanupResources() {
// collect them back here
}
public String sayHello(String name) {
return "Hello " + name;
}
}
Managed Beans 1.0 — 示例
@Resource
MyManagedBean bean;@javax.annotation.ManagedBean
@PostConstruct
@PreDestroy
@Inject
MyManagedBean bean;
http://blogs.sun.com/arungupta/entry/totd_129_managed_beans_1
Java EE 5 中的 Servlet至少 2 个文件
/* Code in Java Class */
package com.sun;
public class MyServlet extends
HttpServlet {
public void
doGet(HttpServletRequest
req,HttpServletResponse res)
{
...
}
...
}
<!-- web.xml -->
<web-app>
<servlet>
<servlet-name>MyServlet
</servlet-name>
<servlet-class>
com.sun.MyServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet
</servlet-name>
<url-pattern>/myApp/*
</url-pattern>
</servlet-mapping>
...
</web-app>
Servlets 3.0 (JSR 315)基于Annotation的 @WebServlet
http://blogs.sun.com/arungupta/entry/totd_81_getting_started_with
package com.sun;
@WebServlet(name=”MyServlet”, urlPatterns={”/myApp/*”})
public class MyServlet extends HttpServlet {
public void doGet(HttpServletRequest req,
HttpServletResponse res)
{
...
}
<!--Deployment descriptor web.xml -->
<web-app>
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>
com.sun.MyServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/myApp/*</url-pattern>
</servlet-mapping>
...
</web-app>
Servlets 3.0
• @WebServlet、@WebListener、@WebFilter„„
• Asynchronous Servlet• @WebServlet(asyncSupported=true)
• 使用 Web fragments的插件库
• 动态注册 Servlet• WEB-INF/lib/[*.jar]/META-INF/resources
可从根目录中访问
• 可编程的身份验证登录/注销
• 默认的错误页面
• . . .
EJB 3.1 (JSR 318)以War来进行打包和部署
myApp.ear
web.war
WEB-INF/web.xml
WEB-INF/classes
com.sun.FooServlet
com.sun.TickTock
beans.jar
com.sun.FooBean
com.sun.FooHelper
myApp.war
WEB-INF/classes
com.sun.FooServlet
com.sun.TickTock
com.sun.FooBean
com.sun.FooHelper
web.xml?
Java EE 5 Java EE 6
http://blogs.sun.com/arungupta/entry/totd_95_ejb_3_1
public class MySessionBean {
public void setupResources() {
// setup your resources
}
public void cleanupResources() {
// collect them back here
}
public String sayHello(String name) {
return "Hello " + name;
}
}
EJB 3.1 — 示例
@EJB
MySessionBean bean;@Stateless
@PostConstruct
@PreDestroy
EJB 3.1
• No interface的视图 — 每个 Bean 一个源文件
• 可嵌入式 API
• @Singleton
• 在 @PostContruct 中初始化
• 用于Timer的简化 的Cron 式语法
• Asynchronous Session Bean
• 可移植的Global JNDI Name
EJB 3.1EJB 3.1 Lite — 特性比较
Contexts & Dependency InjectionJSR 299
• 基于标准的依赖注入
• 类型安全 — 基于 @Inject API 构建
• 上下文/范围管理
• 包括 ELResolver
@Inject @LoggedIn User user@Inject @LoggedIn User
CDI
• 修饰符(Qualifiers)
• 事件(Events)
• 构造性(Stereotypes)
• 拦截器( Interceptors )
• 装饰器( Decorators )
• 其他选择(Alternatives)
• . . .
Java Server Faces 2.0 (JSR 314)
• Facelets 作为页面的“模板化语言”• 更轻松地开发自定义组件
• 集成的 Ajax
• “faces-config.xml” 常作为可选
• 默认的导航规则
• 更多„„• 可在 Servlet 2.5 以上版本上运行
• 可添加书签的 URL
• 条件式导航
• ...
Java Persistence API 2 (JSR 317)
• 改进的 O/R 映射
• 类型安全的Criteria API
• 更丰富的扩展 JPQL
• 二级缓存
• 新锁定模式• PESSIMISTIC_READ — 占有共享锁
• PESSIMISTIC_WRITE — 占有排他锁
• PESSIMISTIC_FORCE_INCREMENT — 更新版本
• 标准配置选项• javax.persistence.jdbc.[driver | url | user | password]
Bean Validation (JSR 303)
• 独立于层的机制,用于为数据验证定义约束• 通过annotations表示
• javax.validation.* package
• 与 JSF 和 JPA 集成• JSF:f:validateRequired、f:validateRegexp
• JPA:pre-persist, pre-update, and pre-remove
• @NotNull(message=”...”), @Max, @Min,
@Size
• 完全可扩展• @Email String recipient;
JAX-RS 1.1 (JSR 311)
• 用于构建 RESTful Web Services的 Java API
• 基于 POJO
• Annotation-driven
• 服务器端 API
• 以 HTTP 为中心
JAX-RS 1.1代码示例 — 简单
public class HelloWorldResource {
public String sayHello() {
return "Hello World";
}
public String sayHelloTo(String name) {
return "Hello " + name;
}
}
@Path("helloworld")
@Context UriInfo ui;
@GET
@Produces("text/plain")
@GET
@Path("{name}")
@PathParam(“name”)
用于 Java EE 6 的 IDE 支持
代码行* XML 行*Java 类*
基于 POJO/JPA/REST 的简单用例
来自真实用户„„
开发人员可以专注于业务逻辑,Java EE 6 将为基础架构提供标准。
智力拼图、模块化、标准、更少的 XML、简单、简单,我说了简单吗?
更高度集成的规范、简单且由标注 驱动、单类加载器 WAR、下一级别的行业标准
兼容标准、供应商独立性、毫秒和千字节级部署
http://blogs.sun.com/arungupta/tags/community+feedback
框架的时代已经结束
框架(如 Spring)实际上只是 J2EE过去的错误与Java EE 6
将来 的成功之间的一座桥梁。框架已经过时,Java EE 6
平台的扩展已经成为趋势。现在,我们应该回首过去的Spring,展望 Seam、Weld 和 CDI 技术的未来。
Java EE 已经远远超越 Spring,后者仅仅是将事物拼凑在一起,而不是构建一个有凝聚力的整体。Spring 太过坐享其成,总是认为它们开发了 DI 就将永远是领先的平台。现在,Spring 已经明显落伍。
http://www.theserverside.com/news/thread.tss?thread_id=61023
在选择应用服务器时,我们的主要目标是避免使用“自定义”企业体系(如 Tomcat + Spring +
Hibernate + Myfaces +„„)所引起的框架爆炸。Java EE 6 一经使用便可为我们提供 80%
的所需内容:强大的持久性支持 (JPA)、控制反转 (CDI) 和轻型组件模型 (EJB 3.1)
避免“框架爆炸”
WebLogic 规划和 Java EE6
2009 历年(完整)
•使用最佳 Oracle iAS 的 WebLogic 核心
•Fusion Middleware 11g 的基础
•GridLink for RAC
•企业网格消息处理
•ActiveCache
•实际操作
•SmartUpgrade
Fusion Middleware11g R1
WebLogic 10.3.1/2
Coherence 3.5
Fusion Middleware 11g R1(补丁集)
•用于 11g R1 的增量补丁集
•JRockit Flight Recorder
•Coherence 配置
•具有 JRockit Virtual Edition 的 WebLogic
•Virtual Assembly Builder
•Web 服务器插件更新
•Java EE — JSF 2.0
•Java SCA
•Web 服务 AT/协调
•Grid Control 11g
•Zip/Mac OS X 开发人员支持
2010 历年(完整)
WebLogic 10.3.3
Coherence 3.5.3
Fusion Middleware 11g R1(补丁集)
•用于 11g R1 的增量补丁集
•中间件云服务器
•基于事件的 RAC 集成
•Coherence 操作
•JMS 分区分布式主题
•开发体验
•继续与 WS-* 保持一致以及安全性
•Java EE 更新 — JPA 2.0、JAX-RS
•WebLogic Server 上的持续应用认证
2011 历年上半年(完整)
WebLogic 10.3.4
Coherence 3.6
WebLogic 主要版本
Coherence 3.x
Fusion Middleware
主要版本
•Java EE 6
•Developer Web Profile
•安装、修补、升级
•可诊断性
•Exalogic V1.X
•JMS 扩展
•RAC/JTA/JDBC +
•WS* 更新
•安全性集成
•Coherence
•FMWC 改进
•大规模 OAM
•通用管理模型
•虚拟化阶段 2
•多承租方
2011 历年
WebLogic Server、Java EE 6 和 Web
Profile• WebLogic Server 将实现 Java EE 6 Web Profile 以及整个平台
• Developer Web Profile
• 专为开发人员设计
• 目标:Zip 文件 < 50MB,启动时间 < 5 秒
• Production Web Profile
• 对Web Profile 应用提供全面的生产环境支持
• 支持企业 QoS 问题
• 之前 WebLogic 版本的兼容性和迁移支持
WebLogic Developer Web Profile
Developer Web
Profile Domain
单个 Server Web
Profile
轻量控制台WebApp
• 仅限单个服务器
• 仅限开发,而非生产
• 仅限 Web Profile 支持,而非完整平台
• 使用新的轻型模块化内核
• 占用空间更少,轻量实现
• 共享服务、配置、工具与其他 WebLogic 配置文件的兼容性
• 启动时加载 WebLogic 类的子集
• 在 Developr Web Profile 上开发的应用程序可以部署到 Production Web
Profile 和整个平台 的domain中
WebLogic Production Web Profile
Production Web Profile Domain
管理服务器Web Profile
托管服务器Web Profile托管服务器Web Profile托管服务器Web Profile托管服务器Web Profile托管服务器Web Profile
•专用 Web Profile domain
•包含仅限 Production Web Profile 的服务器
•生产(和开发)仅限 Web Profile 的应用程序
•启动时加载 WebLogic 类的子集
•共享服务、配置、工具与其他 WebLogic 配置文件的兼容性
•仅管理、监视 Web Profile 操作
•全面集群化和其他 QOS — 与整个平台domain互操作
WebLogic
控制台(子集)
WebLogic 完整 Java EE6 平台
完整平台域
管理服务器完整平台
托管服务器Web Profile托管服务器Web Profile托管服务器Web Profile托管服务器Web Profile托管服务器完整平台
•全面的 Java EE6 支持
•包含仅限完整平台的服务器
•全面的管理、监视功能
•开发和部署 Web Profile 应用程序和完整平台应用程序
•共享服务、配置、工具与其他 WebLogic 配置文件的兼容性
•全面集群化和其他服务质量功能
WebLogic
控制台
Developer Web Profile
Production Web Profile 完整服务器
WebLogic Java EE6 架构
Servlet
EJB Lite
JPA
WLS 基础架构实用程序
下一代 HK2 内核
本地部署
WLS 核心
轻型安全性
Web Services
客户端
JMS 客户端
整合的 WebSvc
JMS 容器
EJB 客户端 EJB 容器
TopLink 网格
Domain 配置和部署
WLS 集群化
企业安全性
配置文件独有
参考资料
• Java EE 6:www.jcp.org/en/jsr/detail?id=313
• WebLogic Server:oracle.com/weblogicserver
• 产品文档:download.oracle.com/docs/cd/E17904_01/wls.htm
• OTN 论坛:forums.oracle.com/forums/category.jspa?categoryID=13
• blogs.oracle.com/WebLogicServer
• youtube.com/user/WeblogicVideo
• @OracleWebLogic
• facebook.com/group.php?gid=147821775251384