我目前正在編寫一個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