Liquibase inside OSGi bundle - options?

Hello guys,

We are busy OSGi’ifying most of our modules to make them work inside of ServiceMix and I was wondering if any of you guys have experience using Liquibase inside of an OSGi bundle. What have you guys tried? What worked. What broke. Etc.

Our preferred way of initializing Liquibase is using Spring.

Thanks in advance.
—Jaco

We use liquibase 1.9 on Equinox and works fine.
But we don’t use original jar (because its manifest is broken) but we create own bundle with:

    Manifest-Version: 1.0 Export-Package: liquibase.migrator.servlet;uses:=liquibase.servlet;version=1.9.0.ca-SNAPSHOT, liquibase.change.custom;uses:="liquibase.change, liquibase.exception, liquibase, liquibase.database.sql, liquibase.util, liquibase.database, org.w3c.dom";version=1.9.0.ca-SNAPSHOT, liquibase.commandline;uses:="liquibase.exception, liquibase.diff, javax.xml.parsers, liquibase.database, liquibase.lock, liquibase, liquibase.util, liquibase.log";version=1.9.0.ca-SNAPSHOT, liquibase.database.template;uses:="liquibase.exception, liquibase.database.sql, liquibase.database, liquibase.database.sql.visitor, liquibase.util, liquibase.log";version=1.9.0.ca-SNAPSHOT, liquibase.diff;uses:="liquibase.parser.xml, liquibase.change, liquibase.xml, liquibase.exception, javax.xml.parsers, liquibase.database, liquibase.parser, org.w3c.dom, org.xml.sax, liquibase.csv, liquibase.util, liquibase.database.structure, liquibase.log";version=1.9.0.ca-SNAPSHOT, liquibase.dbdoc;uses:="liquibase.change, liquibase.exception, liquibase, liquibase.database.structure, liquibase.util, liquibase.database";version=1.9.0.ca-SNAPSHOT, liquibase.database;uses:="liquibase.change, liquibase.exception, org.hibernate.cfg, liquibase.database.sql, liquibase.database.template, liquibase.lock, liquibase, liquibase.util, liquibase.database.structure, liquibase.log";version=1.9.0.ca-SNAPSHOT, liquibase.ant;uses:="liquibase.exception, liquibase.diff, org.apache.tools.ant, liquibase.database, liquibase, org.apache.tools.ant.types, liquibase.util, liquibase.log";version=1.9.0.ca-SNAPSHOT, liquibase.lock;uses:="liquibase.exception, liquibase.database.sql, liquibase.database.template, liquibase.database, liquibase, liquibase.util, liquibase.log";version=1.9.0.ca-SNAPSHOT, liquibase.csv;uses:="au.com.bytecode.opencsv, liquibase.util";version=1.9.0.ca-SNAPSHOT, liquibase;uses:="liquibase.change, liquibase.exception, liquibase.database.sql, liquibase.database.template, liquibase.parser.visitor, liquibase.parser, liquibase.database, org.w3c.dom, liquibase.lock, javax.swing, liquibase.database.sql.visitor, liquibase.preconditions, liquibase.parser.filter, liquibase.util, liquibase.log";version=1.9.0.ca-SNAPSHOT, liquibase.database.sql.visitor;uses:=liquibase.database;version=1.9.0.ca-SNAPSHOT, au.com.bytecode.opencsv;version=1.9.0.ca-SNAPSHOT, liquibase.database.structure;uses:="org.hibernate.engine, liquibase.exception, liquibase.database.template, liquibase.database.sql, org.hibernate.cfg, liquibase.diff, liquibase.database, org.hibernate.mapping, org.hibernate.dialect, org.hibernate, liquibase.util, liquibase.log";version=1.9.0.ca-SNAPSHOT, liquibase.parser.xml;uses:="liquibase.change.custom, liquibase.change, liquibase.exception, javax.xml.parsers, liquibase.parser, org.xml.sax, liquibase, liquibase.database.sql.visitor, liquibase.preconditions, liquibase.util, liquibase.log, org.xml.sax.helpers";version=1.9.0.ca-SNAPSHOT, liquibase.change;uses:="liquibase.change.custom, liquibase.exception, liquibase.database.template, liquibase.database.sql, javax.xml.parsers, liquibase.database, org.w3c.dom, liquibase.csv, liquibase, liquibase.database.structure, liquibase.util, liquibase.log";version=1.9.0.ca-SNAPSHOT, liquibase.xml;uses:="javax.xml.transform, javax.xml.transform.stream, javax.xml.transform.dom, org.w3c.dom";version=1.9.0.ca-SNAPSHOT, liquibase.exception;uses:="liquibase.change, liquibase, liquibase.database.sql, liquibase.preconditions, liquibase.parser.visitor, liquibase.util, liquibase.database";version=1.9.0.ca-SNAPSHOT, liquibase.database.sql;uses:="liquibase.change, liquibase.exception, liquibase.util, liquibase.log, liquibase.database";version=1.9.0.ca-SNAPSHOT, liquibase.parser.sql;uses:="liquibase.change, liquibase, liquibase.exception, liquibase.util";version=1.9.0.ca-SNAPSHOT, liquibase.parser.visitor;uses:="liquibase.change, liquibase.exception, liquibase.dbdoc, liquibase.database, liquibase, liquibase.preconditions, liquibase.util, liquibase.database.structure, liquibase.log";version=1.9.0.ca-SNAPSHOT, liquibase.parser;uses:="liquibase.parser.xml, liquibase.exception, liquibase.parser.sql, liquibase.parser.visitor, liquibase.database, org.xml.sax, liquibase, liquibase.parser.filter";version=1.9.0.ca-SNAPSHOT, au.com.bytecode.opencsv.bean;uses:=au.com.bytecode.opencsv;version=1.9.0.ca-SNAPSHOT, liquibase.spring;uses:="liquibase.exception, org.springframework.core.io, org.springframework.context, liquibase.database, liquibase, javax.sql, org.springframework.beans.factory";version=1.9.0.ca-SNAPSHOT, liquibase.preconditions;uses:="liquibase.exception, liquibase, liquibase.util, liquibase.database.structure, liquibase.database";version=1.9.0.ca-SNAPSHOT, liquibase.parser.filter;uses:="liquibase, liquibase.exception, liquibase.database.sql, liquibase.database.template, liquibase.util, liquibase.database";version=1.9.0.ca-SNAPSHOT, liquibase.util;uses:="liquibase.exception, liquibase.database.sql, org.w3c.dom";version=1.9.0.ca-SNAPSHOT, liquibase.servlet;uses:="javax.naming, liquibase.database, javax.servlet, liquibase, javax.sql, liquibase.util, liquibase.log, javax.servlet.http";version=1.9.0.ca-SNAPSHOT, liquibase.log;version=1.9.0.ca-SNAPSHOT Tool: Bnd-0.0.189 Bundle-Name: liquibase-core (wrapped) Created-By: 1.6.0_06 (Sun Microsystems Inc.) Bundle-RequiredExecutionEnvironment: J2SE-1.5 Ant-Version: Apache Ant 1.7.1 Bundle-Vendor: LiquiBase.org Bundle-Version: 1.9.0.ca Bnd-LastModified: 1234516119921 Bundle-ManifestVersion: 2 Bundle-License: null Bundle-Description: liquibase-core wrapped as OSGi bundle Import-Package: au.com.bytecode.opencsv;version=1.9.0.ca-SNAPSHOT, au.com.bytecode.opencsv.bean;version=1.9.0.ca-SNAPSHOT, javax.naming;resolution:=optional, javax.servlet;resolution:=optional, javax.servlet.http;resolution:=optional, javax.sql, javax.swing;resolution:=optional, javax.xml.parsers, javax.xml.transform, javax.xml.transform.dom, javax.xml.transform.stream, liquibase;version=1.9.0.ca-SNAPSHOT, liquibase.ant;version=1.9.0.ca-SNAPSHOT, liquibase.change;version=1.9.0.ca-SNAPSHOT, liquibase.change.custom;version=1.9.0.ca-SNAPSHOT, liquibase.commandline;version=1.9.0.ca-SNAPSHOT, liquibase.csv;version=1.9.0.ca-SNAPSHOT, liquibase.database;version=1.9.0.ca-SNAPSHOT, liquibase.database.sql;version=1.9.0.ca-SNAPSHOT, liquibase.database.sql.visitor;version=1.9.0.ca-SNAPSHOT, liquibase.database.structure;version=1.9.0.ca-SNAPSHOT, liquibase.database.template;version=1.9.0.ca-SNAPSHOT, liquibase.dbdoc;version=1.9.0.ca-SNAPSHOT, liquibase.diff;version=1.9.0.ca-SNAPSHOT, liquibase.exception;version=1.9.0.ca-SNAPSHOT, liquibase.lock;version=1.9.0.ca-SNAPSHOT, liquibase.log;version=1.9.0.ca-SNAPSHOT, liquibase.migrator.servlet;version=1.9.0.ca-SNAPSHOT, liquibase.parser;version=1.9.0.ca-SNAPSHOT, liquibase.parser.filter;version=1.9.0.ca-SNAPSHOT, liquibase.parser.sql;version=1.9.0.ca-SNAPSHOT, liquibase.parser.visitor;version=1.9.0.ca-SNAPSHOT, liquibase.parser.xml;version=1.9.0.ca-SNAPSHOT, liquibase.preconditions;version=1.9.0.ca-SNAPSHOT, liquibase.servlet;version=1.9.0.ca-SNAPSHOT, liquibase.spring;version=1.9.0.ca-SNAPSHOT, liquibase.util;version=1.9.0.ca-SNAPSHOT, liquibase.xml;version=1.9.0.ca-SNAPSHOT, org.apache.tools.ant;resolution:=optional, org.apache.tools.ant.types;resolution:=optional, org.hibernate;resolution:=optional, org.hibernate.cfg;resolution:=optional, org.hibernate.dialect;resolution:=optional, org.hibernate.engine;resolution:=optional, org.hibernate.mapping;resolution:=optional, org.springframework.beans.factory;resolution:=optional, org.springframework.context;resolution:=optional, org.springframework.core.io;resolution:=optional, org.w3c.dom, org.xml.sax, org.xml.sax.helpers Bundle-SymbolicName: liquibase_core Include-Resource: {src\main\resources} Main-Class: liquibase.commandline.Main Originally-Created-By: 1.5.0_16-b02 (Sun Microsystems Inc.)

