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

Reply via email to