You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@geronimo.apache.org by "YunFeng Ma (JIRA)" <ji...@apache.org> on 2007/07/30 14:15:54 UTC

[jira] Created: (GERONIMO-3363) ArrayList thread safe problem in OpenJPA

ArrayList thread safe problem in OpenJPA
----------------------------------------

                 Key: GERONIMO-3363
                 URL: https://issues.apache.org/jira/browse/GERONIMO-3363
             Project: Geronimo
          Issue Type: Bug
      Security Level: public (Regular issues)
          Components: persistence
    Affects Versions: 2.0-M7
            Reporter: YunFeng Ma
             Fix For: 2.0-M7


When running stress testing using DayTrader with JPA mode, got a lot of ArrayList thread safe problem.

The thread safe problem happened in  org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction, but this method has the following comments:
            // we don't need to synchronize on brokers or guard against multiple
            // threads using the same trans since one JTA transaction can never
            // be active on multiple concurrent threads.
            Collection brokers = (Collection) _transactional.get(trans);
            if (brokers == null) {
                brokers = new ArrayList(2);
                _transactional.put(trans, brokers);
                trans.registerSynchronization(new RemoveTransactionSync(trans));
            }
            brokers.add(broker);

Does this mean that it's Geronimo which causes the thread safe problem?

The exception stack:
java.rmi.RemoteException: The bean encountered a non-application exception.; nested exception is:
        javax.ejb.EJBException: TradeBean.getClosedOrders - error
        at org.apache.openejb.core.transaction.TransactionPolicy.throwExceptionToServer(TransactionPolicy.java:211)
        at org.apache.openejb.core.transaction.TxRequired.handleSystemException(TxRequired.java:106)
        at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:210)
        at org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
        at org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:211)
        at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:65)
        at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:232)
        at org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
        at $Proxy109.getClosedOrders(Unknown Source)
        at org.apache.geronimo.samples.daytrader.TradeAction.getClosedOrders(TradeAction.java:276)
        at org.apache.geronimo.samples.daytrader.web.OrdersAlertFilter.doFilter(OrdersAlertFilter.java:76)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.geronimo.tomcat.valve.DefaultSubjectValve.invoke(DefaultSubjectValve.java:56)
        at org.apache.geronimo.tomcat.GeronimoStandardContext$SystemMethodValve.invoke(GeronimoStandardContext.java:351)

        at org.apache.geronimo.tomcat.valve.GeronimoBeforeAfterValve.invoke(GeronimoBeforeAfterValve.java:47)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:801)
Caused by: javax.ejb.EJBException: TradeBean.getClosedOrders - error
        at org.apache.geronimo.samples.daytrader.TradeJPA.getClosedOrders(TradeJPA.java:491)
        at sun.reflect.GeneratedMethodAccessor324.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:615)
        at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext
.java:146)
        at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:129)

        at org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:67)
        at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:203)
        ... 24 more
Caused by: <1.0.0-SNAPSHOT-SNAPSHOT nonfatal general error> org.apache.openjpa.persistence.PersistenceException: null
        at org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:738)
        at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:305)
        at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:186)
        at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
        at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:190
)
        at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:55)

        at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.createEntityManager(CMPEntityManagerTxScoped.java:74
)
        at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.getEntityManager(CMPEntityManagerTxScoped.java:55)
        at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.createNamedQuery(CMPEntityManagerTxScoped.java:259)
        at org.apache.geronimo.samples.daytrader.TradeJPA.getClosedOrders(TradeJPA.java:470)
        ... 31 more
Caused by: java.lang.Exception: java.lang.ArrayIndexOutOfBoundsException
        at org.apache.openjpa.util.Exceptions.replaceNestedThrowables(Exceptions.java:242)
        at org.apache.openjpa.persistence.PersistenceException.writeObject(PersistenceException.java:100)
        at sun.reflect.GeneratedMethodAccessor344.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:615)
        at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:972)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1426)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1377)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1106)
        at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1462)
        at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:413)
        at java.lang.Throwable.writeObject(Throwable.java:320)
        at sun.reflect.GeneratedMethodAccessor341.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:615)
        at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:972)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1426)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1377)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1106)
        at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1462)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1434)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1377)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1106)
        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:324)
        at org.apache.openejb.core.ivm.BaseEjbProxyHandler.copyObj(BaseEjbProxyHandler.java:491)
        at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:237)
        ... 20 more
20:00:40,656 ERROR [OpenEJB] The bean instances business method encountered a system exception: null
<1.0.0-SNAPSHOT-SNAPSHOT nonfatal general error> org.apache.openjpa.persistence.PersistenceException: null
        at org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:738)
        at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:305)
        at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:186)
        at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
        at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:190
)
        at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:55)

        at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.createEntityManager(CMPEntityManagerTxScoped.java:74
)
        at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.getEntityManager(CMPEntityManagerTxScoped.java:55)
        at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.find(CMPEntityManagerTxScoped.java:123)
        at org.apache.geronimo.samples.daytrader.TradeJPA.getQuote(TradeJPA.java:201)
        at sun.reflect.GeneratedMethodAccessor330.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:615)
        at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext
.java:146)
        at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:129)

        at org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:67)
        at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:203)
        at org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
        at org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:211)
        at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:65)
        at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:232)
        at org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
        at $Proxy109.getQuote(Unknown Source)
        at org.apache.geronimo.samples.daytrader.TradeAction.getQuote(TradeAction.java:328)
        at org.apache.geronimo.samples.daytrader.web.TradeServletAction.doPortfolio(TradeServletAction.java:518)
        at org.apache.geronimo.samples.daytrader.web.TradeAppServlet.performTask(TradeAppServlet.java:165)
        at org.apache.geronimo.samples.daytrader.web.TradeAppServlet.doGet(TradeAppServlet.java:77)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.geronimo.samples.daytrader.web.OrdersAlertFilter.doFilter(OrdersAlertFilter.java:91)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.geronimo.tomcat.valve.DefaultSubjectValve.invoke(DefaultSubjectValve.java:56)
        at org.apache.geronimo.tomcat.GeronimoStandardContext$SystemMethodValve.invoke(GeronimoStandardContext.java:351)

        at org.apache.geronimo.tomcat.valve.GeronimoBeforeAfterValve.invoke(GeronimoBeforeAfterValve.java:47)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:801)
Caused by:
java.lang.ArrayIndexOutOfBoundsException
        at java.util.ArrayList.add(ArrayList.java:378)
        at org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:732)
        ... 47 more

The problem can be easy fixed by changing the following line:
        brokers = new ArrayList(2); --> brokers = Collections.synchronizedCollection(new ArrayList(2));

But not sure it's whose problem.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Updated: (GERONIMO-3363) ArrayList thread safe problem in OpenJPA

Posted by "Donald Woods (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/GERONIMO-3363?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Donald Woods updated GERONIMO-3363:
-----------------------------------

         Priority: Blocker  (was: Major)
    Fix Version/s:     (was: 2.0-M7)
                   2.0

