karaf-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jean-Baptiste Onofre ...@nanthrax.net>
Subject Re: Karaf 4.2.8-SNAPSHOT - pax-jdbc 1.4.4 - prehook not working
Date Tue, 07 Apr 2020 10:52:42 GMT
Hi Stefan,

If the problem is related to PAX JDBC in static distribution, it’s not yet fully fixed.

All the details is in the Jira: the problem is about the resolver order. When using static
distribution, all features are startup features, meaning that all is evaluated at same stage.
As PAX JDBC has requirements from framework, the framework should be evaluated before pax-jdbc.
It’s not a problem when using pax JDBC as boot feature in dynamic distribution as startup
is evaluated first and then boot features.
But with static distribution, again, all is at "same level"/startup.

My plan is to add an order on startup properties to be able to address resolution order in
startup.

I plan to fix that for Karaf 4.2.9.

Regards
JB

> Le 7 avr. 2020 à 12:47, stefang <stefan.guenst@me.com> a écrit :
> 
> Hi Erwin,
> 
> we tried it with static distribution based on 4.2.8 Release without any luck
> (4.2.6 without problems)
> Anything we missed?
> 
> Regards 
> 
> Stefan 
> 
> 
> 
> Erwin Hogeweg wrote
>> Hi Lukas,
>> 
>> Glad I could help.
>> 
>> Happy coding.
>> 
>> Erwin
>> 
>> 
>>> On Mar 18, 2020, at 12:13, Roedl Lukas &lt;
> 
>> Lukas.Roedl@.ac
> 
>> &gt; wrote:
>>> 
>>> Hi Erwin,
>>> 
>>> Thanks for your input – finally I had time to test it extensively and
>>> it’s working now!!!
>>> In the end the source of error was sitting in front of the PC ;-)
>>> 
>>> The problem was that some dependencies where embedded into the actual
>>> bundle and at the same time these dependencies are also provided by
>>> pax-jdbc via the feature.
>>> (for details see [1])
>>> 
>>> So no actual problem with Pax-JDBC itself :-)
>>> 
>>> Thanks again!
>>> 
>>> Best, Lukas
>>> 
>>> [1]
>>> https://github.com/roedll/pax-jdbc-pre-hook-test/blob/master/bundle-headers.diff#L10-L12
<https://github.com/roedll/pax-jdbc-pre-hook-test/blob/master/bundle-headers.diff#L10-L12>
>>> &lt;https://github.com/roedll/pax-jdbc-pre-hook-test/blob/master/bundle-headers.diff#L10-L12&gt
<https://github.com/roedll/pax-jdbc-pre-hook-test/blob/master/bundle-headers.diff#L10-L12&gt>;
>>> 
>>> Von: Erwin Hogeweg &lt;
> 
>> erwin.hogeweg@
> 
>> &gt; 
>>> Gesendet: Mittwoch, 19. Februar 2020 12:53
>>> An: 
> 
>> user@.apache
> 
>>> Betreff: Re: Karaf 4.2.8-SNAPSHOT - pax-jdbc 1.4.4 - prehook not working
>>> 
>>> Lukas ,
>>> 
>>> It looks like you missed my pom.xml changes…Once I applied those to your
>>> git version it worked again. I was unable to push the change to GitHub so
>>> here they are again.
>>> 
>>> I reduced the maven-bundle-plugin to:
>>> 
>>> 
>>> 
>> <groupId>
>> org.apache.felix
>> </groupId>
>>> 
>> <artifactId>
>> maven-bundle-plugin
>> </artifactId>
>>> 
>> <extensions>
>> true
>> </extensions>
>>> 
>> <configuration>
>>> 
> 
>>> 
>> <obrRepository>
>> NONE
>> </obrRepository>
>>> 
>> <instructions>
>>>        <_nouses>true
>> </_nouses>
>>> 
>> <Bundle-SymbolicName>
>> ${project.artifactId}
>> </Bundle-SymbolicName>
>>> 
>> </instructions>
>>> 
>> </configuration>
>>> 
>>> FWIW…  I am running OSX Catalina with Java-8.
>>> 
>>> 
>>> Erwin
>>> 
>>> 
>>> 
>>> 
>>> On Feb 19, 2020, at 05:36, Roedl Lukas &lt;
> 
>> Lukas.Roedl@.ac
> 
>> &lt;mailto:
> 
>> Lukas.Roedl@.ac
> 
>> &gt;> wrote:
>>> 
>>> @Erwin: Thanks for testing!
>>> 
>>> I tried to reproduce and incorporated your proposed changes in
>>> https://github.com/roedll/pax-jdbc-pre-hook-test/commit/1a427187148461da564326ceae36622c5f943e90
<https://github.com/roedll/pax-jdbc-pre-hook-test/commit/1a427187148461da564326ceae36622c5f943e90>
>>> &lt;https://github.com/roedll/pax-jdbc-pre-hook-test/commit/1a427187148461da564326ceae36622c5f943e90&gt
<https://github.com/roedll/pax-jdbc-pre-hook-test/commit/1a427187148461da564326ceae36622c5f943e90&gt>;
>>> 
>>> But unfortunately I had no luck that the PreHook finally got called.
>>> 
>>> Did you also change some other things?
>>> 
>>> Best,
>>> Lukas
>>> 
>>> Von: Jean-Baptiste Onofré &lt;
> 
>> jb@
> 
>> &lt;mailto:
> 
>> jb@
> 
>> &gt;> 
>>> Gesendet: Dienstag, 18. Februar 2020 20:02
>>> An: 
> 
>> user@.apache
> 
>> &lt;mailto:
> 
>> user@.apache
> 
>> &gt;
>>> Betreff: Re: Karaf 4.2.8-SNAPSHOT - pax-jdbc 1.4.4 - prehook not working
>>> 
>>> Thanks for the update. I will investigate tomorrow. I will keep you
>>> posted. 
>>> 
>>> Regards 
>>> JB
>>> 
>>> Le mar. 18 f?vr. 2020 ? 17:01, Erwin Hogeweg &lt;
> 
>> erwin.hogeweg@
> 
>> &lt;mailto:
> 
>> erwin.hogeweg@
> 
>> &gt;> a ?crit :
>>> Lukas,
>>> 
>>> I believe I have some success by copying configuration from my env. to
>>> the prehook test.
>>> 
>>> 2020-02-18T10:35:05,924 | INFO  | features-3-thread-1 | PreHookTest         
           
