我目前正在编写一个Java EE应用程序来使用Lucene搜索索引。如何刷新java中网络名称的分辨率?
我的应用程序驻留在Windows机器上的Tomcat服务器上,索引数据位于另一台机器上。
有时(显然是随机的),网络名称变得无法访问。
这是例外,我得到:
12:29:39.011 [ajp-8039-5] ERROR o.f.c.d.p.viewmodel.PilotViewModel - The specified network name is no longer available: SimpleFSIndexInput(path="\\INDEXFILEPATH\indexfile.ext")
java.io.IOException: The specified network name is no longer available: SimpleFSIndexInput(path="\\INDEXFILEPATH\indexfile.ext")
at org.apache.lucene.store.SimpleFSDirectory$SimpleFSIndexInput.readInternal(SimpleFSDirectory.java:140) ~[lucene-core-3.6.1.jar:3.6.1 1362471 - thetaphi - 2012-07-17 12:40:12]
下面是相关的代码。抛出的例外情况如下FSDirectory.open
private void addReaderForRegistry(String indexDirectoryPath, List<IndexReader> readers) throws IOException{
File indexFolder = new File(indexDirectoryPath);
if (!(indexFolder.exists() || !(indexFolder.isDirectory()))) {
throw new IOException(indexFolder.getName() + "is not a valid index location");
}else{
// search for subfolders
List<String> subfolders = FileSystemHelper.listDirectories(indexFolder.getAbsolutePath());
if(subfolders.isEmpty()){
Directory fsDirectory = FSDirectory.open(indexFolder);
IndexReader reader = IndexReader.open(fsDirectory);
readers.add(reader);
}
}
}
我确定服务器已启动。
要解决这个问题,我必须重新启动Tomcat应用程序服务器。有什么我可以做一些错误恢复吗?
请注意,每个请求都打开FSDirectory,因此简单的bean重新初始化不起作用。
谢谢。
编辑:这里是一个更完整的堆栈跟踪
java.io.IOException: The specified network name is no longer available: SimpleFSIndexInput(path="\\hqwprceb1\DRMS-STRUCTURE\indexes_ready\AG\_o48.nrm")
at org.apache.lucene.store.SimpleFSDirectory$SimpleFSIndexInput.readInternal(SimpleFSDirectory.java:140) ~[lucene-core-3.6.1.jar:3.6.1 1362471 - thetaphi - 2012-07-17 12:40:12]
at org.apache.lucene.store.BufferedIndexInput.readBytes(BufferedIndexInput.java:156) ~[lucene-core-3.6.1.jar:3.6.1 1362471 - thetaphi - 2012-07-17 12:40:12]
at org.apache.lucene.index.SegmentNorms.bytes(SegmentNorms.java:164) ~[lucene-core-3.6.1.jar:3.6.1 1362471 - thetaphi - 2012-07-17 12:40:12]
at org.apache.lucene.index.SegmentReader.norms(SegmentReader.java:575) ~[lucene-core-3.6.1.jar:3.6.1 1362471 - thetaphi - 2012-07-17 12:40:12]
at org.apache.lucene.search.TermQuery$TermWeight.scorer(TermQuery.java:107) ~[lucene-core-3.6.1.jar:3.6.1 1362471 - thetaphi - 2012-07-17 12:40:12]
at org.apache.lucene.search.BooleanQuery$BooleanWeight.scorer(BooleanQuery.java:298) ~[lucene-core-3.6.1.jar:3.6.1 1362471 - thetaphi - 2012-07-17 12:40:12]
at org.apache.lucene.search.ConstantScoreQuery$ConstantWeight.scorer(ConstantScoreQuery.java:145) ~[lucene-core-3.6.1.jar:3.6.1 1362471 - thetaphi - 2012-07-17 12:40:12]
at org.apache.lucene.search.BooleanQuery$BooleanWeight.scorer(BooleanQuery.java:298) ~[lucene-core-3.6.1.jar:3.6.1 1362471 - thetaphi - 2012-07-17 12:40:12]
at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:577) ~[lucene-core-3.6.1.jar:3.6.1 1362471 - thetaphi - 2012-07-17 12:40:12]
at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:383) ~[lucene-core-3.6.1.jar:3.6.1 1362471 - thetaphi - 2012-07-17 12:40:12]
虽然DNS名称完全是为了这个目的,但由于这个问题,在这些情况下(大多数情况下固定基础架构,不会频繁更改),我宁愿直接使用IP地址,而忽略游戏中的DNS ... – ppeterka 2013-03-11 09:31:33
Bonjour/zeroconf会成为一个选项吗?然后参考“server.local”。 – 2013-03-11 09:49:02
我会试着用ip地址。不幸的是,bonjour/zerconf不是一个选项。不管怎么说,还是要谢谢你。 – 2013-03-11 10:44:29