1 / 60

JAVA EE 6

最佳实践: 从 Spring 迁移到. JAVA EE 6. WTF ?!?. Bert Ertman 荷兰 Luminis 公司研究员 荷兰 Java 用户组的负责人,同时还是一位 Java Champion. 这是说给谁听的?. 您正在使用老版本的 Spring ,却不知怎样向前发展 Java EE 好像又火起来了,您应当赶上这样的趋势吗? 您喜欢 《 J2EE Design and Development 》 这本书,但它仍没有过时吗?. 为什么要倾听我们的意见?. 我们不为任何一家应用服务器供应商 工作

haven
Download Presentation

JAVA EE 6

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 最佳实践: 从 Spring 迁移到 JAVA EE 6 WTF ?!?

  2. Bert Ertman • 荷兰 Luminis 公司研究员 • 荷兰 Java 用户组的负责人,同时还是一位 Java Champion

  3. 这是说给谁听的? 您正在使用老版本的 Spring,却不知怎样向前发展 Java EE 好像又火起来了,您应当赶上这样的趋势吗? 您喜欢《J2EE Design and Development》这本书,但它仍没有过时吗?

  4. 为什么要倾听我们的意见? 我们不为任何一家应用服务器供应商 工作 我们也不是 Rod Johnson 的追随者 我们广泛使用 J2EE、Spring 和新的 Java EE 技术 针对 Java EE 和 Spring 展开过无数次讨论……

  5. 为什么要迁移? Spring 是一项专有技术 无论如何,从旧版的 Spring 升级需要大量的工作 那,为什么不直接迁移到标准上来呢?

  6. 场景 A

  7. Scenario A

  8. 但现在我们需要这样的

  9. 首先让我们澄清几 个误解……

  10. Java EE 是否过于庞大了? • 部署了应用后的平台启动时间 • JBoss AS 7 约 2 秒 • Glassfish V3 约 4 秒 • Tomcat 6 + Spring 约 4 秒 • Java EE 6 WAR 文件 < 100kb

  11. 但是我需要依赖注入 • Java EE 6 引入 CDI • 更强大的上下文 DI 模型 • 让平台能够以标准方式扩展

  12. 但是我需要 AOP! 是吗? 难道您想让你的代码变得杂乱并难以理解吗? 或者,您仅仅是使用了轻量级的 AOP, 即 Spring AOP 或 Java EE 规范中的拦截器?

  13. 我是否需要重型工具?

  14. 功能比较 * 不是 Java EE 规范的一部分

  15. 这一切均可使用普通轻量级 Java EE 完成

  16. rm -Rf spring* ?

  17. 当然,这将十 分有趣! 实际情况呢?

  18. 当然,这将十 分有趣! 实际情况呢?

  19. 典型的老版本 Spring 应用 • 大量复杂的 XML 配置文件,无法使用注解 • 旧式/过时的 ORM 解决方案 • (JDBC 模板、Kodo、Toplink 等) • 过时的基于 Web MVC 的扩展 • (SimpleFormController 等)

  20. 迁移路径 升级 Spring 版本 替换 Spring 内的旧框架(ORM、Web 框架) Spring 和 Java EE 容器并存 完全替换 Spring 移除 Spring 容器

  21. 迁移路径 升级 Spring 版本 替换 Spring 内的旧框架(ORM、Web 框架) Spring 和 Java EE 容器并存 完全替换 Spring 移除 Spring 容器

  22. 升级 Spring 版本 升级 Spring 运行时(替换 JAR 文件) 无代码/配置变更

  23. 迁移路径 升级 Spring 版本 替换 Spring 内的旧框架(ORM、Web 框架) Spring和Java EE容器并存 完全替换 Spring 移除 Spring 容器

  24. Web MVC JSF 尚未触碰特定于 Spring 的 API Spring bean 任务 JPA Kodo Spring JDBC 模板 JMS bean 替换 Spring 内的旧框架 表示层 @AutoWired 业务层 @AutoWired @AutoWired 数据/集成层

  25. 迁移路径 升级 Spring 版本 替换 Spring 内的旧框架(ORM、Web 框架) Spring 和Java EE 容器并存 完全替换 Spring 移除 Spring 容器

  26. TX 管理器 ORM AOP Spring 应用程序 Servlet 容器 myapp.war Spring 容器 Spring bean Spring bean

  27. Java EE 应用程序 TX 管理器 安全性 拦截器 JPA Java EE 6 应用服务器 CDI / EJB 容器 myapp.war CDI bean 会话bean

  28. 混合在一起 TX 管理器 安全性 拦截器 JPA Spring 容器 TX 管理器 ORM AOP Spring bean Spring bean Java EE 6 应用服务器 CDI / EJB 容器 myapp.war CDI bean 会话bean

  29. JSF Spring bean 任务 JPA Spring JDBC 模板 JMS bean 在 Java EE 容器内运行 Spring 表示层 @AutoWired 业务层 @AutoWired 数据/ 集成层

  30. JSF Spring bean EJB CDI 任务 JPA Spring JDBC 模板 JMS bean Spring 和Java EE 容器并存 表示层 @AutoWired @Inject 业务层 @Inject @AutoWired 数据/ 集成层

  31. Spring DAO

  32. Spring 配置

  33. JSF / CDI bean 在此,我们不想了解 Spring

  34. 用 CDI 封装 Spring • 编写 CDI 扩展 • 引导 Spring 容器 • 在 Spring 容器中查找 Spring Bean 并在 CDI 上下文中发布

  35. CDI 扩展示例

  36. 迁移路径 升级 Spring 版本 替换 Spring 内的旧框架(ORM、Web 框架) Spring 和 Java EE 容器并存 完全替换 Spring 移除 Spring 容器

  37. JSF Spring bean EJB CDI 任务 JPA Spring JDBC 模板 JMS bean 完全替换 Spring 表示层 @AutoWired @Inject 业务层 @Inject @AutoWired 数据/ 集成层

  38. JSF EJB CDI EJB 计时器 JPA Spring JDBC 模板 MDB 完全替换 Spring 表示层 @AutoWired @Inject 业务层 @Inject @AutoWired 数据/ 集成层

  39. TX 层 将 Spring TX 和 DAO 迁移到 EJB TX 管理器在应用服务器内 默认情况下,EJB 是事务性的 EJB 集成了 JPA

  40. 您是说 EJB 很好吗? 一点没错! EJB 只是容器管理的 POJO 与 Spring bean 一样,而且不需要容器配置……

  41. DAO Spring

  42. DAO 配置

  43. Java EE 替代方案 EJB

  44. 处理惰性加载 • 许多 Spring 应用程序使用 Open-EntityManager-In-View 模式 • EJB 具有扩展的持久性上下文 • 更明确、更强大

  45. LazyInitializationException 异常

  46. 修复惰性加载问题 只要 bean 存在就保持 EntityManager 可用

  47. 沉迷于模板? • 如果使用了 JDBC 模板将会怎样? • 让我们开始是否使用 ORM 的老生常谈 • 第 1 阶段:拒绝 • 第 2 阶段:最终将会完成迁移 ;-)

  48. 使用 Java EE 内的 JDBC 模板 • 可用简单的生成器方法注入 • 可能是因为它没有依赖 Spring 容器 • 尽管有一些额外的依赖项

  49. 模板生成器示例

  50. 迁移路径 升级 Spring 版本 替换 Spring 内的旧框架(ORM、Web 框架) Spring 和Java EE 容器并存 完全替换 Spring 移除 Spring 容器

More Related