> ArrayList thread safe problem in OpenJPA
> ----------------------------------------
>
>                 Key: GERONIMO-3363
>                 URL: https://issues.apache.org/jira/browse/GERONIMO-3363
>             Project: Geronimo
>          Issue Type: Bug
>      Security Level: public(Regular issues) 
>          Components: persistence
>    Affects Versions: 2.0-M7
>            Reporter: YunFeng Ma
>            Priority: Blocker
>             Fix For: 2.0
>
>
> When running stress testing using DayTrader with JPA mode, got a lot of ArrayList thread safe problem.
> The thread safe problem happened in  org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction, but this method has the following comments:
>             // we don't need to synchronize on brokers or guard against multiple
>             // threads using the same trans since one JTA transaction can never
>             // be active on multiple concurrent threads.
>             Collection brokers = (Collection) _transactional.get(trans);
>             if (brokers == null) {
>                 brokers = new ArrayList(2);
>                 _transactional.put(trans, brokers);
>                 trans.registerSynchronization(new RemoveTransactionSync(trans));
>             }
>             brokers.add(broker);
> Does this mean that it's Geronimo which causes the thread safe problem?
> The exception stack:
> java.rmi.RemoteException: The bean encountered a non-application exception.; nested exception is:
>         javax.ejb.EJBException: TradeBean.getClosedOrders - error
>         at org.apache.openejb.core.transaction.TransactionPolicy.throwExceptionToServer(TransactionPolicy.java:211)
>         at org.apache.openejb.core.transaction.TxRequired.handleSystemException(TxRequired.java:106)
>         at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:210)
>         at org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:211)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:65)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:232)
>         at org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
>         at $Proxy109.getClosedOrders(Unknown Source)
>         at org.apache.geronimo.samples.daytrader.TradeAction.getClosedOrders(TradeAction.java:276)
>         at org.apache.geronimo.samples.daytrader.web.OrdersAlertFilter.doFilter(OrdersAlertFilter.java:76)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
>         at org.apache.geronimo.tomcat.valve.DefaultSubjectValve.invoke(DefaultSubjectValve.java:56)
>         at org.apache.geronimo.tomcat.GeronimoStandardContext$SystemMethodValve.invoke(GeronimoStandardContext.java:351)
>         at org.apache.geronimo.tomcat.valve.GeronimoBeforeAfterValve.invoke(GeronimoBeforeAfterValve.java:47)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
>         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>         at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
>         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
>         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
>         at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
>         at java.lang.Thread.run(Thread.java:801)
> Caused by: javax.ejb.EJBException: TradeBean.getClosedOrders - error
>         at org.apache.geronimo.samples.daytrader.TradeJPA.getClosedOrders(TradeJPA.java:491)
>         at sun.reflect.GeneratedMethodAccessor324.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext
> .java:146)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:129)
>         at org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:67)
>         at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:203)
>         ... 24 more
> Caused by: <1.0.0-SNAPSHOT-SNAPSHOT nonfatal general error> org.apache.openjpa.persistence.PersistenceException: null
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:738)
>         at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:305)
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:186)
>         at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:190
> )
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.createEntityManager(CMPEntityManagerTxScoped.java:74
> )
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.getEntityManager(CMPEntityManagerTxScoped.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.createNamedQuery(CMPEntityManagerTxScoped.java:259)
>         at org.apache.geronimo.samples.daytrader.TradeJPA.getClosedOrders(TradeJPA.java:470)
>         ... 31 more
> Caused by: java.lang.Exception: java.lang.ArrayIndexOutOfBoundsException
>         at org.apache.openjpa.util.Exceptions.replaceNestedThrowables(Exceptions.java:242)
>         at org.apache.openjpa.persistence.PersistenceException.writeObject(PersistenceException.java:100)
>         at sun.reflect.GeneratedMethodAccessor344.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:972)
>         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1426)
>         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1377)
>         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1106)
>         at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1462)
>         at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:413)
>         at java.lang.Throwable.writeObject(Throwable.java:320)
>         at sun.reflect.GeneratedMethodAccessor341.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:972)
>         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1426)
>         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1377)
>         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1106)
>         at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1462)
>         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1434)
>         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1377)
>         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1106)
>         at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:324)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.copyObj(BaseEjbProxyHandler.java:491)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:237)
>         ... 20 more
> 20:00:40,656 ERROR [OpenEJB] The bean instances business method encountered a system exception: null
> <1.0.0-SNAPSHOT-SNAPSHOT nonfatal general error> org.apache.openjpa.persistence.PersistenceException: null
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:738)
>         at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:305)
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:186)
>         at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:190
> )
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.createEntityManager(CMPEntityManagerTxScoped.java:74
> )
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.getEntityManager(CMPEntityManagerTxScoped.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.find(CMPEntityManagerTxScoped.java:123)
>         at org.apache.geronimo.samples.daytrader.TradeJPA.getQuote(TradeJPA.java:201)
>         at sun.reflect.GeneratedMethodAccessor330.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext
> .java:146)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:129)
>         at org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:67)
>         at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:203)
>         at org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:211)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:65)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:232)
>         at org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
>         at $Proxy109.getQuote(Unknown Source)
>         at org.apache.geronimo.samples.daytrader.TradeAction.getQuote(TradeAction.java:328)
>         at org.apache.geronimo.samples.daytrader.web.TradeServletAction.doPortfolio(TradeServletAction.java:518)
>         at org.apache.geronimo.samples.daytrader.web.TradeAppServlet.performTask(TradeAppServlet.java:165)
>         at org.apache.geronimo.samples.daytrader.web.TradeAppServlet.doGet(TradeAppServlet.java:77)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.apache.geronimo.samples.daytrader.web.OrdersAlertFilter.doFilter(OrdersAlertFilter.java:91)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
>         at org.apache.geronimo.tomcat.valve.DefaultSubjectValve.invoke(DefaultSubjectValve.java:56)
>         at org.apache.geronimo.tomcat.GeronimoStandardContext$SystemMethodValve.invoke(GeronimoStandardContext.java:351)
>         at org.apache.geronimo.tomcat.valve.GeronimoBeforeAfterValve.invoke(GeronimoBeforeAfterValve.java:47)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
>         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>         at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
>         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
>         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
>         at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
>         at java.lang.Thread.run(Thread.java:801)
> Caused by:
> java.lang.ArrayIndexOutOfBoundsException
>         at java.util.ArrayList.add(ArrayList.java:378)
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:732)
>         ... 47 more
> The problem can be easy fixed by changing the following line:
>         brokers = new ArrayList(2); --> brokers = Collections.synchronizedCollection(new ArrayList(2));
> But not sure it's whose problem.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (GERONIMO-3363) ArrayList thread safe problem in OpenJPA

Posted by "Donald Woods (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/GERONIMO-3363?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12517611 ] 

Donald Woods commented on GERONIMO-3363:
----------------------------------------

