If you're running Fuse 6.3, you may find this example[1] useful. I've
described how datasources work and there are working (docker based) Camel
routes using XA and non-XA datasources.

Are you sure org.apache.commons.dbcp.BasicDataSource is not working with
auto-commit mode by default?

regards
Grzegorz Grzybek
===
[1]:
https://github.com/FuseByExample/camel-persistence-part2/tree/jboss-fuse-6.2

2017-06-09 16:23 GMT+02:00 renalexster <[email protected]>:

> Hi,
>
> I'm having problems with the entityManager when I try to run in OSGI
> environment (jboss-fuse-6.3-fabric).
> Everything works locally running by camel:run, but in the OSGI container
> the
> transaction is not committed in the database
>
> Here
> <https://github.com/renalexster/camel-jpa-idempotent/tree/entityManager-
> transaction>
> is an example of my route.
>
> =================== CamelRoute ===================
> public class CamelRoute extends RouteBuilder {
>
>         @Override
>         public void configure() throws Exception {
>                 from("file:input?noop=true&delay=60000").transacted()
>                 .unmarshal(new BindyCsvDataFormat(Client.class))
>                 .split().simple("${body}")
>                         .log("Processing Client [${body.name}]")
>                         .bean(MyService.class, "recordLog")
>                         .log("${body.name} processed");
>         }
>
> }
> =================== CamelRoute ===================
>
>
> =================== MyService ===================
> @Component
> public class MyService {
>         @PersistenceContext(unitName="persistenceUnit") private
> EntityManager em;
>
>         private static final Logger LOG = LoggerFactory.getLogger(
> MyService.class);
>
>         public void recordLog(@Body Client client, Exchange exchange) {
>                 LOG.info("Inserting client ["+client.getName()+"]");
>                 client = em.merge(client);
>                 LOG.info("Inserted client ["+client.getId()+" -
> "+client.getName()+"]");
>                 LOG.info("Inserting LogClient");
>                 LogClient log = new LogClient();
>                 log.setClient(client);
>                 SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy
> HH:mm:ss");
>                 String strDate = sdf.format(new Date());
>                 log.setTxtLog("Persisted Client ["+client.getName()+"] at
> ["+strDate+"]");
>                 em.persist(log);
>                 LOG.info("Inserted LogClient ["+log.getId()+"]");
>         }
> }
> =================== MyService ===================
>
> =================== persistence.xml ===================
> <persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
> http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd";
>     version="2.0" xmlns="http://java.sun.com/xml/ns/persistence";>
>     <persistence-unit name="persistenceUnit"
>         transaction-type="RESOURCE_LOCAL">
>
>         <provider>org.hibernate.ejb.HibernatePersistence</provider>
>
>         <class>com.mycompany.model.Client</class>
>         <class>com.mycompany.model.LogClient</class>
>
>          <properties>
>             <property name="javax.persistence.jdbc.driver"
> value="org.postgresql.Driver" />
>             <property name="javax.persistence.jdbc.url"
> value="jdbc:postgresql://192.168.238.1:5432/camel-jpa" />
>             <property name="javax.persistence.jdbc.user" value="camel-jpa"
> />
>             <property name="javax.persistence.jdbc.password"
> value="123456"
> />
>             <property name="hibernate.dialect"
> value="org.hibernate.dialect.PostgreSQLDialect" /> -->
>         </properties>
>     </persistence-unit>
> </persistence>
> =================== persistence.xml ===================
>
> =================== camel-context.xml ===================
> <beans xmlns="http://www.springframework.org/schema/beans";
>     xmlns:camel="http://camel.apache.org/schema/spring";
>     xmlns:ctx="http://www.springframework.org/schema/context";
>     xmlns:osgi="http://www.springframework.org/schema/osgi";
>     xmlns:osgix="http://www.springframework.org/schema/osgi-compendium";
>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> xsi:schemaLocation="http://www.springframework.org/schema/beans
> http://www.springframework.org/schema/beans/spring-beans.xsd
> http://www.springframework.org/schema/osgi
> http://www.springframework.org/schema/osgi/spring-osgi.xsd
> http://www.springframework.org/schema/osgi-compendium
> http://www.springframework.org/schema/osgi-compendium/
> spring-osgi-compendium.xsd
> http://www.springframework.org/schema/context
> http://www.springframework.org/schema/context/spring-context-3.0.xsd
> http://camel.apache.org/schema/spring
> http://camel.apache.org/schema/spring/camel-spring.xsd";>
>     <osgix:cm-properties id="parametros.spring"
> persistent-id="parametros.spring">
>         <prop key="db.driverClassName">org.postgresql.Driver</prop>
>         <prop
> key="db.url">jdbc:postgresql://192.168.238.1:5432/camel-jpa</prop>
>         <prop key="db.username">camel-jpa</prop>
>         <prop key="db.password">123456</prop>
>         <prop key="connection.show_sql">true</prop>
>     </osgix:cm-properties>
>     <ctx:property-placeholder properties-ref="parametros.spring"/>
>     <ctx:annotation-config/>
>     <bean class="com.mycompany.routes.CamelRoute" id="javaCamelRoute"/>
>     <bean
>         class="org.springframework.orm.jpa.vendor.
> HibernateJpaVendorAdapter"
> id="jpaAdapter">
>         <property name="showSql" value="true"/>
>         <property name="databasePlatform"
> value="org.hibernate.dialect.PostgreSQLDialect"/>
>     </bean>
>     <bean class="org.apache.commons.dbcp.BasicDataSource" id="dataSource">
>         <property name="driverClassName" value="${db.driverClassName}"/>
>         <property name="url" value="${db.url}"/>
>         <property name="username" value="${db.username}"/>
>         <property name="password" value="${db.password}"/>
>     </bean>
>     <bean class="org.apache.camel.component.jpa.JpaComponent" id="jpa">
>         <property name="entityManagerFactory" ref="entityManagerFactory"/>
>         <property name="transactionManager" ref="jpaTxManager"/>
>     </bean>
>     <bean class="org.springframework.orm.jpa.JpaTransactionManager"
> id="jpaTxManager">
>         <property name="entityManagerFactory" ref="entityManagerFactory"/>
>     </bean>
>     <bean
>
> class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
> id="entityManagerFactory">
>         <property name="dataSource" ref="dataSource"/>
>         <property name="jpaVendorAdapter" ref="jpaAdapter"/>
>         <property name="persistenceUnitName" value="persistenceUnit"/>
>     </bean>
>     <camelContext id="amq-example-context"
>         xmlns="http://camel.apache.org/schema/spring";
> xmlns:order="http://com.mycompany/examples/order";>
>         <propertyPlaceholder id="properties"
> location="ref:parametros.spring"/>
>         <routeBuilder ref="javaCamelRoute"/>
>     </camelContext>
> </beans>
> =================== camel-context.xml ===================
>
>
>
> --
> View this message in context: http://camel.465427.n5.nabble.
> com/EntityManager-Transaction-OSGi-tp5802805.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>

Reply via email to