【发布时间】:2011-09-21 16:03:40
【问题描述】:
我有一个 JavaEE 应用程序,它需要访问一个文件以获取有关安装的某些信息。
此访问是只读的,我不需要在应用程序中更改该文件,即我不需要直接“文件”,只需要它的内容(字节数组)。
对使用文件系统的 EJB 有限制。我确实了解与之相关的问题,但我无法找到替代解决方案。
文件路径应该可由用户配置,但无需跟踪文件内容的更改。加载后,除非用户选择另一个文件,否则它会保持不变。所以,我无法将它打包到应用程序存档中。
这种基于文件的方法是很久以前我们拥有的一些遗留系统做出的决定。现在没有实用的方法来更改它,即我需要我的 JavaEE 应用程序使用该文件(至少一次)来加载它的内容。
另一个限制是这个文件不能持久化到数据库中。
在不违反文件系统访问的 EJB 限制的情况下,我应该如何做到这一点?
我考虑过用户将文件上传到服务器,然后将这些信息保存在服务器上。但是我该怎么做呢?此信息应可全局访问,包括服务器的多个实例(例如在集群架构中)。
用户应该配置这个文件一次(不一定在主应用程序中,它可以是其他应用程序只是为了配置这个)。即使服务器重新启动,文件的内容应该仍然可以访问,而无需用户进行任何进一步的配置。
我在 GlassFish v2.1.1 服务器上使用 JavaEE 5 和 EJB 3.0 规范。
谢谢, 蒂亚戈。
【问题讨论】:
-
有趣的需求,为什么不能将数据持久化到数据库中?用户今天是否将文件上传给每个集群成员?
-
我无法将它保存在数据库中,因为该文件可能包含访问它的信息。所以如果不获取文件的内容,我就无法访问官方数据库。顺便说一句,如果我可以为此目的使用一个简单的数据库(如 H2),那就没问题了。用户应该只上传一次文件。今天我们直接访问文件系统,违反了限制。
-
如果它今天有效,为什么要改变它?虽然这不是一个好习惯,但我已经看到数十个基于 EJB 的应用程序访问文件系统......
-
我们现在没有使用集群设置,我们计划很快支持它。无论如何,即使它现在以这种方式工作,这也违反了 EJB 规范的限制,我们迟早会遇到这个解决方案的一些缺点。
标签: jakarta-ee glassfish ejb ejb-3.0 java-ee-5