AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

为 Web 应用构建 Spring—Seam 混合型组件

  • 2008-05-19
  • 本文字数:1629 字

    阅读完需:约 5 分钟

Spring 和 JBoss Seam 框架为企业 web 应用的开发分别提供了不同的特性。Spring 是一个 JavaEE 中间件框架,它建立在像 POJO 抽象、依赖注入( Dependency Injection )和面向方面编程( Aspect Oriented Programming )等特性上,它提供了与 Hibernate TopLink iBatis 等框架的集成。而 Seam 则是一个集成了如 AJAX、Java Server Faces (JSF)、企业 Java Beans (EJB3)、Java Portlets 及业务流程管理 (BPM) 等技术的 web 应用框架。在开发 web 应用的过程中,这两者能否结合起来使用或者同时应用这两个框架是否有意义呢?最近有篇文章就专门讨论了这个话题,而且,在 java 社区论坛上也主要关于如何将这两个框架结合使用并各取所长展开了激烈的讨论。

Dan Allen 最近写了两篇关于如何将 Spring 和 Seam 框架集成到 web 应用中的文章。在第一篇文章中,他解释了如何利用Seam 和Spring 容器功能来创建混合型组件。他说,Seam 统一了JSF、JPA、EJB 3 和其他一些技术,但它不支持Spring 所能提供的一些简易特性,比如轻量级远程技术(lightweight remoting)、AOP 声明、框架模板类(framework template classes)以及资源注入(resource injections)。而这些Seam 不支持的功能点,就是能够或者说值得创建Spring-Seam 混合组件的地方,我们可以在这些地方创建可以同时从Seam 和Spring 容器的功能中获益的对象。Seam 提供模块支持将Spring 框架集成到web 应用中,也支持关于应用组件和底层资源的共享。

作者通过一个web 应用实例,向读者阐述了如何通过使用Seam 提供的 ContextLoader 组件和将 seam:component 内嵌到 Spring 元素中把 Spring“装饰”成一个 Seam 组件的方式,最终将 Spring beans 集成到 Seam 应用中。他也提到了另一个将 Spring 和 Seam 集成的方法,那就是使 Seam 容器与 Spring 之间通过使用定制的 EL(表达式语言)解析器来通信。

在该系列文章的第二部分中,他谈到了将状态行为添加到Spring bean 中的话题,这个性能目前如果单单使用Spring 框架来实现的话还是一个极大的挑战。Spring beans 中可以添加状态(State)信息,只需要注册一个Seam 定制范围处理器使Spring beans 能够被存储在Seam 上下文中,从而可以为实现POST 提交后重定向(redirect-after-post)机制而维持暂时通信、为单用户页面流程(single-user page flows)提供长运行时会话(long-running conversation)、以及支持多用户在扩展时间段内交互的业务流程范围。这样一来,Spring beans 就没有必要对HTTP session 重新排序就能获知各自的状态。

作者还讨论了在同时使用Spring 和Seam 的时候会遇到的域和线程安全问题。Spring 仅在创建时注射一次依赖性,但Seam 则可以在每个方法被调用之前进行动态注射。如果一个bean 由于被附加到一个生命周期较长的组件上而导致其自身生命周期比预期生命周期更长的话,那么两者间的设计哲学的差别会导致域阻抗(scope impedance)问题。通过Spring 的静态依赖注射将组件捆绑到不同域的时候,就会导致前面这种情况的出现。Seam 提供的解决方案有助于避免域阻抗和线程安全问题,也就是,不要直接应用“ref”元素来注射bean 实例,而使用 seam:instance 标签来注射代理。

社区论坛关于这个话题也有很多有趣的讨论。 Rick Hightower 综述了 Seam 2.0.1 的特性,并引发了关于同时使用 Seam 和 Spring 的讨论。在讨论中提到的一些问题有:

  • 假设你一直同时在使用 Seam 和 Spring,如果有一天你必须只能从中选取一个,你会选哪个?
  • 你使用 Seam 的同时是否也用到 EJB 3?
  • 你使用 Seam 的同时是否也用到 Spring?
  • Seam 的生成工具好用吗?
  • Seam 是不是编写基于 JPA 和 JSF 的应用的最好的方式?
  • 你觉的 Spring 和 Seam 在哪些方面互相有所重复,在重复的功能方面,你觉的哪个更好用?

