I've put in some more effort to get Struts 2.1.8 snapshot running in live GAE environment. I made progress moving to Sitemesh 2.4.2, disabling OgnlRuntime SecurityManager and moving to convention-2.1.8- SNAPSHOT (WW-3114)

The next issue is that XWorks XMLConfigurationProvider throws a SecurityException on the following line (211):

// Force loading of class to detect no class def found exceptions
cimpl.getDeclaredConstructors();

SecurityException: Unable to get members for o.a.s.c.PackageBasedActionConfigBuilder

cimpl is the Class of the ActionConfigBuilder bean specified in struts- plugin.xml and loaded by ClassLoaderTools. I believe this is a technique to eagerly load the class.

I'm not sure why that's access is not permitted in the sandbox. It's not documented anywhere I can see and It only occurs in the live environment.

As a work-around (guess), I changed it to cimpl.getDeclaredClasses() instead which is permitted (I don't know if this has the same effect on the ClassLoader). That got me past the issue above, but the same SecurityException occurs in XWork's ContainerImpl $ConstructorInjector.findConstructorIn(): SecurityException: Unable to get members for Class o.a.s.v.v.VelocityManager

which seems to be a fundamental problem with XWork's constructor injection in GAE.

As a side note, Guice 2's constructor injection works okay in GAE. I imagine the Guice 2 codebase is now very different beast than XWork's IOC though.

I guess I need to approach the GAE forum now. Has anyone got any ideas about what to attempt next on the S2/Xwork side? Stack traces for the two cases are below.

regards,
 Jeromy Evans

Failed startup of context com .google.apphosting.utils.jetty.runtimeappenginewebappcont...@67fe80{/,/ base/data/home/apps/{appname}/1.335834217966711427} Unable to load configuration. - bean - jar:file:/base/data/home/apps/ {appname}/1.335834217966711427/WEB-INF/lib/struts2-convention- plugin-2.1.8-SNAPSHOT.jar!/struts-plugin.xml:32:155
        at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:431)
at org .apache .struts2 .dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:69) at org .apache .struts2 .dispatcher .ng.filter.StrutsPrepareFilter.init(StrutsPrepareFilter.java:50) at com.google.inject.servlet.FilterDefinition.init(FilterDefinition.java: 81) at com .google .inject .servlet.ManagedFilterPipeline.initPipeline(ManagedFilterPipeline.java: 102)
        at com.google.inject.servlet.GuiceFilter.init(GuiceFilter.java:168)
        at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:99)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40) at org .mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java: 589)
        at org.mortbay.jetty.servlet.Context.startContext(Context.java:139)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java: 1218) at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java: 500) at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java: 448) at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40) at com .google .apphosting .runtime .jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:190) at com .google .apphosting .runtime .jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:167) at com .google .apphosting .runtime .jetty .JettyServletEngineAdapter .serviceRequest(JettyServletEngineAdapter.java:127) at com .google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java: 235) at com.google.apphosting.base.RuntimePb$EvaluationRuntime $6.handleBlockingRequest(RuntimePb.java:4823) at com.google.apphosting.base.RuntimePb$EvaluationRuntime $6.handleBlockingRequest(RuntimePb.java:4821) at com .google .net .rpc .impl .BlockingApplicationHandler .handleRequest(BlockingApplicationHandler.java:24) at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java: 359)
        at com.google.net.rpc.impl.Server$2.run(Server.java:820)
at com .google.tracing.LocalTraceSpanRunnable.run(LocalTraceSpanRunnable.java: 56) at com .google .tracing .LocalTraceSpanBuilder.internalContinueSpan(LocalTraceSpanBuilder.java: 516)
        at com.google.net.rpc.impl.Server.startRpc(Server.java:775)
        at com.google.net.rpc.impl.Server.processRequest(Server.java:348)
at com .google .net.rpc.impl.ServerConnection.messageReceived(ServerConnection.java: 436) at com.google.net.rpc.impl.RpcConnection.parseMessages(RpcConnection.java: 319) at com.google.net.rpc.impl.RpcConnection.dataReceived(RpcConnection.java: 290)
        at com.google.net.async.Connection.handleReadEvent(Connection.java:428)
at com .google .net.async.EventDispatcher.processNetworkEvents(EventDispatcher.java: 762) at com.google.net.async.EventDispatcher.internalLoop(EventDispatcher.java: 207)
        at com.google.net.async.EventDispatcher.loop(EventDispatcher.java:101)
at com.google.net.rpc.RpcService.runUntilServerShutdown(RpcService.java: 251) at com.google.apphosting.runtime.JavaRuntime $RpcRunnable.run(JavaRuntime.java:374)
        at java.lang.Thread.run(Unknown Source)
