Hi,

We have integrated Artemis 1.x in WildFly application server with a
different SQLProvider implementation to support Artemis JDBC store.
The issue we had at the time with Artemis SQLProvider was that
supporting a new databases required to add a new class to specify its
specific JDBC statements and ultimately require new releases for each
new DB we wanted to test & support.

To circumvent this issue, we wrote a SQLProvider[1] to use for Artemis
JDBC store that is using a Properties file[2] and a simple overridding
mechanism to provide DB-specific statements.
For example to support Oracle DB, Artemis mechanism required to write
(and maintain) this class:
https://github.com/apache/activemq-artemis/blob/master/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/drivers/oracle/Oracle12CSQLProvider.java

Using our property-based implementation, we only need to add 2 lines
to the properties file:

https://github.com/wildfly/wildfly/blob/master/feature-pack/src/main/resources/modules/system/layers/base/org/wildfly/extension/messaging-activemq/main/database/journal-sql.properties#L43-L45

When the SQLProvider will be queried for a SQL statement, it will
first searched for a DB-specific dialect and falls back to a generic
one else:

https://github.com/wildfly/wildfly/blob/master/messaging-activemq/src/main/java/org/wildfly/extension/messaging/activemq/PropertySQLProviderFactory.java#L249

The dialect itself is determined used DataSource properties and metadata:

https://github.com/wildfly/wildfly/blob/master/messaging-activemq/src/main/java/org/wildfly/extension/messaging/activemq/PropertySQLProviderFactory.java#L85

In addition, this properties file can be easily modified by users
without requiring a new release to support another database.

We have started development on WildFly 12 and I am looking to
integrate Artemis 2.4.x.
I don't want to have to maintain a 2nd implementation of the SQL
provider in WildFly codebase and I really think that our
properties-based approach is sounder than the current Artemis
implementation.

I'd like to propose to contribute back this properties-based SQL
provider to Artemis codebase in replacement to its current
implementation. I think this would be beneficial for Artemis as it
would reduce the amount of work to support a new DB, reduce the number
of classes for a better maintainability and, of course, ease the
integration of Artemis into WildFly.

What do you think?

jeff

[1] 
https://github.com/wildfly/wildfly/blob/master/messaging-activemq/src/main/java/org/wildfly/extension/messaging/activemq/PropertySQLProviderFactory.java
[2] 
https://github.com/wildfly/wildfly/blob/master/feature-pack/src/main/resources/modules/system/layers/base/org/wildfly/extension/messaging-activemq/main/database/journal-sql.properties
-- 
Jeff Mesnil
jmes...@gmail.com
http://jmesnil.net/weblog/

Reply via email to