>>> | 50 - prehook - 1.0.0.SNAPSHOT | Starting PreHookTest ...
>>> 2020-02-18T10:35:05,928 | WARN  | activator-1-thread-1 | SshUtils           
            
>>> | 38 - org.apache.karaf.shell.ssh - 4.2.8 | Configured cipher
>>> 'aes256-ctr' not available
>>> 2020-02-18T10:35:05,931 | INFO  | features-3-thread-1 |
>>> ServiceTrackerHelper             | 16 - org.ops4j.pax.jdbc.config - 1.4.4
>>> | Obtained service dependency:
>>> (&(objectClass=org.osgi.service.jdbc.DataSourceFactory)(osgi.jdbc.driver.name=sqlite))
>>> 2020-02-18T10:35:05,931 | WARN  | activator-1-thread-1 | SshUtils           
            
>>> | 38 - org.apache.karaf.shell.ssh - 4.2.8 | Configured cipher
>>> 'aes192-ctr' not available
>>> 2020-02-18T10:35:05,932 | INFO  | features-3-thread-1 |
>>> DataSourceRegistration           | 16 - org.ops4j.pax.jdbc.config - 1.4.4
>>> | Found DataSourceFactory. Creating DataSource prehook-test
>>> 2020-02-18T10:35:05,953 | INFO  | features-3-thread-1 |
>>> DataSourceRegistration           | 16 - org.ops4j.pax.jdbc.config - 1.4.4
>>> | Executing pre hook for DataSource prehook-test
>>> 2020-02-18T10:35:05,953 | INFO  | features-3-thread-1 | PreHookTest         
           
