- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在传统的 n 层 Web 应用程序中,servlet 用于 Web 层,ejbs(2.0) 用于业务层,使 servlet 模型成为多线程而 ejb 模型成为单线程的基本原理是什么?
即所有请求只有 1 个 servlet 实例,但对于 ejbs,每个请求都会从 bean 池中分配一个新的 bean 实例。
最佳答案
特定 Servlet
确实只有一个实例,因为它们应该是无状态的。实际上,情况并非总是如此,但也只能这样了。
但是,有多个无状态 session Bean
(SLSB) 实例,并且这些实例被池化。
根据其定义,无状态 session Bean
是无状态的,因此从表面上看,这似乎像是一个悖论。问题是,虽然无状态 session Bean 对于对它们进行的单独调用来说是无状态的,但实际上它们通常具有状态。
此状态采用对其他资源的引用的形式。 非线程安全的JPA实体管理器
就是一个典型的例子。在对无状态 session bean 的单次调用期间,调用者必须具有对此资源的独占访问权。当调用返回时,下一个调用者可以拥有独占访问权限,等等。
如果使用单个实例,那么所有调用者要么必须互相等待(这当然会影响性能),要么他们将同时访问这个单个实例。在后一种情况下,bean 实现者必须手动锁定非线程安全资源,例如实体管理器,这通常很脆弱、容易出错,并且最终仍然导致调用者等待每个资源。其他。
所以,为了提高性能,同时仍然有安全保障,采用了多实例的方式。
然后,这些实例将被池化并重新使用,而不是为每个请求重新创建,因为查找、初始化和注入(inject) Bean 所需的所有依赖项可能会非常耗时。
因此,所有这些自动意味着如果您将实体管理器或其他非线程安全资源注入(inject)到 Servlet 中(这是允许的),您可能会遇到问题。这是 Java EE 架构中的一个小漏洞,当然可以通过简单地使用无状态 session bean 轻松解决。
关于java - 多线程servlet;单线程EJB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4498234/
此代码似乎在启用优化的广泛使用的编译器上中断,尽管它在 Visual Studio 中运行良好。 struct foo { foo(int a) { s[0] = '0'+a%10;s[1]
我想要一个图表,其中有一个单线箭头,如下所示: 1 2 3 4 5 或者像这样(其中/假设是一个箭头:)): \/ -----------------
我正在为 Java 编写自定义规则。有两个 Tree.KIND 实例(STRING_LITERAL 和 ASSIGNMENT)需要捕获。有一个特定的行,字符串文字和赋值的逻辑都会引发问题。但 Sona
Rosettacode.org 在 Ruby 中有这个出色的单行 FizzBuzz 解决方案。 1.upto(100){|n|puts'FizzBuzz '[i=n**4%-15,i+13]||n
很多时候我使用了这个命令,它在当前目录打开了一个临时的 HTTP 服务器: python3 -m http.server 现在我需要接收文件,有没有打开ftp服务器的一行命令? 我只是在寻找一个命令行
相关主题 std::unique_ptr, deleters and the Win32 API 要将 Win32 句柄用作 RAII,我可以使用以下行 std::unique_ptr::type,
我认为必须有一个单行 Guava 解决方案来将一个不可变列表转换为另一个不可变列表,但我找不到它。假设我们有以下对象: ImmutableList input = ImmutableList.of("
我有以下 Highcharts ( http://www.highcharts.com ) 散点图。请注意,轴从 -10 开始,到 10 停止,中间为 0。我希望每条 0 线的宽度或颜色都与其他线不同
我有一个项目需要将一个视频文件与另一个音频文件合并。预期的输出是一个视频文件,其中包含来自实际视频的音频和合并后的音频文件。输出视频文件的长度将与实际视频文件的大小相同。 是否有单行 FFMPEG 命
我在 python3 类中有 2 个列表: self.keys = ["a","b","c","d"] self.values = [1,2,3,4] len(self.keys) == len(se
我有一个不同长度的数组列表,我想将它们组合成一个最大维度的矩阵,并在末尾填充零。例如(伪代码): combine( [1,2,3], [4,5]) [[1,2,3],[4,5,0]] 这是我目前的解决
例如,给定 i=5 和 n=8,我想生成 [0;0;0;0;1;0; 0;0]。具体来说,我想生成向量 v 以便: v = zeros(n,1); v(i) = 1; 有没有一种(合理的)方法可以在一
我是一名优秀的程序员,十分优秀!