seam in action 第一部分 1.3

本文探讨Seam框架如何简化JavaEE开发,通过整合JSF、JPA和POJO组件,解决传统技术间协同工作的难题。Seam通过统一组件管理、减少XML配置、使用注解等方式降低开发复杂度。

1.3 seam通向统一的方法
    Seam通过结束Java EE平台的多样化以及统一它的组件、填补经常被批评的空白、使Java EE技术更易访问、将其触角延伸到第三方框架和类库、将这些技术很好的结合并使其具有一致性从而使Java EE重新焕发活力。尽管Seam的特性广范,但Seam的核心任务是让JSF,JPA和POJO组件能一起工作,使开发人员能把精力投入到构建应用上,而不是放到集成不相关的技术上

1.3.1 SeamJSFJPAPOJO组件融为一体

使不同技术之间协同工作不仅仅是在它们之间来回传递数据这点事,要创建使他们之间边界变得模糊的相互合作,使他们就像一个统一的整体。Seam通过使EJB3web层相接、为JPA找到合适的位置、去除无效的JSF受管bean容器来实现Seam集成统一的目的。在检阅Seam是如何处理这些挑战性问题之后,你就趁机决定那个Seam堆栈适合你。

 

帮助在web方面受到挑战的EJB3

EJB在设计上有意使其组件不能直接绑定到JSF视图,因此EJB组件的可扩展性、事务性、线程安全和安全非常棒,但是如果将他们完全独立于web层,仅能通过JSF backing bean作为中间者访问,这样做的就不怎么好了。由于要想整合EJB会很复杂,所以这种隔离使他们在web应用有限。它们不能够访问任何web层范围(request,session,application)JSF组件树中存放的数据,因此削弱了它们对应用的非常重要部分的了解(Seam的目标就是真正让EJB3组件能够访问Seam有状态范围的数据)。而且,从web层使用EJB组件时候很容易在并发情况下带来麻烦。举例来说,Java规范并不要求Java EE容器必须实现对同一个有状态会话bean访问的序列化,而是把这个工作留给了开发人员来处理或者是捕获并发访问导致的异常。同样,当处理非线程安全的资源如JPA EntityManager的时候也会出现复杂情况。开发人员在web层安全的使用EJB组件的唯一方式就是通过一个适配器层进行交互。

       Seam使EJB3组件能够访问web层范围的数据,提供了管理EJB3组件状态的一种方式,所有可以在web层安全的使用,甚至对并发访问有状态组件的序列化问题都交给了基础设施来负责而不是程序员。同时,seam中也不在有访问非线程安全的问题因为Seam恰当地处理了数据范围。

       反过来,JSF同样面临访问业务层组件的挑战。
JSF挂接到更好的后端组件

       JSF有它自己的受管bean容器,与基于注解配置EJB3正好相反,它是通过冗长的XML描述文件来配置的,只有有限的依赖注入功能尽管JSF受管bean可以保存到web层上下文中,但是他们是没有什么价值的对象,缺乏可扩展性、事务原子性以及安全性(可能这就是为什么它们被成为beans而不是组件的原因)。它们必须伸手够到EJB3组件以获得这些业务服务,这时你发现正陷入了创建连接EJB3组件和作用在他们上的UI的门面层的泥潭。

       为了改正这个错误搭配,Seam使JSF UI组件直接利用EJB组件替代JSF“后端”beansaction监听器。从此也就不需要受管bean的门面层和冗余的XML描述符了。通过消除由于错误搭配引起的复杂性,促进了开发人员放宽了对过重的架构设计的严格要求。

       你是那个Seam

       Seam不是扔到你桌子上不负责任的一些类和构件的集合。Seam成功的关键在于它提供了能够方便操作且经过良好测试的资源包。这些资源包包括许多第三方离开兼容版本。你可以把购买Mac的简单和购买Dell做个比喻。当你购买Dell时候,你可以定制组装,完全可以按照你的要求定制,但是你需要大量的思考并且要付出努力。相比之下,购买Mac更加简单,你在laptopnotebook之间选择,然后选择屏幕尺寸,剩下其他任何细节都有Apple为你做了。Seam有一组类似的选择集,你选择一个状态提供着和持久化提供者(继续选,一个web框架),剩下其他任何的细节都由Seam开发者为你做。通过去除太多的选择负担,Seam可以使开发者的生活更加轻松。



 

1.3总结了在Seam应用中两个主要技术的选择,就是状态提供者和持久化提供者。状态提供者是处理应用程序逻辑和响应UI中的事件的技术。持久化的提供者就是从持久化存储仓库存取数据。Seam管理持久化提供者,允许持久化上下文在跨越一系列页面而延续,并在多个组件之间共享。

       前面已经提到过,Seam不要求必须使用EJB3。你可以选择使用JavaBeansHibernate而不用担心在功能上失去优势。从广义上术语JavaBean包括所有非EJB组件,所以Spring beans也可以看作是JavaBean。另一个流行的选择就是通过JPAJavaBeans结合而部分的采用EJB3,这在本书的例子中就有。

       Seam之前,让这些技术能一同使用就意味着要集成到管理他们的容器。EJB3有它自己的容器,JSF也有。Spring同样也是。同时,写这些粘合代码的任务就落到了开发人员身上。对中心集成点的需要促使了Seam上下文组件模型的诞生。

