我想在stateless
EJB方法中进行一些文件操作(复制)。我知道不推荐这样做。但是可能有一些特殊的 EJB 实现。 Wildfly最棒的是什么?
编辑 一些令人不安的旧链接:
"Sun blueprint: EJB Restrictions"
答案 0 :(得分:4)
Wildfly的最佳选择是什么?
只是做文件操作(认真)。这不是 - 如果安装了安全管理器以阻止您这样做。
无状态EJB与Java EE中的bean中的许多其他类型的方法没有什么不同。正如有些人认为的那样,并非在EJB方法中允许它,而是允许在CDI bean方法中使用它。事实并非如此。
那里有一些旧的信息,规范中说“不允许使用EJB”。但实际上意味着不允许 Java EE 。当时EJB被认为等同于Java EE,因此这就是这种广泛混淆的根源。
后来这个神话开始了它自己的生活,人们梦想着它被认为允许在Servlet中执行IO,而不是来自EJB,所以他们设计了各种疯狂的架构来委托IO(或线程,从EJB到Servlet的另一个好处。绝对可笑!
限制(如上所述,适用于整个Java EE,而不仅仅是EJB)也过于急切。绝对没有理由绝对禁止它。
您引用的一些答案是更具追溯力的原因。人们只是为了某种规则来弥补他们的世界的理由,即使原因和规则不匹配。
出于这个原因,规则已从EJB规范中删除。
这是正确的,在当前的EJB规范中,您将不再发现禁止从EJB使用IO(同样,从不打算说“EJB”,但应该被理解为“Java EE”)。 / p>
请参阅:
当然,与许多事情一样,使用IO时可能会或可能不必谨慎,但这与Java EE或EJB完全无关,几乎适用于任何应用程序,并且更依赖于IO的类型,你正在编写的应用程序和你的情况。
两个极端的例子:
您自己的个人Java EE应用程序,您是唯一一个在家中安装在raspberry pi上并且在启动时从外部位置读取小配置文件的开发人员 - >几乎总是好的。
大型集群企业应用程序由许多不同的团队开发,单独集成,单独部署,高度事务性,希望将临时数据写入文件系统,但必须在事务结束时再次清理 - >可能不是一个好主意。
在这两者之间实际上是无限量的变化。例如,我们有一个更大的企业应用程序,它以非常受控和特定的方式从Singleton对外部文件夹执行IO。该应用程序在高负载下为数百万用户提供服务,并且IO从未出现过问题。因此,即使是“企业”和“交易”也不一定意味着“没有IO”。这真的取决于。