On 13.01.2012 23:51, Katherine Marsden wrote:
I user reported this exception with 10.8.2.3 - (1212722). I don't
have the exact jvm version or debug stack trace information yet.
As best I can tell the method in order to get into thread.init() is
just doing
runningThread = new Thread(this, "index-stat-thread");
So I am not sure if this is a Derby bug or maybe a JVM bug. Just
thought I would get it out there.
Hi Kathey,
I'm not sure what the real problem is here. We have other code executing
"new Thread(...)", but I don't see the modifyThreadGroup action (from
RuntimePermission) in our template security policy at all.
It also seems that ThreadGroup is considered obsolete, because many of
its methods are either deprecated or flawed, yet you have to specify one
(explicitly or implicitly) when creating a new thread.
A little digging indicates that the modifyThreadGroup permission is only
used when the system thread group is being modified. The question then
is whether the code is trying to modify the system thread group, and if
so, why is the VM choosing to add the new thread to that group?
Using the utility method BaseMonitor.getDaemonThread may be an option
for Derby, since it explicitly sets a thread group when creating the
thread. There is fallback code to use null as the thread group (which
would let the VM decide which thread group to use, i.e. typically the
thread group of the parent thread).
It would probably also be good to be consistent about this to make it
simpler to keep track of new threads created by the Derby engine.
I also saw a report of this problem for an older version of IBM
WebSphere (could it have been version 6?), but I don't know if this is
relevant at all here.
--
Kristian
Stack Trace:
java.security.AccessControlException: Access denied
(java.lang.RuntimePermission modifyThreadGroup)
at
java.security.AccessController.checkPermission(AccessController.java:108)
at
java.lang.SecurityManager.checkPermission(SecurityManager.java:544)
at
com.ibm.ws.security.core.SecurityManager.checkPermission(SecurityManager.java:208)
at
com.ibm.ws.security.core.SecurityManager.checkAccess(SecurityManager.java:407)
at java.lang.ThreadGroup.checkAccess(ThreadGroup.java:226)
at java.lang.Thread.initialize(Thread.java:345)
at java.lang.Thread.<init>(Thread.java:281)
at java.lang.Thread.<init>(Thread.java:179)
at
org.apache.derby.impl.services.daemon.IndexStatisticsDaemonImpl.schedule(Unknown
Source)
at
org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown
Source)
at
org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown
Source)
at
org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(Unknown Source)
at
org.apache.derby.impl.jdbc.EmbedPreparedStatement20.<init>(Unknown
Source)
at
org.apache.derby.impl.jdbc.EmbedPreparedStatement30.<init>(Unknown
Source)
at
org.apache.derby.impl.jdbc.EmbedPreparedStatement40.<init>(Unknown
Source)
at
org.apache.derby.jdbc.Driver40.newEmbedPreparedStatement(Unknown Source)
at
org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown
Source)
at
org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown
Source)
at
org.apache.derby.iapi.jdbc.BrokeredConnection.prepareStatement(Unknown
Source)
at
com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.pmiPrepareStatement(WSJdbcConnection.java:2536)
at
com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:2783)
at
com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:2731)
at
com.ibm.events.datastore.impl.DatabaseSpecificsImpl.getColumnMap(DatabaseSpecificsImpl.java:1346)
at
com.ibm.events.datastore.impl.DatabaseSpecificsImpl.<init>(DatabaseSpecificsImpl.java:354)
at
com.ibm.events.datastore.impl.DerbyDatabaseSpecificsImpl.<init>(DerbyDatabaseSpecificsImpl.java:69)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:56)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:39)
at
java.lang.reflect.Constructor.newInstance(Constructor.java:527)
at
com.ibm.events.datastore.impl.DatabaseSpecificsFactory.getDatabaseSpecifics(DatabaseSpecificsFactory.java:442)
at
com.ibm.events.datastore.impl.DefaultDataStoreEJBBean.initializeDataStore(DefaultDataStoreEJBBean.java:291)
at
com.ibm.events.datastore.impl.DefaultDataStoreEJBBean.ejbCreate(DefaultDataStoreEJBBean.java:162)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
at java.lang.reflect.Method.invoke(Method.java:611)
at
com.ibm.ejs.container.StatelessBeanO.initialize(StatelessBeanO.java:348)
at
com.ibm.ejs.container.BeanOFactory.create(BeanOFactory.java:147)
at com.ibm.ejs.container.EJSHome.createBeanO(EJSHome.java:1240)
at com.ibm.ejs.container.EJSHome.createBeanO(EJSHome.java:1358)
at
com.ibm.ejs.container.activator.UncachedActivationStrategy.atActivate(UncachedActivationStrategy.java:88)
at
com.ibm.ejs.container.activator.Activator.preInvokeActivateBean(Activator.java:614)
at
com.ibm.ejs.container.EJSContainer.preInvokeActivate(EJSContainer.java:4075)
at
com.ibm.ejs.container.EJSContainer.preInvoke(EJSContainer.java:3360)
at
com.ibm.events.datastore.EJSLocalStatelessDefaultDataStoreEJB_6b454685.getMetaData(Unknown
Source)
at
com.ibm.events.server.DataStoreFactory.checkDataStoreCbeVersion(DataStoreFactory.java:321)
at
com.ibm.events.server.DataStoreFactory.getDataStoreLocal(DataStoreFactory.java:252)
at
com.ibm.events.access.impl.EventAccessHelper.getDataStore(EventAccessHelper.java:173)
at
com.ibm.events.access.impl.EventAccessEjb.purgeEvents(EventAccessEjb.java:442)
at
com.ibm.events.access.EJSRemoteStatelessEventAccessEjb_a71165bf.purgeEvents(Unknown
Source)
at