Well - it looks like this modifyThreadGroup permission is checked when
getting ThreadGroup.getParent only when it reaches the "rootGroup", which
is supposedly somehow special (
http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/SecurityManager.java#SecurityManager.getRootGroup%28%29).
Is there a reason to actually need to show this rootGroup ? In general,
this should only happen when new Threads are created, which is why this is
restricted in GAE:
* Throws a <code>SecurityException</code> if the
* calling thread is not allowed to modify the thread group argument.
* <p>
* This method is invoked for the current security manager when a
* new child thread or child thread group is created, and by the
* <code>setDaemon</code>, <code>setMaxPriority</code>,
* <code>stop</code>, <code>suspend</code>, <code>resume</code>, and
* <code>destroy</code> methods of class <code>ThreadGroup</code>.
* <p>
* If the thread group argument is the system thread group (
* has a <code>null</code> parent) then
* this method calls <code>checkPermission</code> with the
* <code>RuntimePermission("modifyThreadGroup")</code> permission.
* If the thread group argument is <i>not</i> the system thread group,
* this method just returns silently.
* <p>
* Applications that want a stricter policy should override this
* method. If this method is overridden, the method that overrides
* it should additionally check to see if the calling thread has the
* <code>RuntimePermission("modifyThreadGroup")</code> permission, and
* if so, return silently. This is to ensure that code granted
* that permission (such as the JDK itself) is allowed to
* manipulate any thread.
In general, this is not necessarily a restriction of GAE, this is plain
"java" security check, not something that GAE has added. Granted, this
wouldn't be an issue when running under a servlet container w/o a
SecurityManager.
In any case, I'm just bringing it up for this issue to be known. I know
that in the past , the Tapestry devs have made adjustments to allow for the
widest out-of-the-box compatibility of the framework (e.g. so that it can
work w/ Scala, deploy on AppEngine, etc). As you indicated, there are
workarounds for this, yet for anyone attempting to upgrade from 5.3.7 to
5.4 this would represent a regression in functionality (and really, is it
THAT important to be able to show the list of threads (see attached
screenshot) - at least at first glance, doesn't seem neither too important
or helpful.
[image: Inline image 2]
Cheers - Alex K
On Fri, Nov 14, 2014 at 6:47 PM, Kalle Korhonen <[email protected]>
wrote:
> GAE doesn't like user code calling ThreadGroup.getParent() (line 597 of
> TapestryInternalUtils, in your stack trace) which seems an unnecessary
> restriction given that access to Thread.currentThread().getThreadGroup() is
> allowed. I wouldn't be surprised if there was a bug open against GAE on
> that.
>
> Anyway, you can certainly get it to work on GAE as well. The simple answer
> is that you probably don't want to show the development exception page on
> production anyway. Beyond that, you might need to override
> ExceptionReport.getThreads() to return perhaps just the current thread. I
> don't think the default behavior of Tapestry should change just for GAE.
>
> Kalle
>
> On Fri, Nov 14, 2014 at 3:15 PM, Alex Kotchnev <[email protected]> wrote:
>
> > Bummer, I just confirmed that the same error happens when deployed in
> > AppEngine. At first glance this looked similar to an issue that was
> fixed a
> > couple of years ago (https://issues.apache.org/jira/browse/TAP5-1616),
> but
> > this is definitely different. I do recall that in general in production
> one
> > might want to have a different exception page (than this default), yet I
> > wonder if there is anything that can still be done about this before 5.4
> > goes out (if it's considered important enough for a 5.4 release).
> >
> > Cheers - Alex K
> >
> > On Fri, Nov 14, 2014 at 6:08 PM, Alex Kotchnev <[email protected]>
> wrote:
> >
> > > I took 5.4-beta-22 out for a spin yesterday and I ran into the
> following
> > exception when trying to run the AppEngine local dev server and there is
> an
> > error on the page and Tapestry attempts to display the exception page.
> I'm
> > not yet sure if this is going to work when deployed to AppEngine proper,
> > but I was wondering if there is a way to override either whether the
> > exception page attempts to do this.
> > >
> > >
> > > In the local environment, I can certainly start the local dev server
> > with a <jvmFlag>-Denable_all_permissions=true</jvmFlag> option that
> avoids
> > the issue in my local setup, so it's not a massive deal. Yet, this was
> > certainly not happening in 5.3.7 so I wonder what changed.
> > >
> > >
> > > Other than that, 5.4 just looks fantastic - I had been holding off on
> > trying it out , but now I can't wait this release to go out !
> > >
> > > Any ideas ?
> > >
> > >
> > > Cheers -
> > >
> > > org.apache.tapestry5.internal.services.RenderQueueException: Render
> > queue error in SetupRender[core/ExceptionReport:loop_0]: Failure reading
> > parameter 'source' of component core/ExceptionReport:loop_0: access
> denied
> > ("java.lang.RuntimePermission" "modifyThreadGroup") [at
> > classpath:org/apache/tapestry5/corelib/pages/ExceptionReport.tml, line
> 110]
> > > at
> >
> org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:87)
> > > at
> >
> org.apache.tapestry5.internal.services.PageRenderQueueImpl.render(PageRenderQueueImpl.java:114)
> > > at $PageRenderQueue_954065d89e49.render(Unknown Source)
> > > at $PageRenderQueue_954065d89e48.render(Unknown Source)
> > > at
> >
> org.apache.tapestry5.internal.services.MarkupRendererTerminator.renderMarkup(MarkupRendererTerminator.java:37)
> > > at
> >
> org.apache.tapestry5.internal.services.PageNameMetaInjector.renderMarkup(PageNameMetaInjector.java:41)
> > > at $MarkupRenderer_954065d89e4c.renderMarkup(Unknown Source)
> > > at
> >
> org.apache.tapestry5.modules.TapestryModule$29.renderMarkup(TapestryModule.java:1810)
> > > at $MarkupRenderer_954065d89e4c.renderMarkup(Unknown Source)
> > > at
> >
> org.apache.tapestry5.modules.TapestryModule$28.renderMarkup(TapestryModule.java:1800)
> > > at $MarkupRenderer_954065d89e4c.renderMarkup(Unknown Source)
> > > at
> >
> org.apache.tapestry5.modules.TapestryModule$27.renderMarkup(TapestryModule.java:1784)
> > > at $MarkupRenderer_954065d89e4c.renderMarkup(Unknown Source)
> > > at
> >
> org.apache.tapestry5.modules.TapestryModule$26.renderMarkup(TapestryModule.java:1768)
> > > at $MarkupRenderer_954065d89e4c.renderMarkup(Unknown Source)
> > > at
> >
> org.apache.tapestry5.internal.services.javascript.AddBrowserCompatibilityStyles.renderMarkup(AddBrowserCompatibilityStyles.java:45)
> > > at $MarkupRenderer_954065d89e4c.renderMarkup(Unknown Source)
> > > at
> >
> org.apache.tapestry5.internal.services.javascript.ConfigureHTMLElementFilter.renderMarkup(ConfigureHTMLElementFilter.java:45)
> > > at $MarkupRenderer_954065d89e4c.renderMarkup(Unknown Source)
> > > at
> >
> org.apache.tapestry5.modules.JavaScriptModule$1.renderMarkup(JavaScriptModule.java:259)
> > > at $MarkupRenderer_954065d89e4c.renderMarkup(Unknown Source)
> > > at
> >
> org.apache.tapestry5.modules.TapestryModule$25.renderMarkup(TapestryModule.java:1751)
> > > at $MarkupRenderer_954065d89e4c.renderMarkup(Unknown Source)
> > > at $MarkupRenderer_954065d89e47.renderMarkup(Unknown Source)
> > > at
> >
> org.apache.tapestry5.internal.services.PageMarkupRendererImpl.renderPageMarkup(PageMarkupRendererImpl.java:47)
> > > at $PageMarkupRenderer_954065d89e45.renderPageMarkup(Unknown
> > Source)
> > > at
> >
> org.apache.tapestry5.internal.services.PageResponseRendererImpl.renderPageResponse(PageResponseRendererImpl.java:64)
> > > at $PageResponseRenderer_954065d89dbf.renderPageResponse(Unknown
> > Source)
> > > at
> >
> org.apache.tapestry5.internal.services.DefaultRequestExceptionHandler.renderException(DefaultRequestExceptionHandler.java:261)
> > > at
> >
> org.apache.tapestry5.internal.services.DefaultRequestExceptionHandler.handleRequestException(DefaultRequestExceptionHandler.java:144)
> > > at
> > $RequestExceptionHandler_954065d89d7c.handleRequestException(Unknown
> Source)
> > > at
> >
> org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:42)
> > > at $RequestHandler_954065d89d7e.service(Unknown Source)
> > > at
> >
> org.apache.tapestry5.modules.TapestryModule$3.service(TapestryModule.java:854)
> > > at $RequestHandler_954065d89d7e.service(Unknown Source)
> > > at
> >
> org.apache.tapestry5.modules.TapestryModule$2.service(TapestryModule.java:844)
> > > at $RequestHandler_954065d89d7e.service(Unknown Source)
> > > at
> >
> org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:89)
> > > at $RequestHandler_954065d89d7e.service(Unknown Source)
> > > at
> >
> org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:105)
> > > at
> >
> org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:95)
> > > at
> >
> org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:85)
> > > at
> >
> org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:119)
> > > at $RequestHandler_954065d89d7e.service(Unknown Source)
> > > at $RequestHandler_954065d89d6d.service(Unknown Source)
> > > at
> >
> org.apache.tapestry5.modules.TapestryModule$HttpServletRequestHandlerTerminator.service(TapestryModule.java:255)
> > > at
> >
> org.tynamo.resteasy.JSAPIRequestFilter.service(JSAPIRequestFilter.java:80)
> > > at $HttpServletRequestFilter_954065d89d6c.service(Unknown Source)
> > > at $HttpServletRequestHandler_954065d89d6f.service(Unknown
> Source)
> > > at
> > org.apache.tapestry5.internal.gzip.GZipFilter.service(GZipFilter.java:59)
> > > at $HttpServletRequestHandler_954065d89d6f.service(Unknown
> Source)
> > > at
> >
> org.tynamo.resteasy.ResteasyRequestFilter.service(ResteasyRequestFilter.java:106)
> > > at $HttpServletRequestFilter_954065d89d6b.service(Unknown Source)
> > > at $HttpServletRequestHandler_954065d89d6f.service(Unknown
> Source)
> > > at
> >
> org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62)
> > > at $HttpServletRequestFilter_954065d89d68.service(Unknown Source)
> > > at $HttpServletRequestHandler_954065d89d6f.service(Unknown
> Source)
> > > at
> >
> org.apache.tapestry5.modules.TapestryModule$1.service(TapestryModule.java:804)
> > > at $HttpServletRequestHandler_954065d89d6f.service(Unknown
> Source)
> > > at $HttpServletRequestHandler_954065d89d67.service(Unknown
> Source)
> > > at
> > org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:166)
> > > at
> >
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
> > > at
> >
> com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
> > > at
> >
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
> > > at
> >
> com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:127)
> > > at
> >
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
> > > at
> >
> com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
> > > at
> >
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
> > > at
> >
> com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
> > > at
> >
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
> > > at
> >
> com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
> > > at
> >
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
> > > at
> >
> com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
> > > at
> >
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
> > > at
> >
> com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)
> > > at
> >
> com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)
> > > at
> >
> com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
> > > 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
> >
> com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98)
> > > at
> > org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
> > > at
> >
> com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:491)
> > > 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.HttpParser.parseNext(HttpParser.java:547)
> > > at
> org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
> > > at
> org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
> > > at
> >
> org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
> > > at
> >
> org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
> > > Caused by: org.apache.tapestry5.ioc.internal.util.TapestryException:
> > Failure reading parameter 'source' of component
> > core/ExceptionReport:loop_0: access denied ("java.lang.RuntimePermission"
> > "modifyThreadGroup") [at
> > classpath:org/apache/tapestry5/corelib/pages/ExceptionReport.tml, line
> 110]
> > > at
> >
> org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.invoke(ComponentPageElementImpl.java:155)
> > > at
> >
> org.apache.tapestry5.internal.structure.ComponentPageElementImpl$SetupRenderPhase.render(ComponentPageElementImpl.java:183)
> > > at
> >
> org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:79)
> > > ... 94 more
> > > Caused by: org.apache.tapestry5.ioc.internal.util.TapestryException:
> > Failure reading parameter 'source' of component
> > core/ExceptionReport:loop_0: access denied ("java.lang.RuntimePermission"
> > "modifyThreadGroup") [at
> > classpath:org/apache/tapestry5/corelib/pages/ExceptionReport.tml, line
> 110]
> > > at
> >
> org.apache.tapestry5.internal.transform.ParameterWorker$3$1.readFromBinding(ParameterWorker.java:268)
> > > at
> >
> org.apache.tapestry5.internal.transform.ParameterWorker$3$1.get(ParameterWorker.java:381)
> > > at
> >
> org.apache.tapestry5.corelib.components.Loop.conduit_get_source(Loop.java)
> > > at
> > org.apache.tapestry5.corelib.components.Loop.setup(Loop.java:324)
> > > at
> > org.apache.tapestry5.corelib.components.Loop.setupRender(Loop.java)
> > > at
> >
> org.apache.tapestry5.internal.structure.ComponentPageElementImpl$SetupRenderPhase.invokeComponent(ComponentPageElementImpl.java:176)
> > > at
> >
> org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.invoke(ComponentPageElementImpl.java:135)
> > > ... 96 more
> > > Caused by: org.apache.tapestry5.ioc.internal.util.TapestryException:
> > access denied ("java.lang.RuntimePermission" "modifyThreadGroup") [at
> > classpath:org/apache/tapestry5/corelib/pages/ExceptionReport.tml, line
> 110]
> > > at
> >
> org.apache.tapestry5.internal.bindings.PropBinding.get(PropBinding.java:67)
> > > at
> >
> org.apache.tapestry5.internal.transform.ParameterWorker$3$1.readFromBinding(ParameterWorker.java:263)
> > > ... 102 more
> > > Caused by: java.security.AccessControlException: access denied
> > ("java.lang.RuntimePermission" "modifyThreadGroup")
> > > at
> >
> java.security.AccessControlContext.checkPermission(AccessControlContext.java:372)
> > > at
> > java.security.AccessController.checkPermission(AccessController.java:559)
> > > at
> > java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
> > > at
> >
> com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:429)
> > > at
> >
> com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkAccess(DevAppServerFactory.java:454)
> > > at java.lang.ThreadGroup.checkAccess(ThreadGroup.java:315)
> > > at java.lang.ThreadGroup.getParent(ThreadGroup.java:167)
> > > at
> >
> org.apache.tapestry5.internal.TapestryInternalUtils.getAllThreads(TapestryInternalUtils.java:597)
> > > at
> >
> org.apache.tapestry5.corelib.pages.ExceptionReport.getThreads(ExceptionReport.java:213)
> > > at $InternalPropertyConduit_954065d89f01.get(Unknown Source)
> > > at
> >
> org.apache.tapestry5.internal.bindings.PropBinding.get(PropBinding.java:63)
> > > ... 103 more
> > >
> > > Caused by:
> > >
> > > org.apache.tapestry5.ioc.internal.util.TapestryException: Failure
> > reading parameter 'source' of component core/ExceptionReport:loop_0:
> access
> > denied ("java.lang.RuntimePermission" "modifyThreadGroup") [at
> > classpath:org/apache/tapestry5/corelib/pages/ExceptionReport.tml, line
> 110]
> > > at
> >
> org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.invoke(ComponentPageElementImpl.java:155)
> > > at
> >
> org.apache.tapestry5.internal.structure.ComponentPageElementImpl$SetupRenderPhase.render(ComponentPageElementImpl.java:183)
> > > at
> >
> org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:79)
> > > at
> >
> org.apache.tapestry5.internal.services.PageRenderQueueImpl.render(PageRenderQueueImpl.java:114)
> > > at $PageRenderQueue_954065d89e49.render(Unknown Source)
> > > at $PageRenderQueue_954065d89e48.render(Unknown Source)
> > > at
> >
> org.apache.tapestry5.internal.services.MarkupRendererTerminator.renderMarkup(MarkupRendererTerminator.java:37)
> > > at
> >
> org.apache.tapestry5.internal.services.PageNameMetaInjector.renderMarkup(PageNameMetaInjector.java:41)
> > > at $MarkupRenderer_954065d89e4c.renderMarkup(Unknown Source)
> > > at
> >
> org.apache.tapestry5.modules.TapestryModule$29.renderMarkup(TapestryModule.java:1810)
> > > at $MarkupRenderer_954065d89e4c.renderMarkup(Unknown Source)
> > > at
> >
> org.apache.tapestry5.modules.TapestryModule$28.renderMarkup(TapestryModule.java:1800)
> > > at $MarkupRenderer_954065d89e4c.renderMarkup(Unknown Source)
> > > at
> >
> org.apache.tapestry5.modules.TapestryModule$27.renderMarkup(TapestryModule.java:1784)
> > > at $MarkupRenderer_954065d89e4c.renderMarkup(Unknown Source)
> > > at
> >
> org.apache.tapestry5.modules.TapestryModule$26.renderMarkup(TapestryModule.java:1768)
> > > at $MarkupRenderer_954065d89e4c.renderMarkup(Unknown Source)
> > > at
> >
> org.apache.tapestry5.internal.services.javascript.AddBrowserCompatibilityStyles.renderMarkup(AddBrowserCompatibilityStyles.java:45)
> > > at $MarkupRenderer_954065d89e4c.renderMarkup(Unknown Source)
> > > at
> >
> org.apache.tapestry5.internal.services.javascript.ConfigureHTMLElementFilter.renderMarkup(ConfigureHTMLElementFilter.java:45)
> > > at $MarkupRenderer_954065d89e4c.renderMarkup(Unknown Source)
> > > at
> >
> org.apache.tapestry5.modules.JavaScriptModule$1.renderMarkup(JavaScriptModule.java:259)
> > > at $MarkupRenderer_954065d89e4c.renderMarkup(Unknown Source)
> > > at
> >
> org.apache.tapestry5.modules.TapestryModule$25.renderMarkup(TapestryModule.java:1751)
> > > at $MarkupRenderer_954065d89e4c.renderMarkup(Unknown Source)
> > > at $MarkupRenderer_954065d89e47.renderMarkup(Unknown Source)
> > > at
> >
> org.apache.tapestry5.internal.services.PageMarkupRendererImpl.renderPageMarkup(PageMarkupRendererImpl.java:47)
> > > at $PageMarkupRenderer_954065d89e45.renderPageMarkup(Unknown
> > Source)
> > > at
> >
> org.apache.tapestry5.internal.services.PageResponseRendererImpl.renderPageResponse(PageResponseRendererImpl.java:64)
> > > at $PageResponseRenderer_954065d89dbf.renderPageResponse(Unknown
> > Source)
> > > at
> >
> org.apache.tapestry5.internal.services.DefaultRequestExceptionHandler.renderException(DefaultRequestExceptionHandler.java:261)
> > > at
> >
> org.apache.tapestry5.internal.services.DefaultRequestExceptionHandler.handleRequestException(DefaultRequestExceptionHandler.java:144)
> > > at
> > $RequestExceptionHandler_954065d89d7c.handleRequestException(Unknown
> Source)
> > > at
> >
> org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:42)
> > > at $RequestHandler_954065d89d7e.service(Unknown Source)
> > > at
> >
> org.apache.tapestry5.modules.TapestryModule$3.service(TapestryModule.java:854)
> > > at $RequestHandler_954065d89d7e.service(Unknown Source)
> > > at
> >
> org.apache.tapestry5.modules.TapestryModule$2.service(TapestryModule.java:844)
> > > at $RequestHandler_954065d89d7e.service(Unknown Source)
> > > at
> >
> org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:89)
> > > at $RequestHandler_954065d89d7e.service(Unknown Source)
> > > at
> >
> org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:105)
> > > at
> >
> org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:95)
> > > at
> >
> org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:85)
> > > at
> >
> org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:119)
> > > at $RequestHandler_954065d89d7e.service(Unknown Source)
> > > at $RequestHandler_954065d89d6d.service(Unknown Source)
> > > at
> >
> org.apache.tapestry5.modules.TapestryModule$HttpServletRequestHandlerTerminator.service(TapestryModule.java:255)
> > > at
> >
> org.tynamo.resteasy.JSAPIRequestFilter.service(JSAPIRequestFilter.java:80)
> > > at $HttpServletRequestFilter_954065d89d6c.service(Unknown Source)
> > > at $HttpServletRequestHandler_954065d89d6f.service(Unknown
> Source)
> > > at
> > org.apache.tapestry5.internal.gzip.GZipFilter.service(GZipFilter.java:59)
> > > at $HttpServletRequestHandler_954065d89d6f.service(Unknown
> Source)
> > > at
> >
> org.tynamo.resteasy.ResteasyRequestFilter.service(ResteasyRequestFilter.java:106)
> > > at $HttpServletRequestFilter_954065d89d6b.service(Unknown Source)
> > > at $HttpServletRequestHandler_954065d89d6f.service(Unknown
> Source)
> > > at
> >
> org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62)
> > > at $HttpServletRequestFilter_954065d89d68.service(Unknown Source)
> > > at $HttpServletRequestHandler_954065d89d6f.service(Unknown
> Source)
> > > at
> >
> org.apache.tapestry5.modules.TapestryModule$1.service(TapestryModule.java:804)
> > > at $HttpServletRequestHandler_954065d89d6f.service(Unknown
> Source)
> > > at $HttpServletRequestHandler_954065d89d67.service(Unknown
> Source)
> > > at
> > org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:166)
> > > at
> >
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
> > > at
> >
> com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
> > > at
> >
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
> > > at
> >
> com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:127)
> > > at
> >
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
> > > at
> >
> com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
> > > at
> >
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
> > > at
> >
> com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
> > > at
> >
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
> > > at
> >
> com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
> > > at
> >
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
> > > at
> >
> com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
> > > at
> >
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
> > > at
> >
> com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)
> > > at
> >
> com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)
> > > at
> >
> com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
> > > 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
> >
> com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98)
> > > at
> > org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
> > > at
> >
> com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:491)
> > > 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.HttpParser.parseNext(HttpParser.java:547)
> > > at
> org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
> > > at
> org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
> > > at
> >
> org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
> > > at
> >
> org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
> > > Caused by: org.apache.tapestry5.ioc.internal.util.TapestryException:
> > Failure reading parameter 'source' of component
> > core/ExceptionReport:loop_0: access denied ("java.lang.RuntimePermission"
> > "modifyThreadGroup") [at
> > classpath:org/apache/tapestry5/corelib/pages/ExceptionReport.tml, line
> 110]
> > > at
> >
> org.apache.tapestry5.internal.transform.ParameterWorker$3$1.readFromBinding(ParameterWorker.java:268)
> > > at
> >
> org.apache.tapestry5.internal.transform.ParameterWorker$3$1.get(ParameterWorker.java:381)
> > > at
> >
> org.apache.tapestry5.corelib.components.Loop.conduit_get_source(Loop.java)
> > > at
> > org.apache.tapestry5.corelib.components.Loop.setup(Loop.java:324)
> > > at
> > org.apache.tapestry5.corelib.components.Loop.setupRender(Loop.java)
> > > at
> >
> org.apache.tapestry5.internal.structure.ComponentPageElementImpl$SetupRenderPhase.invokeComponent(ComponentPageElementImpl.java:176)
> > > at
> >
> org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.invoke(ComponentPageElementImpl.java:135)
> > > ... 96 more
> > > Caused by: org.apache.tapestry5.ioc.internal.util.TapestryException:
> > access denied ("java.lang.RuntimePermission" "modifyThreadGroup") [at
> > classpath:org/apache/tapestry5/corelib/pages/ExceptionReport.tml, line
> 110]
> > > at
> >
> org.apache.tapestry5.internal.bindings.PropBinding.get(PropBinding.java:67)
> > > at
> >
> org.apache.tapestry5.internal.transform.ParameterWorker$3$1.readFromBinding(ParameterWorker.java:263)
> > > ... 102 more
> > >
> > >
> > > Caused by: java.security.AccessControlException: access denied
> > ("java.lang.RuntimePermission" "modifyThreadGroup")
> > > at
> >
> java.security.AccessControlContext.checkPermission(AccessControlContext.java:372)
> > > at
> > java.security.AccessController.checkPermission(AccessController.java:559)
> > > at
> > java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
> > > at
> >
> com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:429)
> > > at
> >
> com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkAccess(DevAppServerFactory.java:454)
> > > at java.lang.ThreadGroup.checkAccess(ThreadGroup.java:315)
> > > at java.lang.ThreadGroup.getParent(ThreadGroup.java:167)
> > > at
> >
> org.apache.tapestry5.internal.TapestryInternalUtils.getAllThreads(TapestryInternalUtils.java:597)
> > > at
> >
> org.apache.tapestry5.corelib.pages.ExceptionReport.getThreads(ExceptionReport.java:213)
> > > at $InternalPropertyConduit_954065d89f01.get(Unknown Source)
> > > at
> >
> org.apache.tapestry5.internal.bindings.PropBinding.get(PropBinding.java:63)
> > >
> > >
> >
>