This was fixed by OPENJPA-295 in Rev562530, which will wait to pull in after 2.0.0 has been released.

> ArrayList thread safe problem in OpenJPA
> ----------------------------------------
>
>                 Key: GERONIMO-3363
>                 URL: https://issues.apache.org/jira/browse/GERONIMO-3363
>             Project: Geronimo
>          Issue Type: Bug
>      Security Level: public(Regular issues) 
>          Components: persistence
>    Affects Versions: 2.0
>            Reporter: YunFeng Ma
>             Fix For: 2.0.x
>
>
> When running stress testing using DayTrader with JPA mode, got a lot of ArrayList thread safe problem.
> The thread safe problem happened in  org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction, but this method has the following comments:
>             // we don't need to synchronize on brokers or guard against multiple
>             // threads using the same trans since one JTA transaction can never
>             // be active on multiple concurrent threads.
>             Collection brokers = (Collection) _transactional.get(trans);
>             if (brokers == null) {
>                 brokers = new ArrayList(2);
>                 _transactional.put(trans, brokers);
>                 trans.registerSynchronization(new RemoveTransactionSync(trans));
>             }
>             brokers.add(broker);
> Does this mean that it's Geronimo which causes the thread safe problem?
> The exception stack:
> java.rmi.RemoteException: The bean encountered a non-application exception.; nested exception is:
>         javax.ejb.EJBException: TradeBean.getClosedOrders - error
>         at org.apache.openejb.core.transaction.TransactionPolicy.throwExceptionToServer(TransactionPolicy.java:211)
>         at org.apache.openejb.core.transaction.TxRequired.handleSystemException(TxRequired.java:106)
>         at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:210)
>         at org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:211)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:65)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:232)
>         at org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
>         at $Proxy109.getClosedOrders(Unknown Source)
>         at org.apache.geronimo.samples.daytrader.TradeAction.getClosedOrders(TradeAction.java:276)
>         at org.apache.geronimo.samples.daytrader.web.OrdersAlertFilter.doFilter(OrdersAlertFilter.java:76)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
>         at org.apache.geronimo.tomcat.valve.DefaultSubjectValve.invoke(DefaultSubjectValve.java:56)
>         at org.apache.geronimo.tomcat.GeronimoStandardContext$SystemMethodValve.invoke(GeronimoStandardContext.java:351)
>         at org.apache.geronimo.tomcat.valve.GeronimoBeforeAfterValve.invoke(GeronimoBeforeAfterValve.java:47)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
>         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>         at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
>         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
>         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
>         at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
>         at java.lang.Thread.run(Thread.java:801)
> Caused by: javax.ejb.EJBException: TradeBean.getClosedOrders - error
>         at org.apache.geronimo.samples.daytrader.TradeJPA.getClosedOrders(TradeJPA.java:491)
>         at sun.reflect.GeneratedMethodAccessor324.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext
> .java:146)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:129)
>         at org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:67)
>         at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:203)
>         ... 24 more
> Caused by: <1.0.0-SNAPSHOT-SNAPSHOT nonfatal general error> org.apache.openjpa.persistence.PersistenceException: null
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:738)
>         at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:305)
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:186)
>         at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:190
> )
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.createEntityManager(CMPEntityManagerTxScoped.java:74
> )
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.getEntityManager(CMPEntityManagerTxScoped.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.createNamedQuery(CMPEntityManagerTxScoped.java:259)
>         at org.apache.geronimo.samples.daytrader.TradeJPA.getClosedOrders(TradeJPA.java:470)
>         ... 31 more
> Caused by: java.lang.Exception: java.lang.ArrayIndexOutOfBoundsException
>         at org.apache.openjpa.util.Exceptions.replaceNestedThrowables(Exceptions.java:242)
>         at org.apache.openjpa.persistence.PersistenceException.writeObject(PersistenceException.java:100)
>         at sun.reflect.GeneratedMethodAccessor344.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:972)
>         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1426)
>         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1377)
>         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1106)
>         at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1462)
>         at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:413)
>         at java.lang.Throwable.writeObject(Throwable.java:320)
>         at sun.reflect.GeneratedMethodAccessor341.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:972)
>         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1426)
>         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1377)
>         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1106)
>         at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1462)
>         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1434)
>         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1377)
>         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1106)
>         at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:324)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.copyObj(BaseEjbProxyHandler.java:491)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:237)
>         ... 20 more
> 20:00:40,656 ERROR [OpenEJB] The bean instances business method encountered a system exception: null
> <1.0.0-SNAPSHOT-SNAPSHOT nonfatal general error> org.apache.openjpa.persistence.PersistenceException: null
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:738)
>         at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:305)
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:186)
>         at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:190
> )
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.createEntityManager(CMPEntityManagerTxScoped.java:74
> )
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.getEntityManager(CMPEntityManagerTxScoped.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.find(CMPEntityManagerTxScoped.java:123)
>         at org.apache.geronimo.samples.daytrader.TradeJPA.getQuote(TradeJPA.java:201)
>         at sun.reflect.GeneratedMethodAccessor330.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext
> .java:146)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:129)
>         at org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:67)
>         at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:203)
>         at org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:211)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:65)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:232)
>         at org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
>         at $Proxy109.getQuote(Unknown Source)
>         at org.apache.geronimo.samples.daytrader.TradeAction.getQuote(TradeAction.java:328)
>         at org.apache.geronimo.samples.daytrader.web.TradeServletAction.doPortfolio(TradeServletAction.java:518)
>         at org.apache.geronimo.samples.daytrader.web.TradeAppServlet.performTask(TradeAppServlet.java:165)
>         at org.apache.geronimo.samples.daytrader.web.TradeAppServlet.doGet(TradeAppServlet.java:77)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.apache.geronimo.samples.daytrader.web.OrdersAlertFilter.doFilter(OrdersAlertFilter.java:91)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
>         at org.apache.geronimo.tomcat.valve.DefaultSubjectValve.invoke(DefaultSubjectValve.java:56)
>         at org.apache.geronimo.tomcat.GeronimoStandardContext$SystemMethodValve.invoke(GeronimoStandardContext.java:351)
>         at org.apache.geronimo.tomcat.valve.GeronimoBeforeAfterValve.invoke(GeronimoBeforeAfterValve.java:47)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
>         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>         at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
>         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
>         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
>         at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
>         at java.lang.Thread.run(Thread.java:801)
> Caused by:
> java.lang.ArrayIndexOutOfBoundsException
>         at java.util.ArrayList.add(ArrayList.java:378)
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:732)
>         ... 47 more
> The problem can be easy fixed by changing the following line:
>         brokers = new ArrayList(2); --> brokers = Collections.synchronizedCollection(new ArrayList(2));
> But not sure it's whose problem.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Closed: (GERONIMO-3363) ArrayList thread safe problem in OpenJPA

Posted by "Donald Woods (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/GERONIMO-3363?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Donald Woods closed GERONIMO-3363.
----------------------------------

       Resolution: Fixed
    Fix Version/s:     (was: 2.0.x)
                   2.1
                   2.0.2

