2015-04-05 90 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 jar是'slf4j-api-1.7.12.jar'。我是否需要加入其他罐子? – 2015-04-06 17:37:10

+0

您是否添加了slf4j-sdkXXX.jar? – jirungaray 2015-04-06 21:51:25

+0

你是不是指'slf4j-jdk14-1.7.12-sources.jar'?我沒有看到任何sdk – 2015-04-06 23:57:14

回答

0

SLF4J應該工作,你確定你使用LAE的依賴項中定義的相同版本嗎?

嘗試設置在這裏解釋:http://blog.xam.de/2010/03/logging-in-google-appengine-for-java.html

+0

其實我仍然得到同樣的錯誤:com.google.api.server.spi.SystemService invokeServiceMethod:發生異常時調用支持的方法 java.lang.ExceptionInInitializerError \t at org.slf4j.LoggerFactory.bind(LoggerFactory.java: 149)...' – 2015-04-06 17:15:02

+0

'由java.security.AccessControlException引起:訪問被拒絕(「java.lang.RuntimePermission」「createSecurityManager」)...' – 2015-04-06 17:21:41

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作爲依賴庫的問題,並完全忘記了這個解決方案。谷歌把我帶回這裏,它又解決了我的問題。謝謝! – 2017-01-15 03:19:27