使用狂野Ejb实现的文件操作



我想在stateless EJB方法中进行一些文件操作(复制)。我知道不建议这样做。但是对于某些特殊的EJB实现来说,这是可能的。对Wildfly来说最好的是什么?

编辑 一些令人不安的旧链接:

"Sun蓝图:EJB限制"

EJB不良实践:使用Java I/O

Stackoverflow上

对Wildfly来说最好的是什么?

正在做文件操作(认真的)。这并不是说安装了一个安全管理器来阻止你这样做。

无状态EJB与Java EE中bean中的许多其他类型的方法没有什么不同。并不是像有些人认为的那样,在EJB方法中不允许这样做,而在CDI bean方法中允许这样做。这根本不是事实。

有一些旧的信息在那里,规范说"EJB不允许"。但实际上的意思是Java EE不被允许。当时EJB被视为等同于Java EE,所以这就是这种广泛传播的混淆的根源。

后来,这个神话开始了它自己的生活,人们梦想着可以在Servlet中做IO,但不能从EJB中做IO,所以他们设计了各种疯狂的体系结构,将IO(或线程,另一个喜欢的)从EJB委托给Servlet。绝对荒唐可笑!

限制(如上所述,针对整个Java EE,而不仅仅是EJB)也被过于急切地加入。根本没有理由绝对禁止它。

你引用的一些答案是更溯及既往的原因。人们只是为一个规则编造理由,以某种方式证明他们的世界是合理的,即使理由和规则并不匹配。

由于这个原因,规则已从EJB规范中删除。

没错,在当前的EJB规范中,您将不再发现禁止从EJB中使用IO(同样,这并不意味着说"EJB",而应该读为"Java EE")。

:

  • https://blogs.oracle.com/marina/entry/ejb_3_2_news
  • https://blogs.oracle.com/arungupta/entry/what_s_new_in_ejb

当然,与许多事情一样,您在使用IO时可能需要也可能不需要谨慎,但这与Java EE或EJB完全无关,并且几乎适用于任何应用程序,并且更多地取决于IO的类型,您正在编写的应用程序的类型和您的情况。

两个极端的小例子:

您自己的个人Java EE应用程序,您是唯一的开发人员,您在家中安装在您的树莓派上,并且在启动时从外部位置读取一个小配置文件->基本上总是可以的。

由许多不同团队开发的大型集群企业应用程序,单独集成,单独部署,高度事务性,想要将临时数据写入文件系统,但在事务结束时必须再次清理->可能不是这样一个好主意。

在这两者之间有无限的变化。例如,我们有一个更大的企业应用程序,它以一种非常可控和特定的方式从Singleton向外部文件夹执行IO操作。该应用程序在高负载下为数百万用户提供服务,IO从未出现过问题。因此,即使是"企业"one_answers"事务性"也不一定意味着"没有IO"。

最新更新