2015-04-05 2 views
2

Все, что я пытаюсь сделать, это использовать luceneappengine's GaeDirectory. По-видимому, нужно было slf4j. Поэтому я добавил банку slf4j-api-1.7.12.jar в свой проект. Теперь я получаю следующую ошибку. Таким образом, luceneappengine создан специально для GAE. Итак, почему в мире потребовался бы регистратор, который не всегда поддерживается, когда сама Java поставляется с регистратором? Что мне здесь не хватает?slf4j AccessControlException на движке приложения

com.google.api.server.spi.SystemService invokeServiceMethod: exception occurred while calling backed method 
java.lang.ExceptionInInitializerError 
    at org.slf4j.LoggerFactory.bind(LoggerFactory.java:149) 
    at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:120) 
    at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:331) 
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:283) 
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:304) 
    at com.googlecode.luceneappengine.GaeDirectory.<clinit>(GaeDirectory.java:56) 
    … 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:45) 
    at com.google.api.server.spi.SystemService.invokeServiceMethod(SystemService.java:359) 
    at com.google.api.server.spi.SystemServiceServlet.execute(SystemServiceServlet.java:160) 
    at com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceServlet.java:118) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 
    at com.googlecode.objectify.ObjectifyFilter.doFilter(ObjectifyFilter.java:48) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.Server.handle(Server.java:326) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:437) 
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:444) 
    at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:220) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:308) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300) 
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:441) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "createSecurityManager") 
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:382) 
    at java.security.AccessController.checkPermission(AccessController.java:572) 
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 
    at java.lang.SecurityManager.<init>(SecurityManager.java:299) 
    at org.slf4j.helpers.Util$ClassContextSecurityManager.<init>(Util.java:43) 
    at org.slf4j.helpers.Util$ClassContextSecurityManager.<init>(Util.java:43) 
    at org.slf4j.helpers.Util.<clinit>(Util.java:49) 
    ... 42 more 
+0

Единственная утилита slf4j, которую я использую, это 'slf4j-api-1.7.12.jar'. Нужно ли включать любые другие банки? –

+0

Вы добавили slf4j-sdkXXX.jar? – jirungaray

+0

Вы имели в виду 'slf4j-jdk14-1.7.12-sources.jar'? Я не вижу никаких sdk –

ответ

0

SLF4J должен работать, вы уверены, что используете ту же версию, что и в зависимостях LAE?

Попробуйте настройки объяснены здесь: http://blog.xam.de/2010/03/logging-in-google-appengine-for-java.html

+0

На самом деле я все еще получаю ту же ошибку: 'com.google.api.server.spi.SystemService invokeServiceMethod: произошло исключение при вызове метода Backed java.lang.ExceptionInInitializerError \t в org.slf4j.LoggerFactory.bind (LoggerFactory.java: 149) ... ' –

+0

' Вызвано: java.security.AccessControlException: доступ запрещен ("java.lang.RuntimePermission" "createSecurityManager") ... ' –

0

Я столкнулся с этой же проблемой, и оказалось, потому что у меня было 2 реализаций SLF4J. Я явно использовал slf4j-jdk14, который, по-видимому, является рекомендуемой реализацией для GAE, а одна из моих библиотек (Apache Jena) приносит slf4j-log4j12.

Где-то в моем отладочном выходе (а также в приведенной выше ошибке) был org.slf4j.LoggerFactory.reportMultipleBindingAmbiguity (а также AccessControlException).

Я не уверен, почему Jena включит slf4j-log4j12 - мои другие библиотеки просто зависят от slf4j-api и оставляют выбор реализации для пользователя. В любом случае, я исключил SLF4J-log4j12 из Йены, который в моем случае выглядит следующим образом:

compile ('org.apache.jena:apache-jena-libs:2.11.1') { 
    exclude group: 'org.slf4j', module: 'slf4j-log4j12' 
} 

И все началось снова работает.

2

Проблема вы сталкиваетесь идентифицируются следующим исключением (то же самое, как первопричину, приведенной выше)

Caused by: java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "createSecurityManager") 
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:382) 
    at java.security.AccessController.checkPermission(AccessController.java:572) 
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 
    at java.lang.SecurityManager.<init>(SecurityManager.java:299) 
    at org.slf4j.helpers.Util$ClassContextSecurityManager.<init>(Util.java:43) 
    at org.slf4j.helpers.Util$ClassContextSecurityManager.<init>(Util.java:43) 
    at org.slf4j.helpers.Util.<clinit>(Util.java:49) 

специфичен для SLF4J-API версии 1.7.9 до 1.7.12. Он исправлен в версии 1.7.13, который был выпущен вчера, чтобы исправить эту же проблему.

+0

Хе-хе. Я уже поддержал это раньше, может быть, год назад. Я просто столкнулся с той же проблемой с другой библиотекой, которая имеет slf4j как зависимость и полностью забыла об этом решении. Google вернул меня сюда, и он снова решил мою проблему. Спасибо! –

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