Tapestry web app (including workbench example) fails in Tomcat with security 
manager enabled 
---------------------------------------------------------------------------------------------

         Key: TAPESTRY-964
         URL: http://issues.apache.org/jira/browse/TAPESTRY-964
     Project: Tapestry
        Type: Bug

  Components: Framework  
    Versions: 4.0.2    
 Environment: Linux (2.6 kernel), Tomcat 5.0.28, Sun Java SDK 1.5.0_02, 
Tapestry 4.0.2
    Reporter: Paul Homes


Web apps that use Tapestry 4.0 in Tomcat with the security manager enabled fail 
with a "java.lang.NoClassDefFoundError: 
org.apache.hivemind.ServiceImplementationFactory" exception.  

To simplify testing I only have the Tapestry 4.0.2 example workbench web app 
deployed in a new Tomcat 5.0.28 install.  The workbench example works fine when 
Tomcat is started without the security manager, but when the security manager 
is enabled you can see the following stack trace:

2006-05-25 17:32:57 StandardContext[/workbench]Servlet /workbench threw load() 
exception javax.servlet.ServletException: 
org.apache.hivemind.ServiceImplementationFactory
        at 
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:286)
        at 
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:157)
        at 
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:110)
        at 
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1024)
        at 
org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:862)
        at 
org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4013)
        at 
org.apache.catalina.core.StandardContext.start(StandardContext.java:4357)
        at 
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:823)
        at 
org.apache.catalina.core.ContainerBase.access$000(ContainerBase.java:121)
        at 
org.apache.catalina.core.ContainerBase$PrivilegedAddChild.run(ContainerBase.java:143)
        at java.security.AccessController.doPrivileged(Native Method)
        at 
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:805)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:595)
        at 
org.apache.catalina.core.StandardHostDeployer.install(StandardHostDeployer.java:277)
        at org.apache.catalina.core.StandardHost.install(StandardHost.java:832)
        at 
org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:625)
        at 
org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:431)
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:983)
        at 
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:349)
        at 
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1091)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:789)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083)
        at 
org.apache.catalina.core.StandardEngine.start(StandardEngine.java:478)
        at 
org.apache.catalina.core.StandardService.start(StandardService.java:480)
        at 
org.apache.catalina.core.StandardServer.start(StandardServer.java:2313)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:556)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:425)
----- Root Cause -----
java.lang.NoClassDefFoundError: org.apache.hivemind.ServiceImplementationFactory
        at 
org.apache.hivemind.impl.InvokeFactoryServiceConstructor.class$(InvokeFactoryServiceConstructor.java:83)
        at 
org.apache.hivemind.impl.InvokeFactoryServiceConstructor.setupFactoryAndParameters(InvokeFactoryServiceConstructor.java:82)
        at 
org.apache.hivemind.impl.InvokeFactoryServiceConstructor.constructCoreServiceImplementation(InvokeFactoryServiceConstructor.java:55)
        at 
org.apache.hivemind.impl.servicemodel.AbstractServiceModelImpl.constructCoreServiceImplementation(AbstractServiceModelImpl.java:108)
        at 
org.apache.hivemind.impl.servicemodel.AbstractServiceModelImpl.constructNewServiceImplementation(AbstractServiceModelImpl.java:158)
        at 
org.apache.hivemind.impl.servicemodel.AbstractServiceModelImpl.constructServiceImplementation(AbstractServiceModelImpl.java:140)
        at 
org.apache.hivemind.impl.servicemodel.SingletonServiceModel.getActualServiceImplementation(SingletonServiceModel.java:69)
        at $Runnable_10b6a75df19._service($Runnable_10b6a75df19.java)
        at $Runnable_10b6a75df19.run($Runnable_10b6a75df19.java)
        at $Runnable_10b6a75df18.run($Runnable_10b6a75df18.java)
        at 
org.apache.hivemind.impl.RegistryInfrastructureImpl.startup(RegistryInfrastructureImpl.java:436)
        at 
org.apache.hivemind.impl.RegistryBuilder.constructRegistry(RegistryBuilder.java:154)
        at 
org.apache.tapestry.ApplicationServlet.constructRegistry(ApplicationServlet.java:253)
        at 
org.apache.tapestry.ApplicationServlet.init(ApplicationServlet.java:194)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at 
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:239)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
        at 
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:268)
        at 
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:157)
        at 
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:110)
        at 
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1024)
        at 
org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:862)
        at 
org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4013)
        at 
org.apache.catalina.core.StandardContext.start(StandardContext.java:4357)
        at 
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:823)
        at 
org.apache.catalina.core.ContainerBase.access$000(ContainerBase.java:121)
        at 
org.apache.catalina.core.ContainerBase$PrivilegedAddChild.run(ContainerBase.java:143)
        at java.security.AccessController.doPrivileged(Native Method)
        at 
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:805)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:595)
        at 
org.apache.catalina.core.StandardHostDeployer.install(StandardHostDeployer.java:277)
        at org.apache.catalina.core.StandardHost.install(StandardHost.java:832)
        at 
org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:625)
        at 
org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:431)
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:983)
        at 
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:349)
        at 
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1091)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:789)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083)
        at 
