Java EE程序员不会写入文件

Vol*_*lyy 14 java jboss java-ee

今天有人告诉我"Java EE程序员不写文件".为什么我不能从Java EE容器中写入文件(例如从JBoss)?怎么了?

oxb*_*kes 32

您应该在Java EE容器本身执行所有操作:您无法确定是否可以对文件系统进行任何一致的访问.这有很多原因,最明显的是容器内运行的应用程序将具有:

  • 不确定EJB的任何后续调用是否会在访问相同文件/文件系统的同一物理服务器上(例如,在群集时)
  • 不可能互相干扰(多个应用程序试图写入同一个文件)
  • 没有安全问题(一个应用程序编写机密数据,另一个应用程序可以阅

你还应该假设你不应该:

  • 创建自己的线程(容器将为您管理;如果您创建自己的线程,您可能会在CPU时间容器中饿死其他应用程序)
  • 使用socket-IO(也有安全问题)


ewe*_*nli 16

要查看的最佳页面是:http://www.oracle.com/technetwork/java/restrictions-142267.html

它详细介绍了Java EE编程模型的限制.

除了上面提到的安全性,可移植性,集群,线程之外,还考虑了事务和错误处理(文件系统不是事务性的).

然而,在JVM中没有黑魔法发生,你可以创建文件(只要你有相应的权限),使用静态变量,如果你知道你在做什么就创建线程.

最好花些时间来理解为什么通常会建议这些限制,而不是为了符合要求而跳转和写入JCA连接器.

  • 虽然可能没有"黑魔法",但容器的JVM安全管理器可能已设置为无法创建文件 (4认同)
  • 链接被破坏,愚蠢的Oracle人员杀死了Java (2认同)

Boz*_*zho 5

即使您可以访问文件系统,使用分布式系统也无法确定下次调用方法时,它将在编写文件的同一台机器上处理.


Pas*_*ent 5

根据Java EE规范,严格禁止EJB通过"资源管理器"(JDBC,JNDI,JCA等)之外的任何方式访问任何外部资源,这尤其包括通过java.io包的类访问本地文件系统.此外,也不能ClassLoader用于此类访问,例如从应用程序的类路径加载属性文件.

其他答案已经给出了这方面的原因:

  • 安全问题
  • 便携性问题
  • 群集问题
  • 线程问题

最终,这些问题的最佳资源是数据库.