Hi,

Sorry for the long delay, forgot to thank you for your input. I have decided to keep the manual synchronisation until https://issues.apache.org/jira/browse/ARIES-885 is fixed.

kind regards,
Lukas Stampf

Am 18.07.2012 11:42, schrieb Huylebroeck Johan:
Hi,
You can just inject the EntityManagerFactory  which is thread safe and then in 
the methods of your dao create an EntityManager that you only use for this call.
Example blueprint.xml below

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
   xmlns:jpa="http://aries.apache.org/xmlns/jpa/v1.0.0";
   xmlns:tx="http://aries.apache.org/xmlns/transactions/v1.0.0";
   xsi:schemaLocation="
     http://www.osgi.org/xmlns/blueprint/v1.0.0 
http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
     http://aries.apache.org/xmlns/jpa/v1.0.0 
http://aries.apache.org/schemas/jpa/jpa.xsd
     http://aries.apache.org/xmlns/transactions/v1.0.0 
http://aries.apache.org/schemas/transaction/transactionv10.xsd";>
<bean id="workManager" class="be.i8c.batch_nt.work.impl.WorkManager">
        <jpa:unit property="emf" unitname="batch_nt" />
     </bean>
<service id="workManagerService" ref="workManager" auto-export="interfaces"/> </blueprint>

-----Original Message-----
From: Lukas Stampf [mailto:[email protected]]
Sent: woensdag 18 juli 2012 11:25
To: [email protected]
Subject: EntityManager Synchronisation Problem

Hi all,

I am using openjpa and aries blueprint(last deployed SNAPSHOT) on latest Karaf 
SNAPSHOT.
I have a bundle offering a persistence service to my other bundles.

My blueprint configuration is the following:
    <bean id="connectorJPA"
class="org.openengsb.persistence.connector.jpabackend.ConnectorJPAPersistenceBackendService">
      <tx:transaction method="*" value="Required" />
      <jpa:context property="entityManager" unitname="openengsb-connector" />
    </bean>

    <service
interface="org.openengsb.core.api.persistence.ConfigPersistenceBackendService">
      <service-properties>
        <entry key="backend.id" value="connector-jpa-persistence" />
      </service-properties>
      <ref component-id="connectorJPA" />
    </service>

part of the persistence.xml
<persistence-unit name="openengsb-connector" transaction-type="JTA"> 
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/openengsb)</jta-data-source>

My problem is that I have to put the calls to the entityManager into 
synchronized(entityManager){} blocks, because the service can get called 
multiple times at once, leading to synchronisation errors in the entityManager 
since it is not thread safe.

Is there an equivalent to Spring's SharedEntityManagerImpl or any better 
solution than synchronise manually?

kind regards,
Lukas Stampf


Reply via email to