Thanks Tim, 

I was using branch R7, changed to master, it builds now.

Now I have updated my project to OSGi 7 with Transaction Control, how do I 
deploy to Karaf?
i.e., what bundles/features do I need?


Best regards,
Alex soto




> On May 17, 2018, at 2:08 PM, Tim Ward <tim.w...@paremus.com> wrote:
> 
> Hi Alex,
> 
> Bnd 4.0.0 was only released last Sunday, but this should have been changed 
> yesterday in this commit 
> https://github.com/osgi/osgi.enroute/commit/9f9857c3d317cd08a7aaf7327c1904676299f9ee
>  
> <https://github.com/osgi/osgi.enroute/commit/9f9857c3d317cd08a7aaf7327c1904676299f9ee>
>  to make sure enRoute kept building. 
> 
> EnRoute is automatically pushed to the sonatype OSGi nexus repository, so is 
> it possible that you’re running offline, or firewalled from the repo? You 
> should be able to force snapshot updates from the Maven command line. 
> 
> Best Regards,
> 
> Tim
> 
> Sent from my iPhone
> 
> On 17 May 2018, at 18:26, Alex Soto <alex.s...@envieta.com 
> <mailto:alex.s...@envieta.com>> wrote:
> 
>> Allright,  I am trying to follow the EnRoute tutorial.
>> 
>> I am getting this error:
>> 
>> [ERROR] Plugin biz.aQute.bnd:bnd-maven-plugin:4.0.0-SNAPSHOT or one of its 
>> dependencies could not be resolved: Could not find artifact 
>> biz.aQute.bnd:bnd-maven-plugin:jar:4.0.0-SNAPSHOT in Bnd Snapshots 
>> (https://bndtools.ci.cloudbees.com/job/bnd.master/lastSuccessfulBuild/artifact/dist/bundles/
>>  
>> <https://bndtools.ci.cloudbees.com/job/bnd.master/lastSuccessfulBuild/artifact/dist/bundles/>)
>>  -> [Help 1]
>> 
>> 
>> Any idea (time frame) when this will move from SNAPSHOT dependencies?
>> 
>> 
>> Best regards,
>> Alex soto
>> 
>> 
>> 
>> 
>>> On May 17, 2018, at 11:08 AM, Tim Ward <tim.w...@paremus.com 
>>> <mailto:tim.w...@paremus.com>> wrote:
>>> 
>>> It is highly unlikely that you’ll hit the same issues. The transaction 
>>> control resource provider uses the DataSourceFactory directly to create a 
>>> DataSource (either progamatically using a factory service or via config 
>>> admin) that enlists itself in the ongoing transaction. This means that the 
>>> answer to your question is “with Transaction Control you don’t have to do 
>>> that because it does it automatically”
>>> 
>>> If you want to use XA transactions then the only requirement is that the 
>>> DataSourceFactory can produce an XADataSource, otherwise it just uses the 
>>> standard JDBC API to commit/rollback. If your DataSourceFactory doesn’t 
>>> support XA then use the local resource provider implementation.
>>> 
>>> Best Regards,
>>> 
>>> Tim
>>> 
>>> Sent from my iPhone
>>> 
>>> On 17 May 2018, at 15:17, Alex Soto <alex.s...@envieta.com 
>>> <mailto:alex.s...@envieta.com>> wrote:
>>> 
>>>> I will take a look at these examples.
>>>> 
>>>> However, I think that if I cannot get a MariaDB DataSource that supports 
>>>> transactions, then it will still not work, right?
>>>> If the examples use H2 database, I still may get different results when I 
>>>> change to MariaDB, and I will find myself in the same spot as of now.
>>>> 
>>>> So, the question remains about what is the correct way how to register a 
>>>> transaction aware MariaDB DataSource.
>>>> 
>>>> 
>>>> Best regards,
>>>> Alex soto
>>>> 
>>>> 
>>>> 
>>>> 
>>>>> On May 17, 2018, at 1:46 AM, Tim Ward <tim.w...@paremus.com 
>>>>> <mailto:tim.w...@paremus.com>> wrote:
>>>>> 
>>>>> The best place to start when looking for OSGi R7 examples is the enRoute 
>>>>> Project. It contains Maven Archetypes, examples and worked tutorials for 
>>>>> building applications using R7 specifications. 
>>>>> 
>>>>> https://enroute.osgi.org <https://enroute.osgi.org/Tutorial/>
>>>>> 
>>>>> Most of the projects in use are just new versions of long established 
>>>>> OSGi implementations from Aries and Felix. The majority of them are 
>>>>> already released and in Maven Central. Those that are still in the 
>>>>> process of releasing (pretty much just the JAX-RS whiteboard) are 
>>>>> available in the Apache Snapshots repository. I am not aware of any 
>>>>> implementations that require R7 framework features, so all of them should 
>>>>> run on Karaf.
>>>>> 
>>>>> Best Regards,
>>>>> 
>>>>> Tim
>>>>> 
>>>>> Sent from my iPhone
>>>>> 
>>>>> On 16 May 2018, at 22:25, Alex Soto <alex.s...@envieta.com 
>>>>> <mailto:alex.s...@envieta.com>> wrote:
>>>>> 
>>>>>> I agree, it s very frustrating and time consuming. Almost impossible to 
>>>>>> get it right.
>>>>>> I may try the OSGi R7, but I am not sure of its adoption level at this 
>>>>>> time, availability of bundles, examples, support by Karaf, etc.
>>>>>> 
>>>>>> 
>>>>>> Anyway, back to my current stack.  I only see one DataSource being 
>>>>>> registered:
>>>>>> 
>>>>>> karaf@root()> service:list DataSource
>>>>>> [javax.sql.DataSource]
>>>>>> ----------------------
>>>>>>  databaseName = responder
>>>>>>  dataSourceName = responder
>>>>>>  osgi.jdbc.driver.name = mariadb
>>>>>>  osgi.jndi.service.name = responder
>>>>>>  service.bundleid = 14
>>>>>>  service.factoryPid = org.ops4j.datasource
>>>>>>  service.id <http://service.id/> = 194
>>>>>>  service.pid = org.ops4j.datasource.feb33f6d-dc46-4bc7-a417-ad6bdd5a6ee5
>>>>>>  service.scope = singleton
>>>>>>  url = jdbc:mariadb:XXXXXX
>>>>>> Provided by : 
>>>>>>  OPS4J Pax JDBC Config (14)
>>>>>> Used by: 
>>>>>>  Data (135)
>>>>>> 
>>>>>> 
>>>>>> Not sure what to do with this.  
>>>>>> I specified the following in the configuration:
>>>>>> 
>>>>>> pool=narayana
>>>>>> xa=true
>>>>>> 
>>>>>> Best regards,
>>>>>> Alex soto
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>>> On May 16, 2018, at 4:12 PM, Tim Ward <tim.w...@paremus.com 
>>>>>>> <mailto:tim.w...@paremus.com>> wrote:
>>>>>>> 
>>>>>>> The structure of the JNDI name is defined by the JNDI service 
>>>>>>> specification. 
>>>>>>> 
>>>>>>> osgi:service/<interface name>[/<filter>]
>>>>>>> 
>>>>>>> So in this case both of your services should be DataSource instances, 
>>>>>>> but they should have different filters. 
>>>>>>> 
>>>>>>> The important thing is to make sure you have an JTA enlisting 
>>>>>>> DataSource registered as a service (this isn’t just your normal 
>>>>>>> DataSource), then to build a filter which selects that. One option for 
>>>>>>> this is to use the enlistment whiteboard from Aries (not well 
>>>>>>> documented) 
>>>>>>> https://github.com/apache/aries/tree/trunk/transaction/transaction-jdbc 
>>>>>>> <https://github.com/apache/aries/tree/trunk/transaction/transaction-jdbc>
>>>>>>> 
>>>>>>> This is a non-trivial thing to do, which is why I keep mentioning 
>>>>>>> Transaction Control which handles the enlistment reliably without the 
>>>>>>> layers of services. 
>>>>>>> 
>>>>>>> Best Regards,
>>>>>>> 
>>>>>>> Tim
>>>>>>> 
>>>>>>> Sent from my iPhone
>>>>>>> 
>>>>>>> On 16 May 2018, at 21:57, Alex Soto <alex.s...@envieta.com 
>>>>>>> <mailto:alex.s...@envieta.com>> wrote:
>>>>>>> 
>>>>>>>> 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 <tim.w...@paremus.com 
>>>>>>>>> <mailto:tim.w...@paremus.com>> 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é <j...@nanthrax.net 
>>>>>>>>>> <mailto:j...@nanthrax.net>> 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é 
>>>>>>>>>>>> <j...@nanthrax.net <mailto:j...@nanthrax.net> 
>>>>>>>>>>>> <mailto:j...@nanthrax.net <mailto:j...@nanthrax.net>>> 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
>>>>>>>>>>>>>  
>>>>>>>>>>>>> <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 
>>>>>>>>>>>>> <http://java.sun.com/xml/ns/persistence>"
>>>>>>>>>>>>>        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance 
>>>>>>>>>>>>> <http://www.w3.org/2001/XMLSchema-instance>"
>>>>>>>>>>>>>        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
>>>>>>>>>>>>> <http://java.sun.com/xml/ns/persistence>
>>>>>>>>>>>>> http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd 
>>>>>>>>>>>>> <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 
>>>>>>>>>>>>> <http://www.osgi.org/xmlns/blueprint/v1.0.0>"
>>>>>>>>>>>>>   xmlns:jpa="http://aries.apache.org/xmlns/jpa/v2.0.0 
>>>>>>>>>>>>> <http://aries.apache.org/xmlns/jpa/v2.0.0>"
>>>>>>>>>>>>>   xmlns:tx="http://aries.apache.org/xmlns/transactions/v2.0.0 
>>>>>>>>>>>>> <http://aries.apache.org/xmlns/transactions/v2.0.0>"
>>>>>>>>>>>>>   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance 
>>>>>>>>>>>>> <http://www.w3.org/2001/XMLSchema-instance>"
>>>>>>>>>>>>>   xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 
>>>>>>>>>>>>> <http://www.osgi.org/xmlns/blueprint/v1.0.0>
>>>>>>>>>>>>> https://osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd 
>>>>>>>>>>>>> <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
>>>>>>>> 
>>>>>> 
>>>> 
>> 

Reply via email to