/* * Copyright (c) OSGi Alliance (2016). All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.osgi.service.transaction.control.jdbc; import java.sql.Connection; import java.sql.Driver; import java.util.Map; import java.util.Properties; import javax.sql.DataSource; import javax.sql.XADataSource; import org.osgi.service.jdbc.DataSourceFactory; /** * A factory for creating JDBCConnectionProvider instances * <p> * This factory can be used if the {@link JDBCConnectionProvider} should not be * a public service, for example to protect a username/password. */ public interface JDBCConnectionProviderFactory { /** * The property used to determine whether XA enlistment is enabled for this * resource provider */ public static final String XA_ENLISTMENT_ENABLED = "osgi.xa.enabled"; /** * The property used to determine whether local enlistment is enabled for * this resource provider */ public static final String LOCAL_ENLISTMENT_ENABLED = "osgi.local.enabled"; /** * The property used to determine whether connection pooling is enabled for * this resource provider */ public static final String CONNECTION_POOLING_ENABLED = "osgi.connection.pooling.enabled"; /** * The property used to set the maximum amount of time that the pool should * wait for a connection */ public static final String CONNECTION_TIMEOUT = "osgi.connection.timeout"; /** * The property used to set the maximum amount of time that connections in * the pool should remain idle before being closed */ public static final String IDLE_TIMEOUT = "osgi.idle.timeout"; /** * The property used to set the maximum amount of time that connections in * the pool should remain open */ public static final String CONNECTION_LIFETIME = "osgi.connection.lifetime"; /** * The property used to set the minimum number of connections that should be * held in the pool */ public static final String MIN_CONNECTIONS = "osgi.connection.min"; /** * The property used to set the maximum number of connections that should be * held in the pool */ public static final String MAX_CONNECTIONS = "osgi.connection.max"; /** * The property used to set the maximum number of connections that should be * held in the pool */ public static final String USE_DRIVER = "osgi.use.driver"; /** * The property used to set the recovery identifier that should be used */ public static String OSGI_RECOVERY_IDENTIFIER = "osgi.recovery.identifier"; /** * Create a private {@link JDBCConnectionProvider} using a * DataSourceFactory. * * @param dsf The {@link DataSourceFactory} that provides access to the database * @param jdbcProperties The properties to pass to the * {@link DataSourceFactory} in order to create the underlying * {@link DataSource} * @param resourceProviderProperties Configuration properties to pass to the * JDBC Resource Provider runtime * @return A {@link JDBCConnectionProvider} that can be used in transactions */ JDBCConnectionProvider getProviderFor(DataSourceFactory dsf, Properties jdbcProperties, Map<String,Object> resourceProviderProperties); /** * Create a private {@link JDBCConnectionProvider} using an existing * {@link DataSource}. * * @param ds The {@link DataSource} that provides access to the database * @param resourceProviderProperties Configuration properties to pass to the * JDBC Resource Provider runtime * @return A {@link JDBCConnectionProvider} that can be used in transactions */ JDBCConnectionProvider getProviderFor(DataSource ds, Map<String,Object> resourceProviderProperties); /** * Create a private {@link JDBCConnectionProvider} using an existing * {@link Driver}. * * @param driver The {@link Driver} that provides access to the database * @param jdbcProperties The properties to pass to the {@link Driver} in * order to create a {@link Connection} * @param resourceProviderProperties Configuration properties to pass to the * JDBC Resource Provider runtime * @return A {@link JDBCConnectionProvider} that can be used in transactions */ JDBCConnectionProvider getProviderFor(Driver driver, Properties jdbcProperties, Map<String,Object> resourceProviderProperties); /** * Create a private {@link JDBCConnectionProvider} using an existing * {@link XADataSource}. * * @param ds The {@link XADataSource} that provides access to the database * @param resourceProviderProperties Configuration properties to pass to the * JDBC Resource Provider runtime * @return A {@link JDBCConnectionProvider} that can be used in transactions */ JDBCConnectionProvider getProviderFor(XADataSource ds, Map<String,Object> resourceProviderProperties); /** * Release a {@link JDBCConnectionProvider} instance that has been created * by this factory. Released instances are eligible to be shut down and have * any remaining open connections closed. * <p> * Note that all {@link JDBCConnectionProvider} instances created by this * factory service are implicitly released when the factory service is * released by this bundle. * * @param provider * @throws IllegalArgumentException if the supplied resource was not created * by this factory service instance. */ void releaseProvider(JDBCConnectionProvider provider); }