org.apache.catalina.core.StandardEngine.start(StandardEngine.java:478)
        at 
org.apache.catalina.core.StandardService.start(StandardService.java:480)
        at 
org.apache.catalina.core.StandardServer.start(StandardServer.java:2313)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:556)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:425)

The catalina.policy file in use is the standard Tomcat one with the following 
appended to grant all permissions to the Tapestry workbench example:

    grant codeBase "file:${catalina.home}/webapps/workbench/-" {
        permission java.security.AllPermission;
    };

Tomcat has been started like so:

    catalina.sh start -security

Not sure if this helps much, but I enabled some java security debugging with:

    export CATALINA_OPTS=-Djava.security.debug=access:failure
    catalina.sh start -security

... that generates:

access: access allowed (java.io.FilePermission 
/usr/local/jakarta-tomcat-5.0.28/webapps/workbench/WEB-INF/classes/org/apache/hivemind/impl/servicemodel/SingletonInnerProxy.class
 read)
access: access allowed (java.io.FilePermission 
/usr/local/jakarta-tomcat-5.0.28/webapps/workbench/WEB-INF/lib/hivemind-1.1.1.jar
 read)
access: access allowed (java.io.FilePermission 
/usr/local/jakarta-tomcat-5.0.28/webapps/workbench/WEB-INF/lib/hivemind-1.1.1.jar
 read)
access: access allowed (java.io.FilePermission 
/usr/local/jakarta-tomcat-5.0.28/webapps/workbench/WEB-INF/lib/hivemind-1.1.1.jar
 read)
access: access allowed (java.lang.RuntimePermission accessDeclaredMembers)
access: access allowed (java.lang.reflect.ReflectPermission 
suppressAccessChecks)
access: access allowed (java.lang.reflect.ReflectPermission 
suppressAccessChecks)
access: access allowed (java.lang.reflect.ReflectPermission 
suppressAccessChecks)
access: access denied (java.io.FilePermission 
/usr/local/jakarta-tomcat-5.0.28/webapps/workbench/WEB-INF/classes/org/apache/hivemind/ServiceImplementationFactory.class
 read)
java.lang.Exception: Stack trace
        at java.lang.Thread.dumpStack(Thread.java:1158)
        at 
java.security.AccessControlContext.checkPermission(AccessControlContext.java:253)
        at 
java.security.AccessController.checkPermission(AccessController.java:427)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
        at java.lang.SecurityManager.checkRead(SecurityManager.java:871)
        at java.io.File.exists(File.java:700)
        at 
org.apache.naming.resources.FileDirContext.file(FileDirContext.java:826)
        at 
org.apache.naming.resources.FileDirContext.lookup(FileDirContext.java:208)
        at 
org.apache.naming.resources.ProxyDirContext.lookup(ProxyDirContext.java:287)
        at 
org.apache.catalina.loader.WebappClassLoader.findResourceInternal(WebappClassLoader.java:1707)
        at 
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1575)
        at 
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:860)
        at 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1307)
        at 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1189)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:164)
        at 
org.apache.hivemind.impl.InvokeFactoryServiceConstructor.class$(InvokeFactoryServiceConstructor.java:83)
        at 
org.apache.hivemind.impl.InvokeFactoryServiceConstructor.setupFactoryAndParameters(InvokeFactoryServiceConstructor.java:82)
        at 
org.apache.hivemind.impl.InvokeFactoryServiceConstructor.constructCoreServiceImplementation(InvokeFactoryServiceConstructor.java:55)
        at 
org.apache.hivemind.impl.servicemodel.AbstractServiceModelImpl.constructCoreServiceImplementation(AbstractServiceModelImpl.java:108)
        at 
org.apache.hivemind.impl.servicemodel.AbstractServiceModelImpl.constructNewServiceImplementation(AbstractServiceModelImpl.java:158)
        at 
org.apache.hivemind.impl.servicemodel.AbstractServiceModelImpl.constructServiceImplementation(AbstractServiceModelImpl.java:140)
        at 
org.apache.hivemind.impl.servicemodel.SingletonServiceModel.getActualServiceImplementation(SingletonServiceModel.java:69)
        at $Runnable_10b6b1bdd89._service($Runnable_10b6b1bdd89.java)
        at $Runnable_10b6b1bdd89.run($Runnable_10b6b1bdd89.java)
        at $Runnable_10b6b1bdd88.run($Runnable_10b6b1bdd88.java)
        at 
org.apache.hivemind.impl.RegistryInfrastructureImpl.startup(RegistryInfrastructureImpl.java:436)
        at 
org.apache.hivemind.impl.RegistryBuilder.constructRegistry(RegistryBuilder.java:154)
        at 
org.apache.tapestry.ApplicationServlet.constructRegistry(ApplicationServlet.java:253)
        at 
org.apache.tapestry.ApplicationServlet.init(ApplicationServlet.java:194)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at 
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:239)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
        at 
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:268)
        at 
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:157)
        at 
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:110)
        at 
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1024)
        at 
org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:862)
        at 
org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4013)
        at 
