[
https://issues.apache.org/jira/browse/GERONIMO-4037?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12600300#action_12600300
]
Kevan Miller commented on GERONIMO-4037:
----------------------------------------
Here's a potential workaround. Set the Xorg.apache.geronimo.JarFileClassLoader
property to "false". E.g.:
set JAVA_OPTS=-Djava.security.manager -Djava.security.policy=client.security
-DXorg.apache.geronimo.JarFileClassLoader=false
Your should be able to start Geronimo, now. This isn't really a fix. However,
for a relatively static deployment of Geronimo, this should work fine. If
you're using the server as a development environment and repeatedly
deploying/undeploying applications you'll find that deployment artifacts are
not properly deleted and you also may encounter ClassLoader memory leaks.
Some background -- on Windows we use our own JarFileClassLoader to read from
Jar files (rather than allow the ClassLoader implementation do the reading).
This allows us to avoid the extremely annoying problem of Windows locking jar
files (preventing us from deleting deployment artifacts after an undeploy).
It seems that the JarFileClassLoader is not working properly when you configure
a security manager. Here's some more info...
I agree with Dan that the GeronimoPolicyConfigurationFactory is not ideal.
However, I'm pretty sure that's not the cause of this problem. The Timer-2
thread indicates the problem, I think... I captured the following info I
captured locally:
{noformat}
Thread [main] (Evaluating)
GeronimoPolicy.implies(ProtectionDomain, Permission) line: 74
ProtectionDomain.implies(Permission) line: 195
AccessControlContext.checkPermission(Permission) line: 249
AccessController.checkPermission(Permission) line: 427
SecurityManager.checkPermission(Permission) line: 532
SecurityManager.checkRead(String) line: 871
File.canRead() line: 658
UrlResourceFinder.getClassPath() line: 151
UrlResourceFinder.getResource(String) line: 79
JarFileClassLoader$6.run() line: 278
AccessController.doPrivileged(PrivilegedExceptionAction<T>,
AccessControlContext) line: not available [native method]
JarFileClassLoader.findClass(String) line: 260
JarFileClassLoader(MultiParentClassLoader).loadClassInternal(String,
boolean, LinkedList<ClassLoader>) line: 470
JarFileClassLoader(MultiParentClassLoader).checkParents(String,
boolean, LinkedList<ClassLoader>) line: 498
JarFileClassLoader(MultiParentClassLoader).loadClassInternal(String,
boolean, LinkedList<ClassLoader>) line: 456
JarFileClassLoader(MultiParentClassLoader).checkParents(String,
boolean, LinkedList<ClassLoader>) line: 498
JarFileClassLoader(MultiParentClassLoader).loadOptimizedClass(String,
boolean) line: 407
JarFileClassLoader(MultiParentClassLoader).loadClass(String, boolean)
line: 278
JarFileClassLoader(ClassLoader).loadClass(String) line: 251
JarFileClassLoader(ClassLoader).loadClassInternal(String) line: 319
GeronimoPolicy.implies(ProtectionDomain, Permission) line: 74
ProtectionDomain.implies(Permission) line: 195
AccessControlContext.checkPermission(Permission) line: 249
AccessController.checkPermission(Permission) line: 427
SecurityManager.checkPermission(Permission) line: 532
SecurityManager.checkPropertyAccess(String) line: 1285
System.getProperty(String) line: 628
SecurityServiceImpl.sysOverRide(String, String) line: 101
SecurityServiceImpl.<init>(ClassLoader, ServerInfo, String, String,
String, String, String, String) line: 76
NativeConstructorAccessorImpl.newInstance0(Constructor, Object[]) line:
not available [native method]
NativeConstructorAccessorImpl.newInstance(Object[]) line: 39
DelegatingConstructorAccessorImpl.newInstance(Object[]) line: 27
Constructor<T>.newInstance(Object...) line: 494
GBeanInstance.createInstance() line: 948
GBeanInstanceState.attemptFullStart() line: 268
GBeanInstanceState.start() line: 102
GBeanInstanceState.startRecursive() line: 124
GBeanInstance.startRecursive() line: 555
BasicKernel.startRecursiveGBean(AbstractName) line: 379
ConfigurationUtil.startConfigurationGBeans(AbstractName, Configuration,
Kernel) line: 456
EditableKernelConfigurationManager(KernelConfigurationManager).start(Configuration)
line: 187
EditableKernelConfigurationManager(SimpleConfigurationManager).startConfiguration(Artifact,
LifecycleMonitor) line: 549
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not
available [native method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
Method.invoke(Object, Object...) line: 585
ReflectionMethodInvoker.invoke(Object, Object[]) line: 34
GBeanOperation.invoke(Object, Object[]) line: 124
GBeanInstance.invoke(int, Object[]) line: 832
RawInvoker.invoke(int, Object[]) line: 57
RawOperationInvoker.invoke(AbstractName, Object[]) line: 35
ProxyMethodInterceptor.intercept(Object, Method, Object[], MethodProxy)
line: 96
EditableConfigurationManager$$EnhancerByCGLIB$$d521c36b.startConfiguration(Artifact,
LifecycleMonitor) line: not available
EmbeddedDaemon.doStartup() line: 158
EmbeddedDaemon.execute(Object) line: 79
MainConfigurationBootstrapper.main(MainConfigurationBootstrapper,
Object) line: 45
DaemonCLI(AbstractCLI).executeMain() line: 67
DaemonCLI.main(String[]) line: 30
{noformat}
JarFileClassLoader and UrlResourceFinder are Geronimo classes which are only
used on Windows (they avoid the extremely annoying Windows habit of jar files
getting locked by the OS). I think the problem here is that UrlResourceFinder
is not sufficiently privileged. Result is that we attempt to recursively load
the GeronimoPolicyConfigurationFactory. The ClassLoader is failing on this
recursive load of the GeronimoPolicyConfigurationFactory class. I'm pretty sure
that this is the cause of the LinkageError...
No fix yet. Probably won't look at this until tomorrow. If anybody wants to
jump in, have at it...
> Geronimo 2.0.3 (and I guess at least 2.0.2) can't run with a security
> manager settled from the command line using -Djava.security.manager
> ------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: GERONIMO-4037
> URL: https://issues.apache.org/jira/browse/GERONIMO-4037
> Project: Geronimo
> Issue Type: Bug
> Security Level: public(Regular issues)
> Components: kernel, security
> Affects Versions: 2.0.2
> Environment: Windows Xp Sp2
> Reporter: Jacques Le Roux
> Priority: Blocker
>
> I'm facing an issue on Windows XPsp2: I can't run WASCE with a security
> manager settled from the command line using
> -Djava.security.manager-Djava.security.policy=client.policy options. I get
> the error below. Note that this is working properly under Linux (Ubuntu and
> Suze as well).
> C:\geronimo-tomcat6-jee5-2.0.3\bin>geronimo run
> Using GERONIMO_BASE: C:\geronimo-tomcat6-jee5-2.0.3
> Using GERONIMO_HOME: C:\geronimo-tomcat6-jee5-2.0.3
> Using GERONIMO_TMPDIR: var\temp
> Using JRE_HOME: C:\Program Files\Java\jre1.5.0_11
> Listening for transport dt_socket at address: 5005
> Booting Geronimo Kernel (in Java 1.5.0_11)...
> Starting Geronimo Application Server v2.0.3-SNAPSHOT
> [***> ] 11% 27s Starting
> org.apac...15:57:28,625 ERROR [GBeanInstanceState] Error while starting;
> GBean is now in the FAILED state: abstractName="org.apache.geronimo.configs/
> j2ee-security/2.0.3-SNAPSHOT/car?ServiceModule=org.apache.geronimo.configs/j2ee-security/2.0.3-SNAPSHOT/car,j2eeType=GBean,name=SecurityService"
> java.lang.LinkageError:
> org/apache/geronimo/security/jacc/GeronimoPolicyConfigurationFactory
> at
> org.apache.geronimo.security.jacc.GeronimoPolicy.implies(GeronimoPolicy.java:74)
> at java.security.ProtectionDomain.implies(Unknown Source)
> at java.security.AccessControlContext.checkPermission(Unknown Source)
> at java.security.AccessController.checkPermission(Unknown Source)
> at java.lang.SecurityManager.checkPermission(Unknown Source)
> at java.lang.Thread.setContextClassLoader(Unknown Source)
> at
> org.apache.geronimo.gbean.runtime.GBeanInstance.createInstance(GBeanInstance.java:1056)
> at
> org.apache.geronimo.gbean.runtime.GBeanInstanceState.attemptFullStart(GBeanInstanceState.java:268)
> at
> org.apache.geronimo.gbean.runtime.GBeanInstanceState.start(GBeanInstanceState.java:102)
> at
> org.apache.geronimo.gbean.runtime.GBeanInstanceState.startRecursive(GBeanInstanceState.java:124)
> at
> org.apache.geronimo.gbean.runtime.GBeanInstance.startRecursive(GBeanInstance.java:553)
> at
> org.apache.geronimo.kernel.basic.BasicKernel.startRecursiveGBean(BasicKernel.java:379)
> at
> org.apache.geronimo.kernel.config.ConfigurationUtil.startConfigurationGBeans(ConfigurationUtil.java:448)
> at
> org.apache.geronimo.kernel.config.KernelConfigurationManager.start(KernelConfigurationManager.java:187)
> at
> org.apache.geronimo.kernel.config.SimpleConfigurationManager.startConfiguration(SimpleConfigurationManager.java:530)
> at
> org.apache.geronimo.kernel.config.SimpleConfigurationManager$$FastClassByCGLIB$$ce77a924.invoke(<generated>)
> at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53)
> at
> org.apache.geronimo.gbean.runtime.FastMethodInvoker.invoke(FastMethodInvoker.java:38)
> at
> org.apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.java:124)
> at
> org.apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.java:830)
> at
> org.apache.geronimo.gbean.runtime.RawInvoker.invoke(RawInvoker.java:57)
> at
> org.apache.geronimo.kernel.basic.RawOperationInvoker.invoke(RawOperationInvoker.java:35)
> at
> org.apache.geronimo.kernel.basic.ProxyMethodInterceptor.intercept(ProxyMethodInterceptor.java:96)
> at
> org.apache.geronimo.kernel.config.EditableConfigurationManager$$EnhancerByCGLIB$$7e14cd11.startConfiguration(<generated>)
> at
> org.apache.geronimo.system.main.EmbeddedDaemon.doStartup(EmbeddedDaemon.java:156)
> at
> org.apache.geronimo.system.main.EmbeddedDaemon.execute(EmbeddedDaemon.java:78)
> at
> org.apache.geronimo.kernel.util.MainConfigurationBootstrapper.main(MainConfigurationBootstrapper.java:45)
> at
> org.apache.geronimo.cli.AbstractCLI.executeMain(AbstractCLI.java:67)
> at org.apache.geronimo.cli.daemon.DaemonCLI.main(DaemonCLI.java:30)
> 15:57:28,640 WARN [BasicLifecycleMonitor] Exception occured while notifying
> listener
> [...]
> This is needed in order to launch the OFBiz RMIDispatcher (in other words to
> allow using RMI inside Apache OFBiz). That's why I put this issue as a
> blocker.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.