使用 Wildly Ejb 实现的文件操作

File operations with Wildly Ejb implementation

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

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

"Sun blueprint: EJB Restrictions"

EJB Bad Practices: Use of Java I/O

Whosebug

What is the best thing for Wildfly ?

只是在做文件操作(认真)。这并不是说安装了安全管理器来阻止您这样做。

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

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

后来这个神话开始了它自己的生活,人们梦想着允许在 Servlet 中执行 IO 而不是从 EJB 执行 IO 的场景,因此他们设计了各种疯狂的架构来委托 IO(或线程,另一个最爱)从 EJB 到 Servlet。太可笑了!

限制(如上所述,旨在针对整个 Java EE,而不仅仅是 EJB)也太急切了。根本没有理由绝对禁止它。

你引用的一些答案是比较追溯的原因。人们只是编造规则的理由以某种方式为他们的世界辩护,即使理由和规则不匹配。

因此,规则已从 EJB 规范 中删除。

没错,在当前的 EJB 规范中,您将不再发现禁止使用来自 EJB 的 IO(同样,这绝不意味着 "EJB",但应读作 "Java EE").

参见:

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

两个极端的小例子:

您自己的个人 Java EE 应用程序,您是您在家中安装在 raspberry pi 上的唯一开发人员,并且在启动时从外部位置读取一个小配置文件 ->几乎总是好的。

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

在这两者之间,实际上是无穷无尽的变化。例如,我们有一个更大的企业应用程序,它以非常可控和特定的方式从单例中对外部文件夹进行 IO。该应用程序在高负载下为数百万用户提供服务,并且 IO 从未出现过问题。所以即使 "enterprise" 和 "transactional" 也不一定意味着 "no IO"。这真的取决于。