Hi!

I've been getting this error randomly:

<openjpa-2.1.0-r422266:1071316 fatal internal error> 
org.apache.openjpa.util.InternalException: Multiple concurrent threads 
attempted to access a single broker. By default brokers are not thread safe; if 
you require and/or intend a broker to be accessed by more than one thread, set 
the openjpa.Multithreaded property to true to override the default behavior.
at org.apache.openjpa.kernel.BrokerImpl.endOperation(BrokerImpl.java:1935)
...

The pattern in my web app is the "entity manager per request" pattern, 
implemented like this:

http://www.uta.fi/~th77842/PersistenceRequestListener.java
http://www.uta.fi/~th77842/PersistenceManager.java

Basically, I force each request to have its own EntityManager. Some persisted 
entities are shared between threads, but not EntityManagers.

The problem only occurs when it's a Tomcat specific thread (e.g. TP-Processor) 
using an EntityManager. I haven't had the problem using my own agent threads or 
using the ThreadPoolExecutor 
to process jobs. The problem has happened on inserts, selects or accessing a 
field in a persisted entity.

The servlet container I use is Tomcat 6. The database is PostgreSQL 8.1.4. JPA 
related libraries I use: openjpa-2.1.0.jar, geronimo-jpa_2.0_spec-1.1.jar, 
geronimo-jta_1.1_spec-1.1.1.jar.

Persistence configuration:

<properties>
      <property name="openjpa.jdbc.DBDictionary" value="postgres"/>
      <property name="openjpa.jdbc.DriverDataSource" value="dbcp"/>
      <property name="openjpa.ConnectionProperties"
                value="DriverClassName=org.postgresql.Driver,
                  Url=jdbc:postgresql://...,
                  MaxActive=100,
                  MaxWait=10000,
                  Username=test,
                  Password=test"/>
      <property name="openjpa.ConnectionDriverName"
                value="org.apache.commons.dbcp.BasicDataSource"/>
      <property name="openjpa.Log" value="log4j"/>
      <property name="openjpa.ConnectionFactoryProperties"
    value="PrettyPrint=true, PrettyPrintLineLength=80, PrintParameters=true"/>
      <property name="openjpa.DataCache" value="false"/>
      <property name="openjpa.InitializeEagerly" value="true"/>
      <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema"/>
</properties>

For the life of me I can't figure out why it's still happening. I am certain 
it's some subtle (or not so subtle) bug in my code or in the configuration I've 
done. I can understand if OpenJPA throws the error on 
persisted entities which are shared between threads, but it shouldn't happen on 
simple inserts.

Any help would be appreciated. Thanks!

Reply via email to