2011-12-18 94 views
2

是否有一种可移植的方式来监视文件中已部署应用程序的更改?如何监视Java EE应用程序中的文件更改?

作为一个实际的例子,假设我有一个应用程序部署在Glassfish AS中。然后,当应用程序运行时,我在/ META-INF中部署一个配置文件,该文件将由我的应用程序中的某个线程读取。

那么,如何实现呢?如何监视一个文件(或一个目录,就此而言)进行更改?

回答

1

我认为提供这样的机制是不可能的。您假定文件系统上有“/ META-INF”,但我不相信Java EE应用程序需要分解到文件系统。 (是的,很多应用程序服务器都是出于各种各样的理由,但我确信这不是必需的)。

+0

有没有一种方法可以在不调用getClass()。getResourceAsStream()的情况下获取META-INF下的文件? – EdMelo 2011-12-18 21:26:05

+0

不使用J2EE API。 – jtahlborn 2011-12-18 21:29:49

+0

好的,谢谢。 :-) – EdMelo 2011-12-18 21:33:18

0

请检查@jtahlborn的答案。如果您有访问文件系统,那么你有两种选择:

  • 便携式低效的方式是定期轮询的文件系统,并检查是否有变化,无论是通过检查修改日期或CRCins文件(慢)

  • 有效的方法是使用本机操作系统功能在文件更改时得到通知。退房libnotify。但是,它需要本地本地库。

1

类加载器在第一次读取时不会从底层文件系统更新时大量缓存和资源。

无论如何,您都不允许访问和操作纯Java EE中的文件系统。原因很简单 - 如果你的线程被迁移到另一个节点(对于集群服务器),你的文件将不再可用。容器必须知道这些事情,以便能够正确处理它们,而文件系统不是“这些东西”之一。