1.3.2上下文组件模型

       Seam的核心就是上下文组件模型。在你往下看之前,说出三个你认为这个术语对你的意义的短句。(1)Seam是一个根据组件定义来构建对象的工厂。(2)在创建完后,每个对象都保存到基于不同生命周期的上下文的容器中,使对象能够上下文关联并且持有状态。(3)Seam促进了不同上下文的有状态对象之间的合作,根据对象各自类中的元信息将他们组装到一起。第四章深入研究了组件和上下文,你会有机会学习到在应用中如何使用它们。

       在这部分,你将了解Seam模型是如何为前面所将技术的统一提供基础。通过组件注册、注解、配置例外(configuration by exception)、方法拦截器和统一表达式语言结合来促进统一。

一个中心组件登记处

Seam快速取得Java EE组件登记到注册中心,无论是EJB session beansJavaBeansSpring beans或者是JPA entities。任何集成到Seam堆栈的技术都可以指望Seam 容器根据组件名称取出组件实例并与容器协同工作来交互状态。可以访问容器的技术包括Seam 组件,JSF视图模板,Java Business Process Management process definitionsDrools rulesSpring beansJavaScript以及更多技术。Seam容器统一了Servlet API的变量范围,同时引入了它自己的两个有状态范围,对话(conversation)和业务处理(business process),使其更适合支持用户交互。

       当然,不仅就是注册组件,它们也会被重新召集。Seam巡查类路径并列举任何包含有能够标识它们是组件的注解的类,马上讲到。

       注解优于XML

Seam削减Java EE配置方式之一就是避免没有必要的XML。尽管曾经由于XML的灵活性被认为是可取的,但是XML是外部的配置文件,很快与应用程序逻辑不同步了(失去了控制)Seam使配置文件和代码一致,并容易定位和重构。

    当在将JSF受管bean要被定义到XML的时候,Seam说“不”,图1.4说明了Seam的原则。Seam将组件的声明变为单个注释@name,放在class定义之上。Seam组件可以替代JSF受管beans

 


如果你足够投入的话,在Seam你中你可以完全不使用XML,这对于一些地方有必要使用它的地方而可以不用肯定会让人大吃一惊。Seam只是在注释不能满足需求的时候或者在隔离可覆盖的配置文件的时候才用MXL。如果你不喜欢注释,那么你也可以不用注释,Seam仍然可以让你使用XML定义组件,这是第五章的主题。我个人而言,注释更简明更容易维护。

XML转到使用注解不只是提升了敲击键盘的效率,它还是Seam的配置特例策略的核心部分,只有真正需要XML时候才使用它。

配置例外(CONFIGURATION BY EXCEPTION)

说软件是“有主见的”,这是解释配置例外一个好方式。 通常的观念就是:框架更愿意按照它所被设计的那样去操作。你使用默认的东西的越多,你所需要做的工作就越少。只有当软件需要做一些与典型行为不同工作的时候才需要你介入并发挥你的作用。

Seam中,配置例外与注解紧密合作。注解给Seam一个所使用的行为暗示,然后Seam依靠合理的默认和标准的命名规范尽可能猜测这个声明的含义以减轻你的工作负担。通过这种方式,Seam在显式的声明和推测功能之间实现了很好的平衡。

注解减少了敲击键盘次数,消除了XML。不仅如此,注释提供了类定义的附加元信息,这比把元信息存贮在外部文件中更容易找到和重构。

使用服务进行装饰

因为是通过Seam容器来请求组件,Seam有机会来管理组件的整个生命周期。Seam使用拦截器装配对象,在将新创建的实例往下传递之前,把其包装到一个称为代理对象的外壳中。这让Seam充当了操作木偶的人,在每个方法调用的时候添加其行为,像图1.5描述的样子。拦截器负责使Seam能够正常工作的许多隐含逻辑,例如,开始事务和提交事务、强制实施安全以及使对象与其他对象关联。如果处于某些原因,拦截器不能使用或者需要与默认行为不同,那么在类定义上的注解会给它一个如何应用附加功能的暗示。



 

 

最后一部分难以统一的就是能够为应用提供一种通用的语法来访问容器中的组件。这就是统一表达式语言的作用。

延伸统一表达式触及的范围

统一表达式语言是一个用于解决变量以及将组件绑定到JavaBeans的属性、方法的可描述性的语法。它首次被引入是为了改善JSFJSP整合、为了查询存储在web层的受管bean和其他对象,并作为JSF绑定机制的基础。然而它的影响非常广范,这多谢其可插拔的设计。

EL是一个开放的API,允许注册自定义的resolver,这使EL变为一个变化的集线器,任何层的代码要想利用EL统一变量上下文都可以使用开放APIEL使你免去在由不同技术所使用的变量上下文和你的应用之间要开发自定义连接桥的负担。尽管你曾经只是在视图层看到用过它,但实际上它与web一点都不相关。

