/*
* Copyright (c) 2003, PostgreSQL Global Development Group
* See the LICENSE file in the project root for more information.
*/
package org.postgresql.osgi;
import org.postgresql.
Driver;
import org.osgi.framework.
BundleActivator;
import org.osgi.framework.
BundleContext;
import org.osgi.framework.
ServiceRegistration;
import org.osgi.service.jdbc.
DataSourceFactory;
import java.util.
Dictionary;
import java.util.
Hashtable;
/**
* This class is an OSGi Bundle Activator and should only be used internally by the OSGi Framework.
*/
public class
PGBundleActivator implements
BundleActivator {
private
ServiceRegistration<?>
_registration;
public void
start(
BundleContext context) throws
Exception {
Dictionary<
String,
Object>
properties = new
Hashtable<
String,
Object>();
properties.
put(
DataSourceFactory.
OSGI_JDBC_DRIVER_CLASS,
Driver.class.
getName());
properties.
put(
DataSourceFactory.
OSGI_JDBC_DRIVER_NAME, org.postgresql.util.
DriverInfo.
DRIVER_NAME);
properties.
put(
DataSourceFactory.
OSGI_JDBC_DRIVER_VERSION, org.postgresql.util.
DriverInfo.
DRIVER_VERSION);
try {
_registration =
context.
registerService(
DataSourceFactory.class.
getName(),
new
PGDataSourceFactory(),
properties);
} catch (
NoClassDefFoundError e) {
String msg =
e.
getMessage();
if (
msg != null &&
msg.
contains("org/osgi/service/jdbc/DataSourceFactory")) {
if (!
Boolean.
getBoolean("pgjdbc.osgi.debug")) {
return;
}
new
IllegalArgumentException("Unable to load DataSourceFactory. "
+ "Will ignore DataSourceFactory registration. If you need one, "
+ "ensure org.osgi.enterprise is on the classpath",
e).
printStackTrace();
// just ignore. Assume OSGi-enterprise is not loaded
return;
}
throw
e;
}
}
public void
stop(
BundleContext context) throws
Exception {
if (
_registration != null) {
_registration.
unregister();
_registration = null;
}
if (
Driver.
isRegistered()) {
Driver.
deregister();
}
}
}