[jboss-dev-forums] [Design of the JBoss EJB Container] - Re: JBAS-3428 - Duplication on Proxies

clebert.suconic@jboss.com do-not-reply at jboss.com
Wed Jul 26 00:46:32 EDT 2006


On a EntityBean.remove call, EntityContainer.remove() is calling Container.removeTimerService()

Container.removeTimerService() is calling SecurityActions.getMBeanProxy...

At that point getMBeanProxy is calling MBeanProxyExt.create() that is creating a classLoader and a proxy for every call. What means every EntityBean.remove() is creating a new Proxy.

Fixing SecurityActions.getMBeanProxy to use MBeanProxy.get() instead fixed the problem.

Here is the stack trace from the SpecjTest we were executing:

Pay attention to the name of the proxy ($Proxy18528). I have a GC LOG at the end of this test unloading 40K Proxy classes.

anonymous wrote : "http-192.168.104.7-8080-503" daemon prio=10 tid=0x02273630 nid=0x36c runnable [0xdcd7c000..0xdcd7f8f0]
  |         at java.lang.Class.forName0(Native Method)
  |         at java.lang.Class.forName(Class.java:164)
  |         at $Proxy18528.(Unknown Source)
  |         at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  |         at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
  |         at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
  |         at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
  |         at java.lang.reflect.Proxy.newProxyInstance(Proxy.java:588)
  |         at org.jboss.mx.util.MBeanProxyExt.create(MBeanProxyExt.java:395)
  |         at org.jboss.mx.util.MBeanProxyExt.create(MBeanProxyExt.java:349)
  |         at org.jboss.ejb.SecurityActions.getMBeanProxy(SecurityActions.java:148)
  |         at org.jboss.ejb.Container.removeTimerService(Container.java:739)
  |         at org.jboss.ejb.EntityContainer.remove(EntityContainer.java:539)
  |         at sun.reflect.GeneratedMethodAccessor282.invoke(Unknown Source)
  |         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  |         at java.lang.reflect.Method.invoke(Method.java:585)
  |         at org.jboss.invocation.Invocation.performCall(Invocation.java:359)
  |         at org.jboss.ejb.EntityContainer$ContainerInterceptor.invoke(EntityContainer.java:1176)
  |         at org.jboss.ejb.plugins.cmp.jdbc2.RelationInterceptor.invoke(RelationInterceptor.java:67)
  |         at org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invoke(EntitySynchronizationInterceptor.java:284)
  |         at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:158)
  |         at org.jboss.ejb.plugins.EntityReentranceInterceptor.invoke(EntityReentranceInterceptor.java:126)
  |         at org.jboss.ejb.plugins.EntityInstanceInterceptor.invoke(EntityInstanceInterceptor.java:276)
  |         at org.jboss.ejb.plugins.EntityCreationInterceptor.invoke(EntityCreationInterceptor.java:68)
  |         at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:121)
  |         at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:350)
  |         at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:181)
  |         at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:168)
  |         at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:205)
  |         at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:136)
  |         at org.jboss.ejb.EntityContainer.internalInvoke(EntityContainer.java:520)
  |         at org.jboss.ejb.Container.invoke(Container.java:954)
  |         at org.jboss.ejb.plugins.local.BaseLocalProxyFactory.invoke(BaseLocalProxyFactory.java:430)
  |         at org.jboss.ejb.plugins.local.EntityProxy.invoke(EntityProxy.java:65)
  |         at $Proxy122.remove(Unknown Source)
  |         at org.jboss.ejb.plugins.cmp.jdbc2.bridge.JDBCCMRFieldBridge2$CollectionValuedFieldState.cascadeDelete(JDBCCMRFieldBridge2.java:908)
  |         at org.jboss.ejb.plugins.cmp.jdbc2.bridge.JDBCCMRFieldBridge2.remove(JDBCCMRFieldBridge2.java:281)
  |         at org.jboss.ejb.plugins.cmp.jdbc2.bridge.JDBCEntityBridge2.remove(JDBCEntityBridge2.java:341)
  |         at org.jboss.ejb.plugins.cmp.jdbc2.JDBCStoreManager2.removeEntity(JDBCStoreManager2.java:415)
  |         at org.jboss.ejb.plugins.CMPPersistenceManager.removeEntity(CMPPersistenceManager.java:521)
  |         at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.removeEntity(CachedConnectionInterceptor.java:314)
  |         at org.jboss.ejb.EntityContainer.remove(EntityContainer.java:536)
  |         at sun.reflect.GeneratedMethodAccessor282.invoke(Unknown Source)
  |         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  |         at java.lang.reflect.Method.invoke(Method.java:585)
  |         at org.jboss.invocation.Invocation.performCall(Invocation.java:359)
  |         at org.jboss.ejb.EntityContainer$ContainerInterceptor.invoke(EntityContainer.java:1176)
  |         at org.jboss.ejb.plugins.cmp.jdbc2.RelationInterceptor.invoke(RelationInterceptor.java:67)
  |         at org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invoke(EntitySynchronizationInterceptor.java:284)
  |         at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:158)
  |         at org.jboss.ejb.plugins.EntityReentranceInterceptor.invoke(EntityReentranceInterceptor.java:126)
  |         at org.jboss.ejb.plugins.EntityInstanceInterceptor.invoke(EntityInstanceInterceptor.java:276)
  |         at org.jboss.ejb.plugins.EntityCreationInterceptor.invoke(EntityCreationInterceptor.java:68)
  |         at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:121)
  |         at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:350)
  |         at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:181)
  |         at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:168)
  |         at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:205)
  |         at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:136)
  |         at org.jboss.ejb.EntityContainer.internalInvoke(EntityContainer.java:520)
  |         at org.jboss.ejb.Container.invoke(Container.java:954)
  |         at org.jboss.ejb.plugins.local.BaseLocalProxyFactory.invoke(BaseLocalProxyFactory.java:430)
  |         at org.jboss.ejb.plugins.local.LocalHomeProxy.invoke(LocalHomeProxy.java:121)
  |         at $Proxy81.remove(Unknown Source)
  |  



View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3960870#3960870

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3960870



More information about the jboss-dev-forums mailing list