Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >servlet规范是否保证单线程初始化和内联attributeChanged事件?

servlet规范是否保证单线程初始化和内联attributeChanged事件?
EN

Stack Overflow用户
提问于 2012-01-05 02:28:59
回答 1查看 434关注 0票数 2

我有一个web应用程序,它在初始化ServletContext时从外部系统引导事件接收器。所有需要接收事件的组件都在侦听ServletContext属性事件,并将自己附加为侦听器。由于我不希望事件侦听器错过事件,所以我只想在所有侦听器被附加之后才启动事件源。

在Servlet2.5和3.0规范中,我找不到任何用于初始化的线程需求,所以我假设完全异步初始化模型,但是我注意到Tomcat会立即从setAttribute()方法触发setAttribute属性更改的事件。这意味着,如果所有其他servlet容器都这样做,我可以简化我的启动过程。

编辑:(按要求),下面是一个示例(我已经尝试尽可能地具体)。在我的web.xml中,我已经注册了:

  • BootstrapEventSourceContextListener on servlet-context初始化:
    1. 创建事件源并将其设置为servlet-context属性。事件源此时未启动(即不发出events)

)。

  • ConsumerAContextAttributeListener收到包含事件源的属性已经设置的通知时:
    1. 从servlet-context attribute
    2. instantiates ConsumerA
    3. 中查找事件源,将ConsumerA附加到event-source
    4. sets,ConsumerA的数据模型作为servlet-context

中的属性。

  • ConsumerBContextAttributeListener -与Comsumer A
  • ConsumerCContextAttributeListener相同-与A和B相同,但它也取决于访问页面时B
  • StartEventSourceFilter的数据模型:
    1. 从事件源
    2. 块从servlet-context
    3. starts查找事件源,直到事件源接收到初始snapshot
    4. continues来呈现page

问题是我是否真的需要StartEventSourceFilter,还是保证在设置事件源属性(即属性侦听器不推迟)时,所有的使用者都会被附加。我关心Tomcat,Jetty和Websphere。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-11 17:21:14

由于没有人回答,我挖了一下,下面是我发现的:

Servlet3.0规范没有提到侦听器是内联通知还是异步通知,但它在第11章中提供了以下保证:

  • 11.2所有有资格处理特定事件的侦听器按照在web.xml
  • 11.5 ServletContext生命周期监听器中注册的顺序调用,然后在为其第一个请求服务的容器之前实例化。没有显式的线程规范,但考虑到上面的点保证排序,我假设这意味着它们也将被顺序和同步地调用(等待当前实例在下一个调用之前完成)--这很可能意味着相同的线程。也没有明确说明,但我认为合理的假设是,容器将等待所有通知方法完成后才能服务第一个请求。
  • 11.5属性对ServletContext和HTTP的更改可以同时运行。考虑到这也提到了HTTP会话,我认为这意味着如果servlet修改上下文,这些修改可以同时运行。在我们的例子中,上下文侦听器修改上下文属性,就像我们在前面指出的那样,它们是同步运行的,并且由于ctx-属性侦听器的排序要求保持不变,我们可以假设属性侦听器在init时按顺序运行。

剩下的唯一问题是servlet-context属性侦听器是否总是与setter内联运行,还是有将它们排队的实现(比如将多个更改事件合并到同一个属性中)。我认为,合理的假设是,规范和所有实现的意图将内联地通知侦听器(并为Tomcat和Jetty确认了这一点)。

底线是:当从上下文init侦听器设置上下文属性时,可以合理地假定在setter方法返回时所有上下文属性侦听器都已经完成。规范没有显式地保证这一点,但是所有指定的约束和保证都指向这个方向。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8740950

