首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EJB3.1和NIO2:监视文件系统

EJB3.1和NIO2:监视文件系统
EN

Stack Overflow用户
提问于 2013-01-17 14:29:01
回答 2查看 1.5K关注 0票数 1

我想我们大多数人都同意,使用NIO2是件很好的事情。假设您希望监视文件系统的某些部分,以获取传入的xml -文件,这现在是一项简单的任务。但是,如果我想将这些东西集成到现有的Java应用程序中,这样我就不必启动另一个服务(应用服务器和监视文件系统的)。因此,我有重型应用服务器和所有EJB3.1的东西和某种服务,监控文件系统,并采取适当的行动,一旦一个文件出现。有趣的是,适当的操作是创建消息并通过JMS发送消息,将两者集成到应用服务器中可能会更好。

我尝试了@Startup,但是部署冻结了(我知道我不应该在那里使用I/O,这只是一次尝试)。不管怎样..。有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2013-01-22 14:56:37

您可以创建一个在启动时加载并将监视委托给异步bean的单例程序。

代码语言:javascript
复制
@Singleton
@Startup
public class Initialiser {

    @EJB
    private FileSystemMonitor fileSystemMonitor;

    @PostConstruct
    public void init() {
        String fileSystemPath = ....;
        fileSystemMonitor.poll(fileSystemPath);
    }

}

然后异步bean看起来如下所示

代码语言:javascript
复制
@Stateless
public class FileSystemMonitor {

    @Asynchronous
    public void poll(String fileSystemPath) {
        WatchService watcher = ....;
        for (;;) {
            WatchKey key = null;
            try {
                key = watcher.take();
                for (WatchEvent<?> event: key.pollEvents()) {
                    WatchEvent.Kind<?> kind = event.kind();
                    if (kind == StandardWatchEventKinds.OVERFLOW) {
                        continue; // If events are lost or discarded
                    }
                    WatchEvent<Path> watchEvent = (WatchEvent<Path>)event;

                    //Process files....

                }
            } catch (InterruptedException e) {
                e.printStackTrace();
                return;
            } finally {
                if (key != null) {
                    boolean valid = key.reset();
                    if (!valid) break; // If the key is no longer valid, the directory is inaccessible so exit the loop.
                }
            }
        }
    }

}
票数 1
EN

Stack Overflow用户

发布于 2013-01-17 16:17:52

如果指定正在使用的服务器,但考虑过实现基于JMX的服务,可能会有所帮助吗?它比EJB更“中立”,更适合于后台服务,限制也较少。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14381274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档