Spring 2.5.4 版本和 Seam 2.0.1 GA 版本都是最近才发布。你可以从 InfoQ 网站的 Spring Seam 专栏获得关于这两个框架的新闻。

查看英文原文: Building Spring-Seam Hybrid Components For Web Applications

2008-05-19 14:381166
用户头像

发布了 71 篇内容, 共 21.6 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

使用 NineData 高效编写 SQL

NineData

数据库 sql 数据库开发 数据管理工具 NineData

牛啊!长这么大还是头一次见24W字的SpringBoot从入门到实战文档

程序知音

Java spring 微服务 springboot 后端技术

一次关于 MySQL 主从模式采用 GTID 的实践记录

风铃架构日知录

Java MySQL IT 主从复制 MySQL 数据库

信用卡APP评测系列:科技赋能信用卡APP创新升级,助力客户体验提升

易观分析

金融 信用卡

Postgresql分析慢sql

查拉图斯特拉说

数据库 postgresql db PgSQL PG库

ShardingSphere分库分表schema名称导致NPE问题排查记录

小小怪下士

Java 程序员 后端

微服务的版本号要怎么设计?

江南一点雨

微服务 语义化

为什么网络I/O会被阻塞

华为云开发者联盟

后端 开发 华为云 企业号 1 月 PK 榜

Diffie-Hellman密钥协商算法探究

百度Geek说

数据安全 企业号 1 月 PK 榜

关于 Serverless 应用架构对企业价值的一些思考

Serverless Devs

ISV生态合作伙伴体系多领域赋能,开拓市场赛道

元年技术洞察

数据中台 数据 数字化转型 ISV 方舟平台

一文总结ACE代码框架

OpenHarmony开发者

OpenHarmony

华为云Stack新版发布:构筑行业云底座,共创行业新价值

华为云开发者联盟

云计算 后端 华为云 企业号 1 月 PK 榜

软件测试/测试开发 | AppCrawler 自动遍历测试工具实践(一)

测试人

软件测试 自动化测试 测试开发 自动遍历 AppCrawler

赞赞赞!融云收获行业媒体「组团打 Call」

融云 RongCloud

一次JVM GC长暂停的排查过程

京东科技开发者

Java 后端 JVM 虚拟机 企业号 1 月 PK 榜

重磅发布丨从云原生到 Serverless,先行一步看见更大的技术想象力

Serverless Devs

Git操作不规范,战友提刀来相见!

王中阳Go

golang git 深度思考 高效工作 学习方法

《金融电子化》:隐私计算赋能银行助贷业务自主风控 | 华夏银行×洞见科技

洞见科技

隐私计算 风控

视频实时自然美颜, 无惧素颜上镜

HarmonyOS SDK

HMS Core

行业分析| 交通综合执法对讲系统

anyRTC开发者

指挥调度 快对讲 语音对讲 视频对讲 综合执法

LogicFlow安装与准备工作

小鑫同学

前端 vite Vue 3 Vue3 Typescript

如何把 高并发限流 实现的那叫一个优雅!

风铃架构日知录

Java 程序员 高并发 IT 限流

公共服务 智慧政务数据可视化大屏一体化系统

2D3D前端可视化开发

数据可视化 数字政务 智慧政务 数字政府 可视化大屏

带你认识数仓的增量备份核心设计

华为云开发者联盟

数据库 后端 华为云 数仓 企业号 1 月 PK 榜

Java高手速成 | 高质量代码编写最佳实践

TiAmo

编程好习惯 设计原则 Java’

ClickHouse 挺快,esProc SPL 更快

陈橘又青

二维码的秘密

古时的风筝

二维码 二维码生成

Serverless 奇点已来,下一个十年将驶向何方?

Serverless Devs

云图说 | Workflow:流水线工具,助您高效完成AI开发

华为云开发者联盟

人工智能 华为云 AI开发 企业号 1 月 PK 榜

甩掉容量规划炸弹:用 AHPA 实现 Kubernetes 智能弹性伸缩

阿里巴巴中间件

阿里云 Kubernetes 云原生 AHPA

为Web应用构建Spring—Seam混合型组件_Java_Srini Penchikala_InfoQ精选文章