Fixed in OpenJPA right after we cut our revision for 2.0/2.0.1 release.
By picking up the final 1.0.0 release, we will have the fix.

> ArrayList thread safe problem in OpenJPA
> ----------------------------------------
>
>                 Key: GERONIMO-3363
>                 URL: https://issues.apache.org/jira/browse/GERONIMO-3363
>             Project: Geronimo
>          Issue Type: Bug
>      Security Level: public(Regular issues) 
>          Components: persistence
>    Affects Versions: 2.0
>            Reporter: YunFeng Ma
>            Assignee: Donald Woods
>             Fix For: 2.0.2, 2.1
>
>
> When running stress testing using DayTrader with JPA mode, got a lot of ArrayList thread safe problem.
> The thread safe problem happened in  org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction, but this method has the following comments:
>             // we don't need to synchronize on brokers or guard against multiple
>             // threads using the same trans since one JTA transaction can never
>             // be active on multiple concurrent threads.
>             Collection brokers = (Collection) _transactional.get(trans);
>             if (brokers == null) {
>                 brokers = new ArrayList(2);
>                 _transactional.put(trans, brokers);
>                 trans.registerSynchronization(new RemoveTransactionSync(trans));
>             }
>             brokers.add(broker);
> Does this mean that it's Geronimo which causes the thread safe problem?
> The exception stack:
> java.rmi.RemoteException: The bean encountered a non-application exception.; nested exception is:
>         javax.ejb.EJBException: TradeBean.getClosedOrders - error
>         at org.apache.openejb.core.transaction.TransactionPolicy.throwExceptionToServer(TransactionPolicy.java:211)
>         at org.apache.openejb.core.transaction.TxRequired.handleSystemException(TxRequired.java:106)
>         at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:210)
>         at org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:211)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:65)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:232)
>         at org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
>         at $Proxy109.getClosedOrders(Unknown Source)
>         at org.apache.geronimo.samples.daytrader.TradeAction.getClosedOrders(TradeAction.java:276)
>         at org.apache.geronimo.samples.daytrader.web.OrdersAlertFilter.doFilter(OrdersAlertFilter.java:76)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
>         at org.apache.geronimo.tomcat.valve.DefaultSubjectValve.invoke(DefaultSubjectValve.java:56)
>         at org.apache.geronimo.tomcat.GeronimoStandardContext$SystemMethodValve.invoke(GeronimoStandardContext.java:351)
>         at org.apache.geronimo.tomcat.valve.GeronimoBeforeAfterValve.invoke(GeronimoBeforeAfterValve.java:47)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
>         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>         at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
>         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
>         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
>         at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
>         at java.lang.Thread.run(Thread.java:801)
> Caused by: javax.ejb.EJBException: TradeBean.getClosedOrders - error
>         at org.apache.geronimo.samples.daytrader.TradeJPA.getClosedOrders(TradeJPA.java:491)
>         at sun.reflect.GeneratedMethodAccessor324.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext
> .java:146)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:129)
>         at org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:67)
>         at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:203)
>         ... 24 more
> Caused by: <1.0.0-SNAPSHOT-SNAPSHOT nonfatal general error> org.apache.openjpa.persistence.PersistenceException: null
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:738)
>         at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:305)
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:186)
>         at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:190
> )
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.createEntityManager(CMPEntityManagerTxScoped.java:74
> )
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.getEntityManager(CMPEntityManagerTxScoped.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.createNamedQuery(CMPEntityManagerTxScoped.java:259)
>         at org.apache.geronimo.samples.daytrader.TradeJPA.getClosedOrders(TradeJPA.java:470)
>         ... 31 more
> Caused by: java.lang.Exception: java.lang.ArrayIndexOutOfBoundsException
>         at org.apache.openjpa.util.Exceptions.replaceNestedThrowables(Exceptions.java:242)
>         at org.apache.openjpa.persistence.PersistenceException.writeObject(PersistenceException.java:100)
>         at sun.reflect.GeneratedMethodAccessor344.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:972)
>         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1426)
>         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1377)
>         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1106)
>         at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1462)
>         at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:413)
>         at java.lang.Throwable.writeObject(Throwable.java:320)
>         at sun.reflect.GeneratedMethodAccessor341.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:972)
>         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1426)
>         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1377)
>         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1106)
>         at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1462)
>         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1434)
>         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1377)
>         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1106)
>         at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:324)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.copyObj(BaseEjbProxyHandler.java:491)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:237)
>         ... 20 more
> 20:00:40,656 ERROR [OpenEJB] The bean instances business method encountered a system exception: null
> <1.0.0-SNAPSHOT-SNAPSHOT nonfatal general error> org.apache.openjpa.persistence.PersistenceException: null
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:738)
>         at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:305)
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:186)
>         at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:190
> )
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.createEntityManager(CMPEntityManagerTxScoped.java:74
> )
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.getEntityManager(CMPEntityManagerTxScoped.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.find(CMPEntityManagerTxScoped.java:123)
>         at org.apache.geronimo.samples.daytrader.TradeJPA.getQuote(TradeJPA.java:201)
>         at sun.reflect.GeneratedMethodAccessor330.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext
> .java:146)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:129)
>         at org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:67)
>         at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:203)
>         at org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:211)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:65)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:232)
>         at org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
>         at $Proxy109.getQuote(Unknown Source)
>         at org.apache.geronimo.samples.daytrader.TradeAction.getQuote(TradeAction.java:328)
>         at org.apache.geronimo.samples.daytrader.web.TradeServletAction.doPortfolio(TradeServletAction.java:518)
>         at org.apache.geronimo.samples.daytrader.web.TradeAppServlet.performTask(TradeAppServlet.java:165)
>         at org.apache.geronimo.samples.daytrader.web.TradeAppServlet.doGet(TradeAppServlet.java:77)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.apache.geronimo.samples.daytrader.web.OrdersAlertFilter.doFilter(OrdersAlertFilter.java:91)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
>         at org.apache.geronimo.tomcat.valve.DefaultSubjectValve.invoke(DefaultSubjectValve.java:56)
>         at org.apache.geronimo.tomcat.GeronimoStandardContext$SystemMethodValve.invoke(GeronimoStandardContext.java:351)
>         at org.apache.geronimo.tomcat.valve.GeronimoBeforeAfterValve.invoke(GeronimoBeforeAfterValve.java:47)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
>         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>         at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
>         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
>         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
>         at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
>         at java.lang.Thread.run(Thread.java:801)
> Caused by:
> java.lang.ArrayIndexOutOfBoundsException
>         at java.util.ArrayList.add(ArrayList.java:378)
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:732)
>         ... 47 more
> The problem can be easy fixed by changing the following line:
>         brokers = new ArrayList(2); --> brokers = Collections.synchronizedCollection(new ArrayList(2));
> But not sure it's whose problem.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Updated: (GERONIMO-3363) ArrayList thread safe problem in OpenJPA