org.apache.catalina.core.StandardContext.start(StandardContext.java:4357)
        at 
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:823)
        at 
org.apache.catalina.core.ContainerBase.access$000(ContainerBase.java:121)
        at 
org.apache.catalina.core.ContainerBase$PrivilegedAddChild.run(ContainerBase.java:143)
        at java.security.AccessController.doPrivileged(Native Method)
        at 
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:805)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:595)
        at 
org.apache.catalina.core.StandardHostDeployer.install(StandardHostDeployer.java:277)
        at org.apache.catalina.core.StandardHost.install(StandardHost.java:832)
        at 
org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:625)
        at 
org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:431)
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:983)
        at 
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:349)
        at 
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1091)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:789)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1083)
        at 
org.apache.catalina.core.StandardEngine.start(StandardEngine.java:478)
        at 
org.apache.catalina.core.StandardService.start(StandardService.java:480)
        at 
org.apache.catalina.core.StandardServer.start(StandardServer.java:2313)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:556)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:425)
access: access allowed (java.security.SecurityPermission getPolicy)
access: domain that failed ProtectionDomain  (null <no signer certificates>)
 [EMAIL PROTECTED]
 <no principals>
 [EMAIL PROTECTED] (
 (java.lang.RuntimePermission accessClassInPackage.org.apache.jasper.runtime)
 (java.lang.RuntimePermission accessClassInPackage.org.apache.jasper.runtime.*)
 (java.lang.RuntimePermission getAttribute)
 (java.util.PropertyPermission java.version read)
 (java.util.PropertyPermission java.home read)
 (java.util.PropertyPermission java.vm.name read)
 (java.util.PropertyPermission java.vm.vendor read)
 (java.util.PropertyPermission javax.sql.* read)
 (java.util.PropertyPermission os.name read)
 (java.util.PropertyPermission java.vendor.url read)
 (java.util.PropertyPermission java.vm.specification.vendor read)
 (java.util.PropertyPermission java.specification.vendor read)
 (java.util.PropertyPermission os.version read)
 (java.util.PropertyPermission java.specification.name read)
 (java.util.PropertyPermission java.class.version read)
 (java.util.PropertyPermission file.separator read)
 (java.util.PropertyPermission java.vm.version read)
 (java.util.PropertyPermission os.arch read)
 (java.util.PropertyPermission java.naming.* read)
 (java.util.PropertyPermission jaxp.debug read)
 (java.util.PropertyPermission java.vm.specification.name read)
 (java.util.PropertyPermission java.vm.specification.version read)
 (java.util.PropertyPermission java.specification.version read)
 (java.util.PropertyPermission java.vendor read)
 (java.util.PropertyPermission path.separator read)
 (java.util.PropertyPermission line.separator read)
)

There is a similar problem with security manager enabled Tomcat 4.1.31, Java 
SDK 1.4.2_10 on Windows XP where the class loading problem shows up this time 
as:
    
javax.servlet.ServletException: Unable to initialize application servlet: 
Unable to construct service hivemind.Startup: Error at 
jar:file:/C:/jakarta-tomcat-4.1.31/webapps/futrix5dev/WEB-INF/lib/hivemind-1.1.jar!/META-INF/hivemodule.xml,
 line 599, column 43: Unable to process attribute autowire-services (of element 
construct): Unable to construct configuration hivemind.Translators: Error at 
jar:file:/C:/jakarta-tomcat-4.1.31/webapps/futrix5dev/WEB-INF/lib/hivemind-1.1.jar!/META-INF/hivemodule.xml,
 line 555, column 62: Unable to process attribute service-id (of element 
translator): Unable to lookup java.lang.Class: java.lang.Class
        at 
org.apache.tapestry.ApplicationServlet.init(ApplicationServlet.java:206)
        at 
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:888)
    .....
Caused by: org.apache.hivemind.ApplicationRuntimeException: Unable to lookup 
java.lang.Class: java.lang.Class
        at 
org.apache.hivemind.service.impl.CtClassSource.getCtClass(CtClassSource.java:56)
        at 
org.apache.hivemind.service.impl.AbstractFab.convertClass(AbstractFab.java:83)
        at 
org.apache.hivemind.service.impl.AbstractFab.convertClasses(AbstractFab.java:66)
        at 
org.apache.hivemind.service.impl.ClassFabImpl.addMethod(ClassFabImpl.java:280)
        at 
org.apache.hivemind.impl.ProxyBuilder.addServiceMethods(ProxyBuilder.java:139)
        at 
org.apache.hivemind.impl.servicemodel.SingletonServiceModel.createSingletonProxyClass(SingletonServiceModel.java:183)
        at 
org.apache.hivemind.impl.servicemodel.SingletonServiceModel.createSingletonProxy(SingletonServiceModel.java:103)
        ... 73 more
Caused by: javassist.NotFoundException: java.lang.Class
        at javassist.ClassPool.get(ClassPool.java:301)
        at 
org.apache.hivemind.service.impl.CtClassSource.getCtClass(CtClassSource.java:52)
        ... 79 more

The only existing JIRA issue I can find which sounds similar is TAPESTRY-150 
but that is with Tapestry 3.0

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to