2012-01-21 2 views
0

Возможно ли получить доступ к файлам за пределами папки WEB-INF на сервере разработки Google App Engine? Может быть, я могу каким-то образом заставить сервер GAE dev блокировать внешние подключения/доступ к файлам?Возможно ли доступ к файлам за пределами папки WEB-INF в режиме dev GAE (java.security.AccessControlException: доступ запрещен)?

Я пытаюсь создать версию Java gae-sqlite. Но я не могу получить доступ к внешнему серверу sql (mysql или h2db) из-за исключений access denied.

стек вызовов:

Caused by: java.security.AccessControlException: access denied (java.io.FilePermission C:\work\test_projects\gae_test\out\artifacts\gae_test_war_exploded\database.lock.db write) 
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374) 
    at java.security.AccessController.checkPermission(AccessController.java:546) 
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:532) 
    at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:252) 
    at java.lang.SecurityManager.checkWrite(SecurityManager.java:962) 
    at java.io.File.createNewFile(File.java:882) 
    at org.h2.store.fs.FilePathDisk.createFile(FilePathDisk.java:121) 
    at org.h2.store.fs.FileUtils.createFile(FileUtils.java:59) 
    at org.h2.store.FileLock.lockFile(FileLock.java:327) 
    at org.h2.store.FileLock.lock(FileLock.java:128) 
    at org.h2.engine.Database.open(Database.java:542) 
    at org.h2.engine.Database.openDatabase(Database.java:222) 

ответ

0

По сравнению с GAE SDK 1.6.1 это невозможно. Если вы, ребята, позже найдете способ сделать это, пожалуйста, дайте мне знать.

0

По GAE for Java Questions:

Почему я не могу прочитать из этого файла?

можно прочитать из файла, который подгружается как часть вашего приложения при условии, что он находится в следующих местах:

  • война/WEB-INF
  • в месте, соответствующих <resource-files> узор в appengine-web.xml (который по умолчанию включает в себя все)

Если местоположение файла не проблема, проблема может быть, что метод используется для чтение из файла не выполняется в белый список. Приложение может использовать любые классы ввода-вывода, которые полезны для чтения с файловой системы, такой как File, FileInputStream, FileReader или RandomAccessFile. Полный список классов с белыми списками приведен в белом списке классов JRE. Если вам нужно получить доступ к файлу для собственных ресурсов (например, файлы свойств), вы можете поместить эти файлы в из банок и использовать Class или ClassLoader для их загрузки.

Так ответ ваш вопрос, единственное доступное место, кроме WEB-INF каталога в чтения файлов является то, что вы указали в <resource-files> записи в appengine-web.xml.

Теперь одна вещь, которую я заметил, что вы пытаетесь прочитать БД файл, который должен быть хорошо, если вы только учитывая, что только для чтения. Вы не запись любых «локальных» файлов, так как (из той же ссылке):

Почему я не могу писать в этот файл?

Запись в локальные файлы не поддерживается в App Engine из-за распределенного характера вашего приложения . Вместо этого данные, которые должны быть сохранены в , должны храниться в распределенном хранилище данных. Для получения дополнительной информации о см. Документацию по изолированной программной среде.

+0

Да, я читал этот FAQ, конечно. Есть ли обходной путь для этого? Интересно, почему тогда работает gae-sqlite. – expert

Смежные вопросы