Posted by "Donald Woods (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/GERONIMO-3363?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Donald Woods updated GERONIMO-3363:
-----------------------------------

      Priority: Major  (was: Blocker)
    Patch Info: [Patch Available]

> ArrayList thread safe problem in OpenJPA
> ----------------------------------------
>
>                 Key: GERONIMO-3363
>                 URL: https://issues.apache.org/jira/browse/GERONIMO-3363
>             Project: Geronimo
>          Issue Type: Bug
>      Security Level: public(Regular issues) 
>          Components: persistence
>    Affects Versions: 2.0-M7
>            Reporter: YunFeng Ma
>             Fix For: 2.0.x
>
>
> When running stress testing using DayTrader with JPA mode, got a lot of ArrayList thread safe problem.
> The thread safe problem happened in  org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction, but this method has the following comments:
>             // we don't need to synchronize on brokers or guard against multiple
>             // threads using the same trans since one JTA transaction can never
>             // be active on multiple concurrent threads.
>             Collection brokers = (Collection) _transactional.get(trans);
>             if (brokers == null) {
>                 brokers = new ArrayList(2);
>                 _transactional.put(trans, brokers);
>                 trans.registerSynchronization(new RemoveTransactionSync(trans));
>             }
>             brokers.add(broker);
> Does this mean that it's Geronimo which causes the thread safe problem?
> The exception stack:
> java.rmi.RemoteException: The bean encountered a non-application exception.; nested exception is:
>         javax.ejb.EJBException: TradeBean.getClosedOrders - error
>         at org.apache.openejb.core.transaction.TransactionPolicy.throwExceptionToServer(TransactionPolicy.java:211)
>         at org.apache.openejb.core.transaction.TxRequired.handleSystemException(TxRequired.java:106)
>         at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:210)
>         at org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:211)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:65)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:232)
>         at org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
>         at $Proxy109.getClosedOrders(Unknown Source)
>         at org.apache.geronimo.samples.daytrader.TradeAction.getClosedOrders(TradeAction.java:276)
>         at org.apache.geronimo.samples.daytrader.web.OrdersAlertFilter.doFilter(OrdersAlertFilter.java:76)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
>         at org.apache.geronimo.tomcat.valve.DefaultSubjectValve.invoke(DefaultSubjectValve.java:56)
>         at org.apache.geronimo.tomcat.GeronimoStandardContext$SystemMethodValve.invoke(GeronimoStandardContext.java:351)
>         at org.apache.geronimo.tomcat.valve.GeronimoBeforeAfterValve.invoke(GeronimoBeforeAfterValve.java:47)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
>         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>         at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
>         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
>         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
>         at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
>         at java.lang.Thread.run(Thread.java:801)
> Caused by: javax.ejb.EJBException: TradeBean.getClosedOrders - error
>         at org.apache.geronimo.samples.daytrader.TradeJPA.getClosedOrders(TradeJPA.java:491)
>         at sun.reflect.GeneratedMethodAccessor324.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext
> .java:146)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:129)
>         at org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:67)
>         at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:203)
>         ... 24 more
> Caused by: <1.0.0-SNAPSHOT-SNAPSHOT nonfatal general error> org.apache.openjpa.persistence.PersistenceException: null
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:738)
>         at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:305)
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:186)
>         at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:190
> )
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.createEntityManager(CMPEntityManagerTxScoped.java:74
> )
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.getEntityManager(CMPEntityManagerTxScoped.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.createNamedQuery(CMPEntityManagerTxScoped.java:259)
>         at org.apache.geronimo.samples.daytrader.TradeJPA.getClosedOrders(TradeJPA.java:470)
>         ... 31 more
> Caused by: java.lang.Exception: java.lang.ArrayIndexOutOfBoundsException
>         at org.apache.openjpa.util.Exceptions.replaceNestedThrowables(Exceptions.java:242)
>         at org.apache.openjpa.persistence.PersistenceException.writeObject(PersistenceException.java:100)
>         at sun.reflect.GeneratedMethodAccessor344.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:972)
>         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1426)
>         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1377)
>         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1106)
>         at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1462)
>         at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:413)
>         at java.lang.Throwable.writeObject(Throwable.java:320)
>         at sun.reflect.GeneratedMethodAccessor341.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:972)
>         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1426)
>         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1377)
>         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1106)
>         at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1462)
>         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1434)
>         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1377)
>         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1106)
>         at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:324)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.copyObj(BaseEjbProxyHandler.java:491)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:237)
>         ... 20 more
> 20:00:40,656 ERROR [OpenEJB] The bean instances business method encountered a system exception: null
> <1.0.0-SNAPSHOT-SNAPSHOT nonfatal general error> org.apache.openjpa.persistence.PersistenceException: null
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:738)
>         at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:305)
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:186)
>         at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:190
> )
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.createEntityManager(CMPEntityManagerTxScoped.java:74
> )
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.getEntityManager(CMPEntityManagerTxScoped.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.find(CMPEntityManagerTxScoped.java:123)
>         at org.apache.geronimo.samples.daytrader.TradeJPA.getQuote(TradeJPA.java:201)
>         at sun.reflect.GeneratedMethodAccessor330.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext
> .java:146)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:129)
>         at org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:67)
>         at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:203)
>         at org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:211)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:65)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:232)
>         at org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
>         at $Proxy109.getQuote(Unknown Source)
>         at org.apache.geronimo.samples.daytrader.TradeAction.getQuote(TradeAction.java:328)
>         at org.apache.geronimo.samples.daytrader.web.TradeServletAction.doPortfolio(TradeServletAction.java:518)
>         at org.apache.geronimo.samples.daytrader.web.TradeAppServlet.performTask(TradeAppServlet.java:165)
>         at org.apache.geronimo.samples.daytrader.web.TradeAppServlet.doGet(TradeAppServlet.java:77)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.apache.geronimo.samples.daytrader.web.OrdersAlertFilter.doFilter(OrdersAlertFilter.java:91)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
>         at org.apache.geronimo.tomcat.valve.DefaultSubjectValve.invoke(DefaultSubjectValve.java:56)
>         at org.apache.geronimo.tomcat.GeronimoStandardContext$SystemMethodValve.invoke(GeronimoStandardContext.java:351)
>         at org.apache.geronimo.tomcat.valve.GeronimoBeforeAfterValve.invoke(GeronimoBeforeAfterValve.java:47)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
>         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>         at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
>         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
>         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
>         at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
>         at java.lang.Thread.run(Thread.java:801)
> Caused by:
> java.lang.ArrayIndexOutOfBoundsException
>         at java.util.ArrayList.add(ArrayList.java:378)
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:732)
>         ... 47 more
> The problem can be easy fixed by changing the following line:
>         brokers = new ArrayList(2); --> brokers = Collections.synchronizedCollection(new ArrayList(2));
> But not sure it's whose problem.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Updated: (GERONIMO-3363) ArrayList thread safe problem in OpenJPA

