【发布时间】:2017-07-22 01:34:03
【问题描述】:
我有以下设计。当客户端向服务器发出请求时,服务器会创建一个包含各种信息的状态。有各种无状态和有状态 bean 需要读取和写入此状态。参考这张不专业的图:
ComputationCycle 类是处理开始和分阶段工作的地方。在每个阶段,它都会调用其他 Manager 类(其行为类似于实用程序类)来帮助计算(图表仅显示 1 个阶段)。状态正在从 CC 类和管理器中读取和写入,两者都是无状态的。
State 包含有状态的Employee、Department 和Car 类(在一些不相关的数据结构中)。这些类也可以调用Manager 类。这是由一个简单的@Inject Manager1 完成的。与 CC 使用管理器的方式相同。
我的问题是如何从无状态类(以及 Car、Department 和 Employee 类中访问有状态状态(及其包含的类),尽管我认为解决一个将解决另一个) .我无法将有状态 bean 注入无状态 bean。那么在客户端发出请求并开始计算周期后,如何访问与该请求相关的状态?
一种解决方案是将状态传递给无状态类中的每个方法,但这确实很麻烦和臃肿,因为所有方法都会到处都有一个“愚蠢的”状态参数。
我怎样才能让这个设计按照我想要的方式工作?
【问题讨论】:
-
也许我误导了您的设计,但是将
@Stateful注入@Stateless不是正确的方法。你最终会得到不可预测的结果。正如其他人指出的那样,使用@Singleton可能会获得更好的结果。 -
@Leonardo covener 回答说我可以这样做。他错了吗?
-
网络上有很多资源表明这是一种错误的方法。这是一个堆栈溢出问题,回答了您的疑问:access existing instance stateful inside stateless, java ee 6
-
@Leonardo 我在他的回答 cmets 中也指出了这一点。他建议
@Inject而不是@EJB以及@RequestScoped应该可以工作。另外,这是ee7。你不同意他的回答吗?
标签: java jakarta-ee ejb cdi