Thank you Tim. Any idea what the JNDI names would be? It is Pax-JDBC creating these JNDI names, so I have no idea.
From the Karaf console: karaf@root()> jndi:names JNDI Name │ Class Name ───────────────────────┼─────────────────────────────────────────────── osgi:service/responder │ org.mariadb.jdbc.MySQLDataSource osgi:service/jndi │ org.apache.karaf.jndi.internal.JndiServiceImpl Best regards, Alex soto > On May 16, 2018, at 3:48 PM, Tim Ward <[email protected]> wrote: > > Just looking quickly. > > You have the same JNDI name for both JTA and non JTA DataSources. This is > clearly wrong as the DataSource cannot simultaneously be enlisted in the > Transaction and not enlisted. The comments also indicate a misunderstanding > of the purpose of the non-jta-datasource, which absolutely is used with JTA > EntityManagers (for things like sequence allocation and out of band > optimisations). You really do need to have both and they do need to behave > differently. > > At a guess your DataSource is not enlisted with the transaction manager > present in the system. This usually happens by configuring a (otherwise > invisible) DataSource wrapper There is nothing forcing you to make this > happen (or checking that it does) hence your transactions would be broken. > This is one of the several reasons I try to direct people to Transaction > Control where the model actively pushes you toward transactions that actually > work, rather than hiding all the magic behind an annotation. > > Hopefully this gives you some clues as to what might be wrong. > > Best Regards, > > Tim > > Sent from my iPhone > >> On 16 May 2018, at 21:34, Jean-Baptiste Onofré <[email protected]> wrote: >> >> Are you sure about your code ? Flush looks weird to me and it seems you >> don't use container managed transaction. >> >> Regards >> JB >> >>> On 16/05/2018 21:08, Alex Soto wrote: >>> Yes, same result. I even tried with Narayana Transaction Manager, and same >>> result. >>> Best regards, >>> Alex soto >>>> On May 16, 2018, at 2:56 PM, Jean-Baptiste Onofré <[email protected] >>>> <mailto:[email protected]>> wrote: >>>> >>>> Same behavior with RequiresNew ? >>>> >>>> Regards >>>> JB >>>> >>>>> On 16/05/2018 19:44, Alex Soto wrote: >>>>> With Karaf version 4.2.0, Rollback is not working with MariaDB and InnoDB >>>>> tables. >>>>> I deployed these features (from Karaf’s enterprise repository): >>>>> <feature>aries-blueprint</feature> >>>>> <feature>transaction</feature> >>>>> <feature>jndi</feature> >>>>> <feature>jdbc</feature> >>>>> <feature>jpa</feature> >>>>> <feature>pax-jdbc-mariadb</feature> >>>>> <feature>pax-jdbc-config</feature> >>>>> <feature>pax-jdbc-pool-dbcp2</feature> >>>>> <feature>hibernate</feature> >>>>> My Data Source is configured in the file >>>>> /org.ops4j.datasource-responder.cfg/ >>>>> osgi.jdbc.driver.name = mariadb >>>>> dataSourceName=responder >>>>> url >>>>> = >>>>> jdbc:mariadb://mariadb.local:3306/responder?characterEncoding=UTF-8&useServerPrepStmts=true&autocommit=false >>>>> user=XXXX >>>>> password=XXXX >>>>> databaseName=responder >>>>> #Pool Config >>>>> pool=dbcp2 >>>>> xa=true >>>>> My persistence.xml: >>>>> <persistence version="2.0" >>>>> xmlns="http://java.sun.com/xml/ns/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"> >>>>> <persistence-unit name="responderPersistenUnit" >>>>> transaction-type="JTA"> >>>>> >>>>> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> >>>>> <!-- Only used when transaction-type=JTA --> >>>>> >>>>> <jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)</jta-data-source> >>>>> <!-- Only used when transaction-type=RESOURCE_LOCAL --> >>>>> >>>>> <non-jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=responder)</non-jta-data-source> >>>>> <properties> >>>>> <property name=“hibernate.dialect" >>>>> value="org.hibernate.dialect.MySQL5Dialect" /> >>>>> <property name="hibernate.show_sql" value="true" /> >>>>> <property name="hibernate.format_sql" value="true" /> >>>>> <property name="hibernate.hbm2ddl.auto" value="none"/> >>>>> </properties> >>>>> </persistence-unit> >>>>> </persistence> >>>>> My blueprint.xml: >>>>> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" >>>>> xmlns:jpa="http://aries.apache.org/xmlns/jpa/v2.0.0" >>>>> xmlns:tx="http://aries.apache.org/xmlns/transactions/v2.0.0" >>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >>>>> xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 >>>>> https://osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> >>>>> <jpa:enable /> >>>>> <tx:enable /> >>>>> <bean id="userService" class="org.data.impl.UserServiceImpl" /> >>>>> <service ref="userService" interface="org.data.UserService" /> >>>>> </blueprint> >>>>> For testing I throw exception in my DAO: >>>>> @Transactional(REQUIRED) >>>>> public void addUser(User user) { >>>>> em.persist(user); >>>>> em.flush(); >>>>> throw new RuntimeException("On Purpose"); >>>>> } >>>>> I expect the record not to be in the table due to rollback of the >>>>> transaction, but it still shows up in my database table. >>>>> Best regards, >>>>> Alex soto