Posted by "Donald Woods (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/GERONIMO-3363?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Donald Woods updated GERONIMO-3363:
-----------------------------------

    Affects Version/s:     (was: 2.0-M7)
                       2.0

> ArrayList thread safe problem in OpenJPA
> ----------------------------------------
>
>                 Key: GERONIMO-3363
>                 URL: https://issues.apache.org/jira/browse/GERONIMO-3363
>             Project: Geronimo
>          Issue Type: Bug
>      Security Level: public(Regular issues) 
>          Components: persistence
>    Affects Versions: 2.0
>            Reporter: YunFeng Ma
>            Assignee: Donald Woods
>             Fix For: 2.0.x
>
>
> When running stress testing using DayTrader with JPA mode, got a lot of ArrayList thread safe problem.
> The thread safe problem happened in  org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction, but this method has the following comments:
>             // we don't need to synchronize on brokers or guard against multiple
>             // threads using the same trans since one JTA transaction can never
>             // be active on multiple concurrent threads.
>             Collection brokers = (Collection) _transactional.get(trans);
>             if (brokers == null) {
>                 brokers = new ArrayList(2);
>                 _transactional.put(trans, brokers);
>                 trans.registerSynchronization(new RemoveTransactionSync(trans));
>             }
>             brokers.add(broker);
> Does this mean that it's Geronimo which causes the thread safe problem?
> The exception stack:
> java.rmi.RemoteException: The bean encountered a non-application exception.; nested exception is:
>         javax.ejb.EJBException: TradeBean.getClosedOrders - error
>         at org.apache.openejb.core.transaction.TransactionPolicy.throwExceptionToServer(TransactionPolicy.java:211)
>         at org.apache.openejb.core.transaction.TxRequired.handleSystemException(TxRequired.java:106)
>         at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:210)
>         at org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:211)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:65)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:232)
>         at org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
>         at $Proxy109.getClosedOrders(Unknown Source)
>         at org.apache.geronimo.samples.daytrader.TradeAction.getClosedOrders(TradeAction.java:276)
>         at org.apache.geronimo.samples.daytrader.web.OrdersAlertFilter.doFilter(OrdersAlertFilter.java:76)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
>         at org.apache.geronimo.tomcat.valve.DefaultSubjectValve.invoke(DefaultSubjectValve.java:56)
>         at org.apache.geronimo.tomcat.GeronimoStandardContext$SystemMethodValve.invoke(GeronimoStandardContext.java:351)
>         at org.apache.geronimo.tomcat.valve.GeronimoBeforeAfterValve.invoke(GeronimoBeforeAfterValve.java:47)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
>         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>         at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
>         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
>         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
>         at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
>         at java.lang.Thread.run(Thread.java:801)
> Caused by: javax.ejb.EJBException: TradeBean.getClosedOrders - error
>         at org.apache.geronimo.samples.daytrader.TradeJPA.getClosedOrders(TradeJPA.java:491)
>         at sun.reflect.GeneratedMethodAccessor324.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext
> .java:146)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:129)
>         at org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:67)
>         at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:203)
>         ... 24 more
> Caused by: <1.0.0-SNAPSHOT-SNAPSHOT nonfatal general error> org.apache.openjpa.persistence.PersistenceException: null
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:738)
>         at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:305)
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:186)
>         at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:190
> )
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.createEntityManager(CMPEntityManagerTxScoped.java:74
> )
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.getEntityManager(CMPEntityManagerTxScoped.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.createNamedQuery(CMPEntityManagerTxScoped.java:259)
>         at org.apache.geronimo.samples.daytrader.TradeJPA.getClosedOrders(TradeJPA.java:470)
>         ... 31 more
> Caused by: java.lang.Exception: java.lang.ArrayIndexOutOfBoundsException
>         at org.apache.openjpa.util.Exceptions.replaceNestedThrowables(Exceptions.java:242)
>         at org.apache.openjpa.persistence.PersistenceException.writeObject(PersistenceException.java:100)
>         at sun.reflect.GeneratedMethodAccessor344.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:972)
>         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1426)
>         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1377)
>         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1106)
>         at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1462)
>         at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:413)
>         at java.lang.Throwable.writeObject(Throwable.java:320)
>         at sun.reflect.GeneratedMethodAccessor341.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:972)
>         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1426)
>         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1377)
>         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1106)
>         at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1462)
>         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1434)
>         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1377)
>         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1106)
>         at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:324)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.copyObj(BaseEjbProxyHandler.java:491)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:237)
>         ... 20 more
> 20:00:40,656 ERROR [OpenEJB] The bean instances business method encountered a system exception: null
> <1.0.0-SNAPSHOT-SNAPSHOT nonfatal general error> org.apache.openjpa.persistence.PersistenceException: null
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:738)
>         at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:305)
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:186)
>         at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:190
> )
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.createEntityManager(CMPEntityManagerTxScoped.java:74
> )
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.getEntityManager(CMPEntityManagerTxScoped.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.find(CMPEntityManagerTxScoped.java:123)
>         at org.apache.geronimo.samples.daytrader.TradeJPA.getQuote(TradeJPA.java:201)
>         at sun.reflect.GeneratedMethodAccessor330.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext
> .java:146)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:129)
>         at org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:67)
>         at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:203)
>         at org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:211)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:65)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:232)
>         at org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
>         at $Proxy109.getQuote(Unknown Source)
>         at org.apache.geronimo.samples.daytrader.TradeAction.getQuote(TradeAction.java:328)
>         at org.apache.geronimo.samples.daytrader.web.TradeServletAction.doPortfolio(TradeServletAction.java:518)
>         at org.apache.geronimo.samples.daytrader.web.TradeAppServlet.performTask(TradeAppServlet.java:165)
>         at org.apache.geronimo.samples.daytrader.web.TradeAppServlet.doGet(TradeAppServlet.java:77)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.apache.geronimo.samples.daytrader.web.OrdersAlertFilter.doFilter(OrdersAlertFilter.java:91)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
>         at org.apache.geronimo.tomcat.valve.DefaultSubjectValve.invoke(DefaultSubjectValve.java:56)
>         at org.apache.geronimo.tomcat.GeronimoStandardContext$SystemMethodValve.invoke(GeronimoStandardContext.java:351)
>         at org.apache.geronimo.tomcat.valve.GeronimoBeforeAfterValve.invoke(GeronimoBeforeAfterValve.java:47)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
>         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>         at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
>         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
>         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
>         at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
>         at java.lang.Thread.run(Thread.java:801)
> Caused by:
> java.lang.ArrayIndexOutOfBoundsException
>         at java.util.ArrayList.add(ArrayList.java:378)
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:732)
>         ... 47 more
> The problem can be easy fixed by changing the following line:
>         brokers = new ArrayList(2); --> brokers = Collections.synchronizedCollection(new ArrayList(2));
> But not sure it's whose problem.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Updated: (GERONIMO-3363) ArrayList thread safe problem in OpenJPA

