我有一个需要访问文件的JavaEE应用程序,以获取有关安装的某些信息。
此访问权限是只读的,我不需要在应用程序中更改该文件,即我不需要直接使用“文件”,只需要内容(字节数组)。
使用文件系统的EJB存在限制。我确实理解与之相关的问题,但我无法找到替代解决方案。
文件路径应该由用户配置,但不需要跟踪文件内容的更改。加载后,除非用户选择其他文件,否则它将保持不变。所以,我无法将其打包在应用程序存档中。
这种基于文件的方法是很久以前由我们拥有的一些遗留系统做出的决定。现在没有切实可行的方法来改变它,即我需要我的JavaEE应用程序使用该文件(至少一次)来加载它的内容。
另一个限制是该文件无法在数据库中保留。
如何在不违反EJB限制的文件系统访问的情况下执行此操作?
我考虑过用户将文件上传到服务器,然后在服务器上保留此信息。但是我该怎么做?此信息应全局可访问,包括服务器的多个实例(例如,在群集体系结构中)。
用户应该配置此文件一次(不一定在主应用程序中,可能只是配置此应用程序的其他应用程序)。即使服务器重新启动,仍然可以访问文件的内容,而无需用户进行任何进一步的配置。
我在GlassFish v2.1.1服务器上使用带有EJB 3.0规范的JavaEE 5。
谢谢, 蒂亚戈。
答案 0 :(得分:1)
我的建议如下:
希望它有用。
答案 1 :(得分:0)
您有两种来自EJB的选择:
1)违反规范并使用标准Java File API从EJB访问它。如果您了解集群,交易等方面的含义,那么可以是“安全的”。由于您只进行只读访问,因此您应该没问题。
2)使用支持文件系统访问的JCA适配器。你可以编写自己的,尝试一个开源的(我认为有一个在源伪造),或购买一个 - 我认为oracle出售一个用于Glassfish oracle版。你的情况可能过度。
您还可以将Web应用程序组件添加到项目(Servlet)中,该组件可以访问文件,因为该规范中允许使用文件io。