Caused by: Unable to load configuration. - bean - jar:file:/base/data/ home/apps/{appname}/1.335834217966711427/WEB-INF/lib/struts2- convention-plugin-2.1.8-SNAPSHOT.jar!/struts-plugin.xml:32:155 at com .opensymphony .xwork2 .config .ConfigurationManager.getConfiguration(ConfigurationManager.java:58) at org .apache .struts2 .dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:374)
        at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:418)
        ... 36 more
Caused by: Unable to load bean: type:org.apache.struts2.convention.ActionConfigBuilder class:org.apache.struts2.convention.PackageBasedActionConfigBuilder - bean - jar:file:/base/data/home/apps/{appname}/1.335834217966711427/ WEB-INF/lib/struts2-convention-plugin-2.1.8-SNAPSHOT.jar!/struts- plugin.xml:32:155 at com .opensymphony .xwork2 .config .providers .XmlConfigurationProvider.register(XmlConfigurationProvider.java:222) at org .apache .struts2 .config .StrutsXmlConfigurationProvider .register(StrutsXmlConfigurationProvider.java:101) at com .opensymphony .xwork2 .config .impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java: 165) at com .opensymphony .xwork2 .config .ConfigurationManager.getConfiguration(ConfigurationManager.java:55)
        ... 38 more
Caused by: java.lang.SecurityException: Unable to get members for class org.apache.struts2.convention.PackageBasedActionConfigBuilder at com .google.apphosting.runtime.security.shared.intercept.java.lang.Class_ $10.run(Class_.java:357) at com .google.apphosting.runtime.security.shared.intercept.java.lang.Class_ $10.run(Class_.java:347)
        at java.security.AccessController.doPrivileged(Native Method)
at com .google .apphosting .runtime .security.shared.intercept.java.lang.Class_.getMembers(Class_.java:347) at com .google .apphosting .runtime .security .shared.intercept.java.lang.Class_.getDeclaredConstructors(Class_.java: 192) at com .opensymphony .xwork2 .config .providers .XmlConfigurationProvider.register(XmlConfigurationProvider.java:212)
        ... 41 more


--- case two ---

[{appname}/1.335835094531171610].<stdout>: 642 [Runtime Network Thread] ERROR org.apache.struts2.dispatcher.Dispatcher - Dispatcher initialization failed java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.SecurityException: Unable to get members for class org.apache.struts2.views.velocity.VelocityManager at com.opensymphony.xwork2.inject.ContainerImpl $MethodInjector.inject(ContainerImpl.java:295) at com.opensymphony.xwork2.inject.ContainerImpl $2.call(ContainerImpl.java:104) at com.opensymphony.xwork2.inject.ContainerImpl $2.call(ContainerImpl.java:102) at com .opensymphony .xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:574) at com .opensymphony .xwork2.inject.ContainerImpl.injectStatics(ContainerImpl.java:101) at com .opensymphony .xwork2.inject.ContainerBuilder.create(ContainerBuilder.java:493) at com .opensymphony .xwork2 .config .impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java: 184) at com .opensymphony .xwork2 .config .ConfigurationManager.getConfiguration(ConfigurationManager.java:55) at org .apache .struts2 .dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:374)
        at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:418)
at org .apache .struts2 .dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:69) at org .apache .struts2 .dispatcher .ng.filter.StrutsPrepareFilter.init(StrutsPrepareFilter.java:50) at com.google.inject.servlet.FilterDefinition.init(FilterDefinition.java: 81) at com .google .inject .servlet.ManagedFilterPipeline.initPipeline(ManagedFilterPipeline.java: 102)
        at com.google.inject.servlet.GuiceFilter.init(GuiceFilter.java:168)
        at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:99)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40) at org .mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java: 589)
        at org.mortbay.jetty.servlet.Context.startContext(Context.java:139)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java: 1218) at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java: 500) at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java: 448) at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40) at com .google .apphosting .runtime .jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:190) at com .google .apphosting .runtime .jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:167) at com .google .apphosting .runtime .jetty .JettyServletEngineAdapter .serviceRequest(JettyServletEngineAdapter.java:127) at com .google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java: 235) at com.google.apphosting.base.RuntimePb$EvaluationRuntime $6.handleBlockingRequest(RuntimePb.java:4823) at com.google.apphosting.base.RuntimePb$EvaluationRuntime $6.handleBlockingRequest(RuntimePb.java:4821) at com .google .net .rpc .impl .BlockingApplicationHandler .handleRequest(BlockingApplicationHandler.java:24) at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java: 359)
        at com.google.net.rpc.impl.Server$2.run(Server.java:820)