Posted by "Prasad Kashyap (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/GERONIMO-3363?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Prasad Kashyap updated GERONIMO-3363:
-------------------------------------

    Fix Version/s:     (was: 2.0)
                   2.0.x

> ArrayList thread safe problem in OpenJPA
> ----------------------------------------
>
>                 Key: GERONIMO-3363
>                 URL: https://issues.apache.org/jira/browse/GERONIMO-3363
>             Project: Geronimo
>          Issue Type: Bug
>      Security Level: public(Regular issues) 
>          Components: persistence
>    Affects Versions: 2.0-M7
>            Reporter: YunFeng Ma
>            Priority: Blocker
>             Fix For: 2.0.x
>
>
> When running stress testing using DayTrader with JPA mode, got a lot of ArrayList thread safe problem.
> The thread safe problem happened in  org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction, but this method has the following comments:
>             // we don't need to synchronize on brokers or guard against multiple
>             // threads using the same trans since one JTA transaction can never
>             // be active on multiple concurrent threads.
>             Collection brokers = (Collection) _transactional.get(trans);
>             if (brokers == null) {
>                 brokers = new ArrayList(2);
>                 _transactional.put(trans, brokers);
>                 trans.registerSynchronization(new RemoveTransactionSync(trans));
>             }
>             brokers.add(broker);
> Does this mean that it's Geronimo which causes the thread safe problem?
> The exception stack:
> java.rmi.RemoteException: The bean encountered a non-application exception.; nested exception is:
>         javax.ejb.EJBException: TradeBean.getClosedOrders - error
>         at org.apache.openejb.core.transaction.TransactionPolicy.throwExceptionToServer(TransactionPolicy.java:211)
>         at org.apache.openejb.core.transaction.TxRequired.handleSystemException(TxRequired.java:106)
>         at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:210)
>         at org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:211)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:65)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:232)
>         at org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
>         at $Proxy109.getClosedOrders(Unknown Source)
>         at org.apache.geronimo.samples.daytrader.TradeAction.getClosedOrders(TradeAction.java:276)
>         at org.apache.geronimo.samples.daytrader.web.OrdersAlertFilter.doFilter(OrdersAlertFilter.java:76)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
>         at org.apache.geronimo.tomcat.valve.DefaultSubjectValve.invoke(DefaultSubjectValve.java:56)
>         at org.apache.geronimo.tomcat.GeronimoStandardContext$SystemMethodValve.invoke(GeronimoStandardContext.java:351)
>         at org.apache.geronimo.tomcat.valve.GeronimoBeforeAfterValve.invoke(GeronimoBeforeAfterValve.java:47)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
>         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>         at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
>         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
>         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
>         at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
>         at java.lang.Thread.run(Thread.java:801)
> Caused by: javax.ejb.EJBException: TradeBean.getClosedOrders - error
>         at org.apache.geronimo.samples.daytrader.TradeJPA.getClosedOrders(TradeJPA.java:491)
>         at sun.reflect.GeneratedMethodAccessor324.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext
> .java:146)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:129)
>         at org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:67)
>         at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:203)
>         ... 24 more
> Caused by: <1.0.0-SNAPSHOT-SNAPSHOT nonfatal general error> org.apache.openjpa.persistence.PersistenceException: null
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:738)
>         at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:305)
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:186)
>         at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:190
> )
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.createEntityManager(CMPEntityManagerTxScoped.java:74
> )
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.getEntityManager(CMPEntityManagerTxScoped.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.createNamedQuery(CMPEntityManagerTxScoped.java:259)
>         at org.apache.geronimo.samples.daytrader.TradeJPA.getClosedOrders(TradeJPA.java:470)
>         ... 31 more
> Caused by: java.lang.Exception: java.lang.ArrayIndexOutOfBoundsException
>         at org.apache.openjpa.util.Exceptions.replaceNestedThrowables(Exceptions.java:242)
>         at org.apache.openjpa.persistence.PersistenceException.writeObject(PersistenceException.java:100)
>         at sun.reflect.GeneratedMethodAccessor344.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:972)
>         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1426)
>         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1377)
>         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1106)
>         at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1462)
>         at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:413)
>         at java.lang.Throwable.writeObject(Throwable.java:320)
>         at sun.reflect.GeneratedMethodAccessor341.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:972)
>         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1426)
>         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1377)
>         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1106)
>         at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1462)
>         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1434)
>         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1377)
>         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1106)
>         at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:324)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.copyObj(BaseEjbProxyHandler.java:491)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:237)
>         ... 20 more
> 20:00:40,656 ERROR [OpenEJB] The bean instances business method encountered a system exception: null
> <1.0.0-SNAPSHOT-SNAPSHOT nonfatal general error> org.apache.openjpa.persistence.PersistenceException: null
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:738)
>         at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:305)
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:186)
>         at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:190
> )
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.createEntityManager(CMPEntityManagerTxScoped.java:74
> )
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.getEntityManager(CMPEntityManagerTxScoped.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.find(CMPEntityManagerTxScoped.java:123)
>         at org.apache.geronimo.samples.daytrader.TradeJPA.getQuote(TradeJPA.java:201)
>         at sun.reflect.GeneratedMethodAccessor330.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext
> .java:146)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:129)
>         at org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:67)
>         at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:203)
>         at org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:211)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:65)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:232)
>         at org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
>         at $Proxy109.getQuote(Unknown Source)
>         at org.apache.geronimo.samples.daytrader.TradeAction.getQuote(TradeAction.java:328)
>         at org.apache.geronimo.samples.daytrader.web.TradeServletAction.doPortfolio(TradeServletAction.java:518)
>         at org.apache.geronimo.samples.daytrader.web.TradeAppServlet.performTask(TradeAppServlet.java:165)
>         at org.apache.geronimo.samples.daytrader.web.TradeAppServlet.doGet(TradeAppServlet.java:77)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.apache.geronimo.samples.daytrader.web.OrdersAlertFilter.doFilter(OrdersAlertFilter.java:91)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
>         at org.apache.geronimo.tomcat.valve.DefaultSubjectValve.invoke(DefaultSubjectValve.java:56)
>         at org.apache.geronimo.tomcat.GeronimoStandardContext$SystemMethodValve.invoke(GeronimoStandardContext.java:351)
>         at org.apache.geronimo.tomcat.valve.GeronimoBeforeAfterValve.invoke(GeronimoBeforeAfterValve.java:47)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
>         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>         at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
>         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
>         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
>         at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
>         at java.lang.Thread.run(Thread.java:801)
> Caused by:
> java.lang.ArrayIndexOutOfBoundsException
>         at java.util.ArrayList.add(ArrayList.java:378)
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:732)
>         ... 47 more
> The problem can be easy fixed by changing the following line:
>         brokers = new ArrayList(2); --> brokers = Collections.synchronizedCollection(new ArrayList(2));
> But not sure it's whose problem.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Assigned: (GERONIMO-3363) ArrayList thread safe problem in OpenJPA