Seam以两者方法来使用EL。首先,Seam注册了一个能够感知Seam container的自定义EL resolver。在应用中任何可以使用EL表达式的地方(

代码转载自:https://pan.quark.cn/s/f87b8041184b Language: 中文 欢迎来到戈戈圈! 当你点开这个存储库的时候,你会看到戈戈圈的图标↓ 本图片均在知识共享 署名-相同方式共享 3.0(CC BY-SA 3.0)许可协议下提供,如有授权遵照授权协议使用。 那么恭喜你,当你看到这个图标的时候,就代表着你已经正式成为了一名戈团子啦! 欢迎你来到这个充满爱与希望的大家庭! 「与大家创造更多快乐,与人们一起改变世界。 」 戈戈圈是一个在中国海南省诞生的创作企划,由王戈wg的妹妹于2018年7月14日正式公开。 戈戈圈的创作类型广泛,囊括插画、小说、音乐等各种作品类型。 戈戈圈的目前成员: Contributors 此外,支持戈戈圈及本企划的成员被称为“戈团子”。 “戈团子”一词最初来源于2015年出生的名叫“团子”的大熊猫,也因为一种由糯米包裹着馅料蒸熟而成的食品也名为“团子”,不仅有团圆之意,也蕴涵着团结友爱的象征意义和大家的美好期盼,因此我们最终于2021年初决定命名戈戈圈的粉丝为“戈团子”。 如果你对戈戈圈有兴趣的话,欢迎加入我们吧(σ≧︎▽︎≦︎)σ! 由于王戈wg此前投稿的相关视频并未详细说明本企划的信息,且相关视频的表述极其模糊,我们特此创建这个存储库,以文字的形式向大家介绍戈戈圈。 戈戈圈自2018年7月14日成立至今,一直以来都秉持着包容开放、和谐友善的原则。 我们深知自己的责任和使命,始终尊重社会道德习俗,严格遵循国家法律法规,为维护社会稳定和公共利益做出了积极的贡献。 因此,我们不允许任何人或组织以“戈戈圈”的名义在网络平台或现实中发布不当言论,同时我们也坚决反对过度宣传戈戈圈的行为,包括但不限于与戈戈圈无关的任何...
内容概要:本文详细介绍了一个基于YOLOv8的血细胞智能检测系统全流程开发指南,涵盖从环境搭建、数据准备、模型训练与验证到UI交互系统开发的完整实践过程。项目利用YOLOv8高精度、高速度的优势,实现对白细胞、红细胞和血小板的自动识别与分类,准确率超过93%,单张图像检测仅需0.3秒。通过公开或自建血细胞数据集,结合LabelImg标注工具和Streamlit开发可视化界面,构建了具备图像上传、实时检测、结果统计与异常提示功能的智能系统,并提供了论文撰写与成果展示建议,强化其在医疗场景中的应用价值。; 适合人群:具备一定Python编程与深度学习基础,从事计算机视觉、医疗AI相关研究或项目开发的高校学生、科研人员及工程技术人员,尤其适合需要完成毕业设计或医疗智能化项目实践的开发者。; 使用场景及目标:①应用于医院或检验机构辅助医生进行血涂片快速筛查,提升检测效率与一致性;②作为深度学习在医疗影像领域落地的教学案例,掌握YOLOv8在实际项目中的训练、优化与部署流程;③用于学术论文写作与项目成果展示,理解技术与临床需求的结合方式。; 阅读建议:建议按照“数据→模型→系统→应用”顺序逐步实践,重点理解数据标注规范、模型参数设置与UI集成逻辑,同时结合临床需求不断优化系统功能,如增加报告导出、多类别细粒度分类等扩展模块。
基于蒙特卡洛,copula函数,fuzzy-kmeans获取6个典型场景进行随机优化多类型电动汽车采用分时电价调度,考虑上级电网出力、峰谷差惩罚费用、风光调度、电动汽车负荷调度费用和网损费用内容概要:本文围绕多类型电动汽车在分时电价机制下的优化调度展开研究,采用蒙特卡洛模拟、Copula函数和模糊K-means聚类方法获取6个典型场景,并在此基础上进行随机优化。模型综合考虑了上级电网出力、峰谷差惩罚费用、风光可再生能源调度、电动汽车负荷调度成本以及电网网损费用等多个关键因素,旨在实现电力系统运行的经济性与稳定性。通过Matlab代码实现相关算法,验证所提方法的有效性与实用性。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事新能源、智能电网、电动汽车调度相关工作的工程技术人员。; 使用场景及目标:①用于研究大规模电动汽车接入电网后的负荷调控策略;②支持含风光等可再生能源的综合能源系统优化调度;③为制定合理的分时电价政策及降低电网峰谷差提供技术支撑;④适用于学术研究、论文复现与实际项目仿真验证。; 阅读建议:建议读者结合文中涉及的概率建模、聚类分析与优化算法部分,动手运行并调试Matlab代码,深入理解场景生成与随机优化的实现流程,同时可扩展至更多元化的应用场景如V2G、储能协同调度等。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值