提交 b9c7ab79 authored 作者: Thomas Mueller's avatar Thomas Mueller

Issue 559: Make dependency on org.osgi.service.jdbc optional.

上级 bba66ba7
......@@ -18,7 +18,8 @@ Change Log
<h1>Change Log</h1>
<h2>Next Version (unreleased)</h2>
<ul><li>Improve error message when the user specifies an unsupported combination of database settings.
<ul><li>Issue 559: Make dependency on org.osgi.service.jdbc optional.
</li><li>Improve error message when the user specifies an unsupported combination of database settings.
</li><li>MVStore: in the multi-threaded mode, NullPointerException and other exceptions could occur.
</li><li>MVStore: some database file could not be compacted due to a bug in
the bookkeeping of the fill rate. Also, database file were compacted quite slowly.
......
......@@ -41,7 +41,7 @@ Import-Package: javax.management,
org.h2.util;version="[${version},1.5.0)",
org.h2.value;version="[${version},1.5.0)",
org.osgi.framework;version="1.5",
org.osgi.service.jdbc;version="1.0",
org.osgi.service.jdbc;version="1.0";resolution:=optional,
org.slf4j;version="[1.6.0,1.7.0)";resolution:=optional
Export-Package: org.h2;version="${version}",
org.h2.api;version="${version}",
......
......@@ -6,11 +6,8 @@
*/
package org.h2.util;
import java.util.Properties;
import org.h2.engine.Constants;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.service.jdbc.DataSourceFactory;
/**
* The driver activator loads the H2 driver when starting the bundle. The driver
......@@ -18,28 +15,27 @@ import org.osgi.service.jdbc.DataSourceFactory;
*/
public class DbDriverActivator implements BundleActivator {
private static final String DATASOURCE_FACTORY_CLASS =
"org.osgi.service.jdbc.DataSourceFactory";
/**
* Start the bundle. This will load the database driver and register the
* DataSourceFactory service.
* Start the bundle. If the 'org.osgi.service.jdbc.DataSourceFactory' class
* is available in the class path, this will load the database driver and
* register the DataSourceFactory service.
*
* @param bundleContext the bundle context
*/
@Override
public void start(BundleContext bundleContext) {
org.h2.Driver driver = org.h2.Driver.load();
Properties properties = new Properties();
properties.put(
DataSourceFactory.OSGI_JDBC_DRIVER_CLASS,
org.h2.Driver.class.getName());
properties.put(
DataSourceFactory.OSGI_JDBC_DRIVER_NAME,
"H2 JDBC Driver");
properties.put(
DataSourceFactory.OSGI_JDBC_DRIVER_VERSION,
Constants.getFullVersion());
bundleContext.registerService(
DataSourceFactory.class.getName(),
new OsgiDataSourceFactory(driver), properties);
try {
Utils.loadUserClass(DATASOURCE_FACTORY_CLASS);
} catch (Exception e) {
// class not found - don't register
return;
}
// but don't ignore exceptions in this call
OsgiDataSourceFactory.registerService(bundleContext, driver);
}
/**
......
......@@ -9,11 +9,14 @@ package org.h2.util;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.Properties;
import javax.sql.ConnectionPoolDataSource;
import javax.sql.DataSource;
import javax.sql.XADataSource;
import org.h2.engine.Constants;
import org.h2.jdbcx.JdbcDataSource;
import org.osgi.framework.BundleContext;
import org.osgi.service.jdbc.DataSourceFactory;
/**
......@@ -279,4 +282,27 @@ public class OsgiDataSourceFactory implements DataSourceFactory {
"Pooling properties are not supported by H2");
}
}
/**
* Register the H2 JDBC driver service.
*
* @param bundleContext the bundle context
* @param driver the driver
*/
static void registerService(BundleContext bundleContext,
org.h2.Driver driver) {
Properties properties = new Properties();
properties.put(
DataSourceFactory.OSGI_JDBC_DRIVER_CLASS,
org.h2.Driver.class.getName());
properties.put(
DataSourceFactory.OSGI_JDBC_DRIVER_NAME,
"H2 JDBC Driver");
properties.put(
DataSourceFactory.OSGI_JDBC_DRIVER_VERSION,
Constants.getFullVersion());
bundleContext.registerService(
DataSourceFactory.class.getName(),
new OsgiDataSourceFactory(driver), properties);
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论