at com .google.tracing.LocalTraceSpanRunnable.run(LocalTraceSpanRunnable.java: 56) at com .google .tracing .LocalTraceSpanBuilder.internalContinueSpan(LocalTraceSpanBuilder.java: 516)
        at com.google.net.rpc.impl.Server.startRpc(Server.java:775)
        at com.google.net.rpc.impl.Server.processRequest(Server.java:348)
at com .google .net.rpc.impl.ServerConnection.messageReceived(ServerConnection.java: 436) at com.google.net.rpc.impl.RpcConnection.parseMessages(RpcConnection.java: 319) at com.google.net.rpc.impl.RpcConnection.dataReceived(RpcConnection.java: 290)
        at com.google.net.async.Connection.handleReadEvent(Connection.java:428)
at com .google .net.async.EventDispatcher.processNetworkEvents(EventDispatcher.java: 762) at com.google.net.async.EventDispatcher.internalLoop(EventDispatcher.java: 207)
        at com.google.net.async.EventDispatcher.loop(EventDispatcher.java:101)
at com.google.net.rpc.RpcService.runUntilServerShutdown(RpcService.java: 251) at com.google.apphosting.runtime.JavaRuntime $RpcRunnable.run(JavaRuntime.java:374)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: java.lang.SecurityException: Unable to get members for class org.apache.struts2.views.velocity.VelocityManager at com.opensymphony.xwork2.inject.ContainerBuilder $4.create(ContainerBuilder.java:132)
        at com.opensymphony.xwork2.inject.Scope$2$1.create(Scope.java:51)
at com.opensymphony.xwork2.inject.ContainerImpl $ParameterInjector.inject(ContainerImpl.java:462) at com .opensymphony .xwork2.inject.ContainerImpl.getParameters(ContainerImpl.java:477) at com.opensymphony.xwork2.inject.ContainerImpl.access $000(ContainerImpl.java:34) at com.opensymphony.xwork2.inject.ContainerImpl $MethodInjector.inject(ContainerImpl.java:293)
        ... 45 more
Caused by: java.lang.RuntimeException: java.lang.SecurityException: Unable to get members for class org.apache.struts2.views.velocity.VelocityManager at com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java: 495) at com.opensymphony.xwork2.inject.ContainerImpl $7.call(ContainerImpl.java:532) at com .opensymphony .xwork2.inject.ContainerImpl.callInContext(ContainerImpl.java:581) at com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java: 530) at com .opensymphony .xwork2.config.impl.LocatableFactory.create(LocatableFactory.java:32) at com.opensymphony.xwork2.inject.ContainerBuilder $4.create(ContainerBuilder.java:130)
        ... 50 more
Caused by: java.lang.SecurityException: Unable to get members for class org.apache.struts2.views.velocity.VelocityManager at com .google.apphosting.runtime.security.shared.intercept.java.lang.Class_ $10.run(Class_.java:357) at com .google.apphosting.runtime.security.shared.intercept.java.lang.Class_ $10.run(Class_.java:347)
        at java.security.AccessController.doPrivileged(Native Method)
at com .google .apphosting .runtime .security.shared.intercept.java.lang.Class_.getMembers(Class_.java:347) at com .google .apphosting .runtime .security .shared.intercept.java.lang.Class_.getDeclaredConstructors(Class_.java: 192) at com.opensymphony.xwork2.inject.ContainerImpl $ConstructorInjector.findConstructorIn(ContainerImpl.java:366) at com.opensymphony.xwork2.inject.ContainerImpl $ConstructorInjector.<init>(ContainerImpl.java:319) at com.opensymphony.xwork2.inject.ContainerImpl $5.create(ContainerImpl.java:305) at com.opensymphony.xwork2.inject.ContainerImpl $5.create(ContainerImpl.java:304) at com.opensymphony.xwork2.inject.util.ReferenceCache $CallableCreate.call(ReferenceCache.java:150)
        at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
        at java.util.concurrent.FutureTask.run(Unknown Source)
at com .opensymphony .xwork2.inject.util.ReferenceCache.internalCreate(ReferenceCache.java: 76) at com .opensymphony .xwork2.inject.util.ReferenceCache.get(ReferenceCache.java:116) at com .opensymphony .xwork2.inject.ContainerImpl.getConstructor(ContainerImpl.java:594) at com.opensymphony.xwork2.inject.ContainerImpl.inject(ContainerImpl.java: 491)
        ... 55 more




---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
For additional commands, e-mail: dev-h...@struts.apache.org

Reply via email to