Невозможно создать каталог на сервере. Проблема с разрешением?JAVA

Программисты JAVA общаются здесь
Anonymous
Невозможно создать каталог на сервере. Проблема с разрешением?

Сообщение Anonymous »

Я использую Lucene для хранения индекса некоторых данных. Следующий код проверяет наличие каталога в /home/username и, если он не найден, создает индекс с нуля, создавая каталоги и т. д.

public static final String INDEX_PATH = "/home/username/appname/lucene/index";
private void buildCompleteIndex(int organizationId) {
synchronized(mutex) {
File path = new File(INDEX_PATH + "/" + String.valueOf(organizationId));
if(!path.exists()) {
try {
Utils.deleteDirectory(path);
} catch (IOException e) {
throw new LuceneIndexException("Error rebuilding index directory.", e);
}
path.mkdirs();
}

List contactList = contactDAO.findAll(organizationId, true);
if(contactList != null) {
for(Contact contact : contactList) {
add(contact);
}
}
}
}

//Getters
private IndexReader getIndexReader(boolean readOnly, int organizationId) {
try {
if(directory == null) {
File path = getFile(organizationId);
directory = FSDirectory.open(path);
if(!IndexReader.indexExists(directory)) {
buildCompleteIndex(organizationId);
}
}
return IndexReader.open(directory, readOnly);
} catch (CorruptIndexException e) {
buildCompleteIndex(organizationId);
} catch (IOException e) {
buildCompleteIndex(organizationId);
}
return null;
}


Все это отлично работает в разработке, когда я развертываю виртуальный экземпляр Tomcat внутри eclipse, но не работает на рабочем сервере.

Почему я могу писать в каталог в режиме разработки, но не когда приложение развернуто на сервере? У меня нет разрешения на создание каталогов? Я использую Ubuntu Server 12.10 и Tomcat7.

Как мне добиться этого, создавая нужные папки и файлы на сервере?

Существует ли на сервере определенная папка, в которую я должен разрешить своим приложениям записывать данные? Он всегда работал с домашней/пользовательской папкой в ​​моем ящике разработчика, но, возможно, на сервере все по-другому, потому что пользователь на самом деле не вошел в систему, когда приложение работает?

ОБНОВЛЕНИЕ:
Я проверил разрешения папки, которые в настоящее время установлены на 700. Может ли это быть проблемой? Безопасно ли установить для этой папки значение 666 или 777 на рабочем сервере? Доступна ли запись в эту папку, даже если имя пользователя /home/username не выполнено? Я знаю, что 700 означает, что владелец имеет полный доступ, но включает ли это приложение tomcat?

ОБНОВЛЕНИЕ: Я попытался изменить разрешения /home/username на 755, и та же проблема осталась.

Стековая трассировка показывает ошибку, возникшую при попытке создать папку.

java.io.IOException: Cannot create directory: /home/ryandlf/thinkbooked.com/lucene/contacts/1
at org.apache.lucene.store.NativeFSLock.obtain(NativeFSLockFactory.java:171)
at org.apache.lucene.store.Lock.obtain(Lock.java:72)
at org.apache.lucene.index.IndexWriter.(IndexWriter.java:1108)
at com.thinkbooked.search.LuceneContactSearchEngine.getIndexWriter(LuceneContactSearchEngine.java:321)
at com.thinkbooked.search.LuceneContactSearchEngine.add(LuceneContactSearchEngine.java:68)
at com.thinkbooked.search.LuceneContactSearchEngine.buildCompleteIndex(LuceneContactSearchEngine.java:285)
at com.thinkbooked.search.LuceneContactSearchEngine.getIndexReader(LuceneContactSearchEngine.java:303)
at com.thinkbooked.search.LuceneContactSearchEngine.find(LuceneContactSearchEngine.java:150)
at com.thinkbooked.search.LuceneContactSearchEngine.find(LuceneContactSearchEngine.java:145)
at com.thinkbooked.handlers.ClientListSearchHandler.init(ClientListSearchHandler.java:49)
at com.thinkbooked.event.EventListener.doPost(EventListener.java:59)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)

Вернуться в «JAVA»