Posted by "Donald Woods (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/GERONIMO-3363?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Donald Woods reassigned GERONIMO-3363:
--------------------------------------

    Assignee: Donald Woods

> ArrayList thread safe problem in OpenJPA
> ----------------------------------------
>
>                 Key: GERONIMO-3363
>                 URL: https://issues.apache.org/jira/browse/GERONIMO-3363
>             Project: Geronimo
>          Issue Type: Bug
>      Security Level: public(Regular issues) 
>          Components: persistence
>    Affects Versions: 2.0
>            Reporter: YunFeng Ma
>            Assignee: Donald Woods
>             Fix For: 2.0.x
>
>
> When running stress testing using DayTrader with JPA mode, got a lot of ArrayList thread safe problem.
> The thread safe problem happened in  org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction, but this method has the following comments:
>             // we don't need to synchronize on brokers or guard against multiple
>             // threads using the same trans since one JTA transaction can never
>             // be active on multiple concurrent threads.
>             Collection brokers = (Collection) _transactional.get(trans);
>             if (brokers == null) {
>                 brokers = new ArrayList(2);
>                 _transactional.put(trans, brokers);
>                 trans.registerSynchronization(new RemoveTransactionSync(trans));
>             }
>             brokers.add(broker);
> Does this mean that it's Geronimo which causes the thread safe problem?
> The exception stack:
> java.rmi.RemoteException: The bean encountered a non-application exception.; nested exception is:
>         javax.ejb.EJBException: TradeBean.getClosedOrders - error
>         at org.apache.openejb.core.transaction.TransactionPolicy.throwExceptionToServer(TransactionPolicy.java:211)
>         at org.apache.openejb.core.transaction.TxRequired.handleSystemException(TxRequired.java:106)
>         at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:210)
>         at org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:211)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:65)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:232)
>         at org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
>         at $Proxy109.getClosedOrders(Unknown Source)
>         at org.apache.geronimo.samples.daytrader.TradeAction.getClosedOrders(TradeAction.java:276)
>         at org.apache.geronimo.samples.daytrader.web.OrdersAlertFilter.doFilter(OrdersAlertFilter.java:76)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
>         at org.apache.geronimo.tomcat.valve.DefaultSubjectValve.invoke(DefaultSubjectValve.java:56)
>         at org.apache.geronimo.tomcat.GeronimoStandardContext$SystemMethodValve.invoke(GeronimoStandardContext.java:351)
>         at org.apache.geronimo.tomcat.valve.GeronimoBeforeAfterValve.invoke(GeronimoBeforeAfterValve.java:47)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
>         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>         at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
>         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
>         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
>         at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
>         at java.lang.Thread.run(Thread.java:801)
> Caused by: javax.ejb.EJBException: TradeBean.getClosedOrders - error
>         at org.apache.geronimo.samples.daytrader.TradeJPA.getClosedOrders(TradeJPA.java:491)
>         at sun.reflect.GeneratedMethodAccessor324.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext
> .java:146)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:129)
>         at org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:67)
>         at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:203)
>         ... 24 more
> Caused by: <1.0.0-SNAPSHOT-SNAPSHOT nonfatal general error> org.apache.openjpa.persistence.PersistenceException: null
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:738)
>         at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:305)
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:186)
>         at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:190
> )
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.createEntityManager(CMPEntityManagerTxScoped.java:74
> )
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.getEntityManager(CMPEntityManagerTxScoped.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.createNamedQuery(CMPEntityManagerTxScoped.java:259)
>         at org.apache.geronimo.samples.daytrader.TradeJPA.getClosedOrders(TradeJPA.java:470)
>         ... 31 more
> Caused by: java.lang.Exception: java.lang.ArrayIndexOutOfBoundsException
>         at org.apache.openjpa.util.Exceptions.replaceNestedThrowables(Exceptions.java:242)
>         at org.apache.openjpa.persistence.PersistenceException.writeObject(PersistenceException.java:100)
>         at sun.reflect.GeneratedMethodAccessor344.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:972)
>         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1426)
>         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1377)
>         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1106)
>         at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1462)
>         at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:413)
>         at java.lang.Throwable.writeObject(Throwable.java:320)
>         at sun.reflect.GeneratedMethodAccessor341.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:972)
>         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1426)
>         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1377)
>         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1106)
>         at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1462)
>         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1434)
>         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1377)
>         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1106)
>         at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:324)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.copyObj(BaseEjbProxyHandler.java:491)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:237)
>         ... 20 more
> 20:00:40,656 ERROR [OpenEJB] The bean instances business method encountered a system exception: null
> <1.0.0-SNAPSHOT-SNAPSHOT nonfatal general error> org.apache.openjpa.persistence.PersistenceException: null
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:738)
>         at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:305)
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:186)
>         at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:190
> )
>         at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.createEntityManager(CMPEntityManagerTxScoped.java:74
> )
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.getEntityManager(CMPEntityManagerTxScoped.java:55)
>         at org.apache.geronimo.persistence.CMPEntityManagerTxScoped.find(CMPEntityManagerTxScoped.java:123)
>         at org.apache.geronimo.samples.daytrader.TradeJPA.getQuote(TradeJPA.java:201)
>         at sun.reflect.GeneratedMethodAccessor330.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:615)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext
> .java:146)
>         at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:129)
>         at org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:67)
>         at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:203)
>         at org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:211)
>         at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:65)
>         at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:232)
>         at org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
>         at $Proxy109.getQuote(Unknown Source)
>         at org.apache.geronimo.samples.daytrader.TradeAction.getQuote(TradeAction.java:328)
>         at org.apache.geronimo.samples.daytrader.web.TradeServletAction.doPortfolio(TradeServletAction.java:518)
>         at org.apache.geronimo.samples.daytrader.web.TradeAppServlet.performTask(TradeAppServlet.java:165)
>         at org.apache.geronimo.samples.daytrader.web.TradeAppServlet.doGet(TradeAppServlet.java:77)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.apache.geronimo.samples.daytrader.web.OrdersAlertFilter.doFilter(OrdersAlertFilter.java:91)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
>         at org.apache.geronimo.tomcat.valve.DefaultSubjectValve.invoke(DefaultSubjectValve.java:56)
>         at org.apache.geronimo.tomcat.GeronimoStandardContext$SystemMethodValve.invoke(GeronimoStandardContext.java:351)
>         at org.apache.geronimo.tomcat.valve.GeronimoBeforeAfterValve.invoke(GeronimoBeforeAfterValve.java:47)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
>         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>         at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
>         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
>         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
>         at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
>         at java.lang.Thread.run(Thread.java:801)
> Caused by:
> java.lang.ArrayIndexOutOfBoundsException
>         at java.util.ArrayList.add(ArrayList.java:378)
>         at org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:732)
>         ... 47 more
> The problem can be easy fixed by changing the following line:
>         brokers = new ArrayList(2); --> brokers = Collections.synchronizedCollection(new ArrayList(2));
> But not sure it's whose problem.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.