我想我们大多数人都同意,使用NIO2是件很好的事情。假设您希望监视文件系统的某些部分,以获取传入的xml -文件,这现在是一项简单的任务。但是,如果我想将这些东西集成到现有的Java应用程序中,这样我就不必启动另一个服务(应用服务器和监视文件系统的)。因此,我有重型应用服务器和所有EJB3.1的东西和某种服务,监控文件系统,并采取适当的行动,一旦一个文件出现。有趣的是,适当的操作是创建消息并通过JMS发送消息,将两者集成到应用服务器中可能会更好。
我尝试了@Startup,但是部署冻结了(我知道我不应该在那里使用I/O,这只是一次尝试)。不管怎样..。有什么建议吗?
发布于 2013-01-22 14:56:37
您可以创建一个在启动时加载并将监视委托给异步bean的单例程序。
@Singleton
@Startup
public class Initialiser {
@EJB
private FileSystemMonitor fileSystemMonitor;
@PostConstruct
public void init() {
String fileSystemPath = ....;
fileSystemMonitor.poll(fileSystemPath);
}
}然后异步bean看起来如下所示
@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.
}
}
}
}
}发布于 2013-01-17 16:17:52
如果指定正在使用的服务器,但考虑过实现基于JMX的服务,可能会有所帮助吗?它比EJB更“中立”,更适合于后台服务,限制也较少。
https://stackoverflow.com/questions/14381274
复制相似问题