复制
相关文章
使用 AForge.NET 做视频采集
AForge.NET 是基于C#设计的,在计算机视觉和人工智能方向拥有很强大功能的框架。btw... it's an open source framework. 附上官网地址: http://www.aforgenet.com/aforge/framework/ 。 今天要介绍的是AForge中的视频采集功能,这里的视频包括从摄像头等设备的输入和从视频文件的输入。 首先来认识一下 视频源播放器:VideoSourcePlayer,从摄像头和文件输入的视频,都会通过它来播放,并按帧(Frame)来输出Bit
Shao Meng
2018/04/28
2.1K0
在 WPF 中实现融合效果
融合效果是指对两个接近的元素进行高斯模糊后再提高对比度,使它们看上去“粘”在一起。在之前的一篇文章中,我使用 Win2D 实现了融合效果,效果如下:
dino.c
2022/10/05
1.3K0
在 WPF 中实现融合效果
WindowsXamlHost:在 WPF 中使用 UWP 控件库中的控件
在 WindowsXamlHost:在 WPF 中使用 UWP 的控件(Windows Community Toolkit) 一文中,我们说到了在 WPF 中引入简单的 UWP 控件以及相关的注意事项。不过,通常更有实际价值的是更复杂的 UWP 控件的引入,通常是一整个 Page。
walterlv
2020/02/10
5.9K0
在 WPF 中使用 x:Reference
发布于 2018-10-13 22:24 更新于 2018-12-14 01:54
walterlv
2020/02/10
1.5K0
WPF 在 DrawingContext 的 push 如何使用
如果在一个 DrawingContext 画出一个 DrawingVisual ,如何修改这个 DrawingVisual 的大小,对他进行变换?
林德熙
2022/08/04
4450
WPF 在 DrawingContext 的 push 如何使用
如果在一个 DrawingContext 画出一个 DrawingVisual ,如何修改这个 DrawingVisual 的大小,对他进行变换?
林德熙
2018/09/18
1.7K0
在.NET Core 3.0中的WPF中使用IOC图文教程
我们都知道.NET Core 3.0已经发布了第六个预览版,我们也知道.NET Core 3.0现在已经支持创建WPF项目了,刚好今天在写一个代码生成器的客户端的时候用到了WPF,所以就把WPF创建以及使用IOC的过程记录一下,希望能对大家有所帮助。当然文章实例我就以我曾阅读过的一篇文章的示例代码来进行演示了。
依乐祝
2019/07/03
8680
在.NET Core 3.0中的WPF中使用IOC图文教程
WPF 的 ElementName 在 ContextMenu 中无法绑定成功?试试使用 x:Reference!
发布于 2018-10-13 21:38 更新于 2018-10-14 04:25
walterlv
2020/02/10
3.1K0
在WPF桌面程序中使用ECharts展示图表
在WPF桌面系统需要实现仪表盘(dashboard是商业智能仪表盘(business intelligence dashboard,BI dashboard)的简称,它是一般商业智能都拥有的实现数据可视化的模块,是向企业展示度量信息和关键业务指标(KPI)现状的数据虚拟化工具。)形式的图表展示功能,研究了WPF开源的各个图件库,一般实现代码都比较复杂,灵活性不够,展示图表效果也不尽人意。后来想到ECharts,Echarts (ECharts)是百度公司出品的,算是百度不可多得的良心之作,使用方便灵活,而且
程序你好
2018/07/20
3.1K0
在 WPF 程序中应用 Windows 10 真•亚克力效果
从 Windows 10 (1803) 开始,Win32 应用也可以有 API 来实现原生的亚克力效果了。不过相比于 UWP 来说,可定制性会差很多。
walterlv
2023/10/22
5520
在 WPF 程序中应用 Windows 10 真•亚克力效果
学习WPF——了解WPF中的XAML
XAML的简单说明 XAML是用于实例化.NET对象的标记语言,主要用于构建WPF的用户界面 XAML中的每一个元素都映射为.NET类的一个实例,例如<Button>映射为WPF的Button对象 XAML可以在一个元素中嵌套另一个元素,例如Grid元素可以嵌套Button元素 了解XAML VisualStudio创建一个窗口,默认情况下产生的代码如下: 这段代码中包含两个标记元素,一个是Window,一个是Grid Window是WPF顶级元素的一种,还有另外两种顶级元素Page和App
liulun
2018/01/12
2K0
解决WPF在XP上使用微软雅黑字体
WPF项目,全局设置的微软雅黑,但是XP上没有这个字体,默认显示的是宋体。开始的思路是WPF可以将字体作为资源,在程序中使用,但是微软雅黑有两个文件,mysh, TTF和myshbd,TTF,单独加载
kiki.
2022/09/29
1K0
使用 Uno Islands 在现有 WPF 里面嵌入 Uno 框架
随着 2022 9 月份 Uno 发布了 4.5 版本,现有的 WPF 应用多了一个新的开发模式,那就是通过 Uno Islands 技术,在现有的 WPF 应用里面嵌入 Uno 应用。通过此方式可以辅助在现有的 WPF 项目里面,部分功能迁入 Uno 项目,或者是某些新开发功能通过 Uno 实现,从而利用 Uno 跨平台的能力,逐个功能点支持跨平台功能。逐个小功能接入的方式,让开发者不需要为一次性迁移一个庞大的项目而烦恼
林德熙
2023/04/07
6280
WPF Visifire使用
1.Visifire的创建需要引用的DLL包【WPFToolkit.dll;WPFVisifire.Charts;WPFVisifire.Gauges(这个以后会用到)】
全栈程序员站长
2022/09/13
4890
WPF Visifire使用
WPF使用URL协议实现网页中打开应用
网页唤起指定软件,其实就是利用URL来执行一个关键字Key,这个Key是注册表中的一个键,Value是指定路径的exe,亦可携带参数启动exe;
码客说
2022/10/28
1.1K0
WPF 使用 SharpDX
先介绍一下 SharpDx ,一个底层封装的 DirectX 库,支持 AnyCpu ,支持 Direct3D9, Direct3D11, Direct3D12,Direct2D1。支持 win32 程序和商店程序。
林德熙
2018/09/19
1.3K0
WPF 使用 SharpDX
WPF中的MatrixTransform
WPF中的MatrixTransform            周银辉 虽然在WPF中可以使用TranslateTransform、RotateTransform、ScaleTransform等进行
菩提树下的杨过
2018/01/22
1.4K0
WPF中的MatrixTransform
WPF中ListView排序
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
5160
WindowsXamlHost:在 WPF 中使用 UWP 的控件(Windows Community Toolkit)
Windows Community Toolkit 再次更新到 5.0。以前可以在 WPF 中使用有限的 UWP 控件,而现在有了 WindowsXamlHost,则可以使用更多 UWP 原生控件了。
walterlv
2020/02/10
4.7K0
修改WPF中connectionString[通俗易懂]
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说修改WPF中connectionString[通俗易懂],希望能够帮助大家进步!!!
Java架构师必看
2022/07/19
4440

相似问题

WPF使用AForge创建视频

12

在WPF应用程序上使用WebCam实现AForge.Net

48

C# WPF AForge :如何使视频平滑?

18

在AForge库中使用ImageProcessingLog

10

使用Aforge保存图像

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文