>>> | 50 - prehook - 1.0.0.SNAPSHOT | Called PreHookTest.prepare() ?
>>> 
>>> I reduced the maven-bundle-plugin to:
>>> 
>>> 
>> <groupId>
>> org.apache.felix
>> </groupId>
>>> 
>> <artifactId>
>> maven-bundle-plugin
>> </artifactId>
>>> 
>> <extensions>
>> true
>> </extensions>
>>> 
>> <configuration>
>>> 
> 
>>> 
>> <obrRepository>
>> NONE
>> </obrRepository>
>>> 
>> <instructions>
>>>        <_nouses>true
>> </_nouses>
>>> 
>> <Bundle-SymbolicName>
>> ${project.artifactId}
>> </Bundle-SymbolicName>
>>> 
>> </instructions>
>>> 
>> </configuration>
>>> 
>>> And I changed the component annotations to:
>>> 
>>>  @Component(
>>>    // scope = ServiceScope.SINGLETON,
>>>    immediate = true,
>>>    // service = PreHook.class,
>>>    property = "name=prehook-test-hook"
>>> )
>>> public class PreHookTest implements PreHook {
>>> ?
>>> 
>>> I may have thrown away too much, but at least this is a good starting
>>> point.
>>> 
>>> 
>>> Erwin
>>> 
>>> 
>>> On Feb 17, 2020, at 13:55, Erwin Hogeweg &lt;
> 
>> erwin.hogeweg@
> 
>> &lt;mailto:
> 
>> erwin.hogeweg@
> 
>> &gt;> wrote:
>>> 
>>> Lukas,
>>> 
>>> I am currently on the road but I will try this ASAP. 
>>> 
>>> Kind Regards,
>>> 
>>> Erwin
>>> 
>>> El feb. 17, 2020, a la(s) 08:55, Roedl Lukas &lt;
> 
>> Lukas.Roedl@.ac
> 
>> &lt;mailto:
> 
>> Lukas.Roedl@.ac
> 
>> &gt;> escribi?:
>>> 
>>> ?
>>> Hi,
>>> 
>>> We?ve similar problems with a Pax JDBC Pre Hook getting called.
>>> I?ve prepared a minimal example on
>>> https://github.com/roedll/pax-jdbc-pre-hook-test <https://github.com/roedll/pax-jdbc-pre-hook-test>
>>> &lt;https://github.com/roedll/pax-jdbc-pre-hook-test&gt <https://github.com/roedll/pax-jdbc-pre-hook-test&gt>;
using SQLite to
>>> make it a bit more concrete.
>>> Apache Karaf 4.2.8 in combination with Pax JDBC 1.4.4 is used.
>>> 
>>> The DataSource is specified in the file
>>> ?org.ops4j.datasource-prehook-test.cfg? (see [1]) and without a PreHook
>>> defined the DataSource is published as expected:
>>> 
>>> dataSourceName = prehook-test
>>> felix.fileinstall.filename =
>>> file:/X:/pax-jdbc-pre-hook-test/framework/target/assembly/etc/org.ops4j.datasource-prehook-test.cfg
>>> objectClass = [javax.sql.DataSource]
>>> osgi.jdbc.driver.name = sqlite
>>> osgi.jndi.service.name = prehook-test
>>> pax.jdbc.managed = true
>>> service.bundleid = 16
>>> service.factoryPid = org.ops4j.datasource
>>> service.id <http://service.id/> &lt;http://service.id/&gt <http://service.id/&gt>;
= 88
>>> service.pid = org.ops4j.datasource.5a7b2e4b-4781-4b60-b707-74a48e210bda
>>> service.scope = singleton
>>> url = jdbc:sqlite:prehook-test.db
>>> 
>>> With the PreHook specified (like ?ops4j.preHook=prehook-test-hook?) the
>>> last log entry is ?Waiting for service dependency:
>>> (&(objectClass=org.ops4j.pax.jdbc.hook.PreHook)(name=prehook-test-hook))?
>>> event if the PreHook itself is started and active:
>>> 
>>> Pax JDBC - Test - PreHook (21) provides:
>>> ----------------------------------------
>>> component.id <http://component.id/> &lt;http://component.id/&gt
<http://component.id/&gt>; = 0
>>> component.name = at.roedll.pax.jdbc.pre.hook.test.PreHookTest
>>> name = prehook-test-hook
>>> objectClass = [org.ops4j.pax.jdbc.hook.PreHook]
>>> service.bundleid = 21
>>> service.id <http://service.id/> &lt;http://service.id/&gt <http://service.id/&gt>;
= 75
>>> service.scope = bundle
>>> 
>>> 
>>> Can someone which doesn?t have problems with this, please take a short
>>> look, if there are some differences between the working configurations
>>> and this example?
>>> 
>>> Best,
>>> Lukas
>>> 
>>> 
>>> [1]
>>> https://github.com/roedll/pax-jdbc-pre-hook-test/blob/master/framework/src/main/filtered-resources/etc/org.ops4j.datasource-prehook-test.cfg
<https://github.com/roedll/pax-jdbc-pre-hook-test/blob/master/framework/src/main/filtered-resources/etc/org.ops4j.datasource-prehook-test.cfg>
>>> &lt;https://github.com/roedll/pax-jdbc-pre-hook-test/blob/master/framework/src/main/filtered-resources/etc/org.ops4j.datasource-prehook-test.cfg&gt
<https://github.com/roedll/pax-jdbc-pre-hook-test/blob/master/framework/src/main/filtered-resources/etc/org.ops4j.datasource-prehook-test.cfg&gt>;
>>> 
>>> Von: Erwin Hogeweg &lt;
> 
>> erwin.hogeweg@
> 
>> &lt;mailto:
> 
>> erwin.hogeweg@
> 
>> &gt;> 
>>> Gesendet: Donnerstag, 23. Januar 2020 22:40
>>> An: 
> 
>> user@.apache
> 
>> &lt;mailto:
> 
>> user@.apache
> 
>> &gt;
>>> Betreff: Re: Karaf 4.2.8-SNAPSHOT - pax-jdbc 1.4.4 - prehook not working
>>> 
>>> Hi Alex,
>>> 
>>> Below a similar sequence from my log.
>>> 
>>> From your log it seems that the Derby DataSourceFactory is not resolved.
>>> I remember that at some point I changed the driver.name entry in the
>>> config to a driver.class entry. That is for a mySQL database though but
>>> but maybe?
>>> 
>>> Another silly question: Is your datasource functional if you leave out
>>> the preHook?
>>> 
>>> Obtained service dependency:
>>> (objectClass=org.ops4j.pax.jdbc.config.ConfigLoader)
>>> Waiting for service dependency:
>>> (objectClass=org.ops4j.pax.jdbc.config.ConfigLoader)
>>> Waiting for service dependency:
>>> (&(pool=*)(!(pax.jdbc.managed=true))(|(objectClass=javax.sql.DataSource)(objectClass=javax.sql.XADataSource)))
>>> Waiting for service dependency:
>>> (&(objectClass=org.ops4j.pax.jdbc.pool.common.PooledDataSourceFactory)(pool=dbcp2)(xa=false))
>>> Waiting for service dependency:
>>> (&(objectClass=org.ops4j.pax.jdbc.pool.common.PooledDataSourceFactory)(pool=dbcp2)(xa=false))
>>> Obtained service dependency:
>>> (&(objectClass=org.ops4j.pax.jdbc.pool.common.PooledDataSourceFactory)(pool=dbcp2)(xa=false))
>>> Obtained service dependency:
>>> (&(objectClass=org.ops4j.pax.jdbc.hook.PreHook)(name=seegate))
>>> Obtained service dependency:
>>> (&(objectClass=org.osgi.service.jdbc.DataSourceFactory)(osgi.jdbc.driver.class=com.mysql.jdbc.Driver))
>>> 
>>> 
>>> Cheers, 
>>> Erwin
>>> 
>>> 
>>> On Jan 23, 2020, at 13:22, Alex Soto &lt;
> 
>> alex.soto@
> 
>> &lt;mailto:
> 
>> alex.soto@
> 
>> &gt;> wrote:
>>> 
>>> Yes,  the migration service is being registered:
>>> 
>>> 
>>> Obtained service dependency:
>>> (objectClass=org.ops4j.pax.jdbc.config.ConfigLoader)
>>> Waiting for service dependency:
>>> (objectClass=org.ops4j.pax.jdbc.config.ConfigLoader)
>>> Waiting for service dependency:
>>> (&(pool=*)(!(pax.jdbc.managed=true))(|(objectClass=javax.sql.DataSource)(objectClass=javax.sql.XADataSource)))
>>> Obtained service dependency:
>>> (&(objectClass=org.ops4j.pax.jdbc.hook.PreHook)(name=querierDB))
>>> Waiting for service dependency:
>>> (&(objectClass=org.osgi.service.jdbc.DataSourceFactory)(osgi.jdbc.driver.name=derby))
>>> 
>>> 
>>> And
>>> 
>>> service:list org.ops4j.pax.jdbc.hook.PreHook
>>> [org.ops4j.pax.jdbc.hook.PreHook]
>>> ---------------------------------
>>> component.id <http://component.id/> &lt;http://component.id/&gt
<http://component.id/&gt>; = 29
>>> component.name = org.enquery.encryptedquery.querier.data.maint.Migration
>>> name = querierDB
>>> service.bundleid = 35
>>> service.id <http://service.id/> &lt;http://service.id/&gt <http://service.id/&gt>;
= 276
>>> service.scope = bundle
>>> Provided by : 
>>> EncryptedQuery :: Querier :: Data (35)
>>> Used by: 
>>> OPS4J Pax JDBC Config (210)
>>> 
>>> Best regards,
>>> Alex soto
>>> 
>>> 
>>> 
>>> 
>>> 
>>> On Jan 22, 2020, at 1:06 PM, Erwin Hogeweg &lt;
> 
>> erwin.hogeweg@
> 
>> &lt;mailto:
> 
>> erwin.hogeweg@
> 
>> &gt;> wrote:
>>> 
>>> Just this week I upgraded from karaf-1.2.6 and pax-jdbc-1.3.1 to
>>> karaf-1.2.8-SNAPSHOT and pax-jdbc-1.4.4 and I didn?t run into any issues.
>>> 
>>> Stupid question, but can you confirm that the Migrator class is
>>> instantiated and that the component is active?
>>> 
>>>               com.*.Migrator in bundle 129
>>> (db.init:1.0.0.SNAPSHOT_20200122-1230) enabled, 1 instance.
>>>                   Id: 18, State:ACTIVE
>>> 
>>> Initially I missed some Package-Imports on the migrator bundle which left
>>> the component in the SATISFIED (I believe) state. After scrolling through
>>> the logs I discovered a CNFE which pointed me in the right direction.
>>> 
>>> Erwin
>>> 
>>> 
>>> 
>>> On Jan 22, 2020, at 12:53, Alex Soto &lt;
> 
>> alex.soto@
> 
>> &lt;mailto:
> 
>> alex.soto@
> 
>> &gt;> wrote:
>>> 
>>> I tested with Karaf 4.2.7 and various versions of Pax-JDBC.
>>> The hook is not being called stating with Pax-JDBC 1.3.4.
>>> 
>>> Something must have changed in Pax-JDBC 1.3.4 as everything else remains
>>> the same in my tests.  
>>> 
>>> 
>>> Best regards,
>>> Alex soto
>>> 
>>> 
>>> 
>>> 
>>> 
>>> On Jan 22, 2020, at 12:39 PM, Erwin Hogeweg &lt;
> 
>> erwin.hogeweg@
> 
>> &lt;mailto:
> 
>> erwin.hogeweg@
> 
>> &gt;> wrote:
>>> 
>>> Ignore the different datasource names. I messed up the ?replace all? :-)
>>> 
>>> 
>>> On Jan 22, 2020, at 12:36, Erwin Hogeweg &lt;
> 
>> erwin.hogeweg@
> 
>> &lt;mailto:
> 
>> erwin.hogeweg@
> 
>> &gt;> wrote:
>>> 
>>> It seems to work for me with Karaf-4.2.8-SNAPSHOT and pax-jdbc-1.4.4.
>>> 
>>> 12 ? Active   ?  80 ? 1.4.4                        ? OPS4J Pax JDBC
>>> Generic Driver Extender
>>> 13 ? Active   ?  80 ? 1.4.4                        ? OPS4J Pax JDBC
>>> Config
>>> 14 ? Active   ?  80 ? 1.4.4                        ? OPS4J Pax JDBC
>>> Pooling Support Base
>>> 
>>> [features-2-thread-1] INFO
>>> org.ops4j.pax.jdbc.config.impl.DataSourceRegistration - Found
>>> DataSourceFactory. Creating DataSource jdbc/mydatasource
>>> [features-2-thread-1] INFO
>>> org.ops4j.pax.jdbc.config.impl.DataSourceRegistration - Executing pre
>>> hook for DataSource jdbc/mydatasource
>>> INFO 1/22/20 12:32 PM: liquibase: Successfully acquired change log lock
>>> INFO 1/22/20 12:32 PM: liquibase: Reading from seegate.DATABASECHANGELOG
>>> INFO 1/22/20 12:32 PM: liquibase: Successfully released change log lock
>>> [features-2-thread-1] INFO
>>> org.ops4j.pax.jdbc.config.impl.DataSourceRegistration - Pre hook
>>> finished. Publishing DataSource jdbc/mydatasource
>>> [features-2-thread-1] INFO
>>> org.apache.aries.jpa.container.impl.DataSourceTracker - Found DataSource
>>> for seegate.pu
>>> osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/mydatasource)
>>> 
>>> FWIW - I did change the exception handling in Migrator to better see
>>> when/if the migration fails:
>>> 
>>>    @Override
>>>    public void prepare(DataSource ds) throwsSQLException {
>>>        try (Connection connection =ds.getConnection()) {
>>>            prepare(connection);
>>>        } catch (LiquibaseException e) {
>>>                    LOG.error(e.getClass().getName() + ": " +
>>> e.getMessage());
>>> //            throw new RuntimeException(e);
>>>        }
>>>    }
>>> 
>>> 
>>> Cheers,
>>> 
>>> Erwin
>>> 
>>> 
>>> 
>>> On Jan 22, 2020, at 11:11, Alex Soto &lt;
> 
>> alex.soto@
> 
>> &lt;mailto:
> 
>> alex.soto@
> 
>> &gt;> wrote:
>>> 
>>> Same is happening to me, it works with Pax-JDBC 1.3.0, but not with
>>> Pax-JDBC 1.4.0, which is the one included in Karaf 4.2.7.
>>> 
>>> Best regards,
>>> Alex soto
>>> 
>>> 
>>> 
>>> 
>>> 
>>> On Jan 20, 2020, at 9:10 AM, stefang &lt;
> 
>> stefan.guenst@
> 
>> &lt;mailto:
> 
>> stefan.guenst@
> 
>> &gt;> wrote:
>>> 
>>> Hi,
>>> 
>>> we are not able to run Christian's Example:
>>> 
>>> https://github.com/cschneider/Karaf-Tutorial/blob/master/liquibase/service/src/main/java/net/lr/tutorial/db/service/Migrator.java
<https://github.com/cschneider/Karaf-Tutorial/blob/master/liquibase/service/src/main/java/net/lr/tutorial/db/service/Migrator.java>
>>> &lt;https://github.com/cschneider/Karaf-Tutorial/blob/master/liquibase/service/src/main/java/net/lr/tutorial/db/service/Migrator.java&gt;
>>> 
>>> 
>>> Must be something todo with pax-jdbc 1.4.4 (wich comes with 4.2.8)
>>> 
>>> Karaf 4.2.6 (pax-jdbc 1.3.5)works fine.
>>> 
>>> Stefan
>>> 
>>> 
>>> 
>>> 
>>> 
>>> --
>>> Sent from: http://karaf.922171.n3.nabble.com/Karaf-User-f930749.html <http://karaf.922171.n3.nabble.com/Karaf-User-f930749.html>
>>> &lt;http://karaf.922171.n3.nabble.com/Karaf-User-f930749.html&gt <http://karaf.922171.n3.nabble.com/Karaf-User-f930749.html&gt>;
> 
> 
> 
> 
> 
> --
> Sent from: http://karaf.922171.n3.nabble.com/Karaf-User-f930749.html <http://karaf.922171.n3.nabble.com/Karaf-User-f930749.html>

Mime
View raw message