[ 
https://issues.apache.org/jira/browse/OPENJPA-295?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12517373
 ] 

Craig Russell commented on OPENJPA-295:
---------------------------------------

Hi Marc,

There should not be any issue using the identical instance of TSR for the 
registerSynchronization, get/setRollbackOnly, and getStatus methods. The issue 
is the assumption that the Transaction instance is different for each 
transaction.

I think that Michael Dick's #2 solution is needed. The _transactional is 
already a concurrent map but all the keys are identical so the basic premise 
doesn't work.

More basic, the AbstractBrokerFactory method findTransactionalBroker should 
have a different implementation for TSR, which has direct support for this 
functionality via the getResource and putResource methods. I think I'd rather 
delegate the "findTransactionalBroker" to the ManagedRuntime, which could do 
the current behavior in other than TSR environments but delegate to the TSR 
behavior in the app server.

Back to the current problem how about adding Object getTransactionKey() to 
ManagedRuntime which in non-TSR implementations returns "this" and in TSR 
returns "this.getTransactionKey()".

> ArrayIndexOutofBoundsException when under load and within a managed 
> Transaction
> -------------------------------------------------------------------------------
>
>                 Key: OPENJPA-295
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-295
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: jpa
>    Affects Versions: 1.0.0
>         Environment: openjpa running under WebSphere development builds, as 
> well as Geronimo development builds
>            Reporter: Rob Wisniewski
>            Priority: Blocker
>         Attachments: OPENJPA-295.diff.txt, OPENJPA295.patch
>
>
> Recent development builds of our WAS products as well as the Geronimo project 
> are seeing exceptions when running under load.  An example of the exception 
> is below:
> Caused by: 
> java.lang.ArrayIndexOutOfBoundsException
>       at java.util.ArrayList.add(ArrayList.java:378)
>       at 
> org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:684)
>       ... 39 more
> This is the deepest trace I can get with the actual exception, but the 
> wrappering exception shows this stack trace for geronimo:
> <1.0.0-SNAPSHOT-SNAPSHOT nonfatal general error> 
> org.apache.openjpa.persistence.PersistenceException: null
>       at 
> org.apache.openjpa.kernel.AbstractBrokerFactory.syncWithManagedTransaction(AbstractBrokerFactory.java:690)
>       at org.apache.openjpa.kernel.BrokerImpl.initialize(BrokerImpl.java:304)
>       at 
> org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:182)
>       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.ejb3.TradeSLSBBean.getClosedOrders(TradeSLSBBean.java:335)
> This is happening in two separate products with two different JTA 
> implementations, and also both of these products were working at one point.
> Any ideas?

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

Reply via email to