It’s generated by maven-bundle-plugin from:

    Export-Package: liquibase*;version=${jar.version}, au.com.bytecode.opencsv*;version=${jar.version}

    Import-Package:
      org.w3c.dom,
      org.xml.sax,
      org.xml.sax.helpers,
      javax.sql,
      javax.xml.parsers,
      javax.xml.transform,
      javax.xml.transform.dom,
      javax.xml.transform.stream,
      javax.naming;resolution:=optional,
      javax.servlet;resolution:=optional,
      javax.servlet.http;resolution:=optional,
      javax.swing;resolution:=optional,
      org.apache.tools.ant;resolution:=optional,
      org.apache.tools.ant.types;resolution:=optional,
      org.hibernate;resolution:=optional,
      org.hibernate.cfg;resolution:=optional,
      org.hibernate.dialect;resolution:=optional,
      org.hibernate.engine;resolution:=optional,
      org.hibernate.mapping;resolution:=optional,
      org.springframework.beans.factory;resolution:=optional,
      org.springframework.context;resolution:=optional,
      org.springframework.core.io;resolution:=optional,
      *

In our “db-updater” bundle we use SpringLiquibase. It’s created by Spring DM according to META-INF/spring/bundle-context.xml:

    <?xml version="1.0" encoding="UTF-8"?> http://www.springframework.org/schema/beans" 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-2.5.xsd">

Of course we have to import Liquibase packages:

    Import-Package:

    liquibase;version=“1.9.0”,
    liquibase.commandline;version=“1.9.0”,
    liquibase.exception,
    liquibase.spring;version=“1.9.0”

I created an issue (http://liquibase.jira.com/browse/CORE-433) to make sure we have correct bundle info in the standard .jar for 2.0.

Nathan

Damian, Nathan

Thanks for sharing some insight.

@Damian: Do you mind sharing the complete POM for creating the updated liquibase artifact with the corrected MANIFEST? :slight_smile:

@Nathan: Any way we can get this updated for Liquibase 1.9.x aswell? Would greatly appreciate this.

Thanks,
—Jaco

Yes, we should be able to do it for 1.9 as well.

Nathan

Nathan,

Great stuff.  Must I create a new JIRA for it?

Thanks.
—Jaco

No, I added 1.9.5 as a target fix for the existing jira issue.

Nathan