Target release
Epic

Document status
Document owner
Designer


Goals

Create DBCP services to relieve entry-level users of more complex configurations. The controller services should

Background and strategic fit

Currently DBCPConnectionPool is used for connection pooling. The controller service configuration requires to provide the JDBC driver jar, URL and classname which may be difficult for new users. The new controller services would prevent users from needing

to search for JDBC driver, download them manually, provide the jar file path, the JDBC URL and the driver classname.

Technical details

For DBCP service Apache Commons DBCP will be chosen over HikariCP since it is more widely used in NiFi.. Currently DBCPConnectionPool is used for connection pooling. The controller service configuration requires to provide the JDBC driver jar and classname. The new controller services would extend DBCPConnectionPool and provide the specific driver.

The new Controller Service must handle downloading the driver from an external source, unarchive it if needed and load it. TLS parameters must be supported through SSLContextService and Sensitive Dynamic Properties. For every major vendor a

new service shall be created; vendor-specific controller services are for easier maintainability and better user experience.

Assumptions

User interaction and design

Users could have two primary methods for getting a JDBC driver.

  1. Use the existing DBCPConnectionPool - In this case the user must provide the driver location and driver classname 
  2. Use the new Controller Services - Select the database version their using and the service downloads the corresponding driver

The internal could work as follows:

On enabling the new controller service it verifies if the driver for the specified version is already downloaded at a location. If so, it loads the driver, otherwise it downloads it.

The driver classname will be stored internally and automatically provided.

Technical Ideas for the Controller Service and driver support


  1. In case the driver is not supported by PostgreSQL use DBCPConnectionPool and set you own driver
  2. Store previous JDBC drivers in NIFI when upgrading
  3. Load drivers lazily on the fly
  4. New version of the service for each major version of the database
  5. Resource loader






Questions

Below is a list of questions to be addressed as a result of this requirements document:

QuestionOutcome






Not Doing