LibraryToggle FramesPrintFeedback

Using JDBC with the High Performance Journal

Revision History

Overview

Using the JDBC persistence adapter with Fuse MQ Enterprise's high performance journal boosts the performance of the persistence adapter in two ways:

  1. In applications where message consumers keep up with the message producers, the journal makes it possible to lower the number of messages that need to be committed to the data base. For example a message producer could publish 10,000 messages between journal checkpoints. If the message consumer pops 9,900 messages off of the queue during the same interval, only 100 messages will be committed to the database through the JDBC adapter.

  2. In applications where the message consumers cannot keep up with the message producers, or in applications where messages must persist for long periods, the journal boosts performance by committing messages in large batches. This means that the JDBC driver can optimize the writes to the external database.

In addition to the performance gains, the high performance journal also makes it possible to ensure the consistency of JMS transactions in the case of a system failure.

[Warning]Warning

The journaled JDBC store is incompatible with the JDBC master/slave failover pattern—see Shared JDBC Master/Slave in Fault Tolerant Messaging

Prerequisites

Before you can use the journaled JDBC persistence store you need to ensure that the activeio-core-3.1.4.jar bundle is installed in the container.

The bundle is available in the archived ActiveMQ installation included in the InstallDir/extras folder, or you can download it from Maven at http://mvnrepository.com/artifact/org.apache.activemq/activeio-core/3.1.4.

Example

Example 8 shows a configuration fragment that configures the journaled JDBC adapter to use a MySQL database.

Example 8. Configuring Fuse MQ Enterprise to use the Journaled JDBC Persistence Adapter

<beans ... >
  <broker ...>
    ...
1  <persistenceFactory>
2    <journalPersistenceAdapterFactory journalLogFiles="5" dataDirectory="${data}/kahadb"
			    dataSource="#mysql-ds" useDatabaseLock="true"
			    useDedicatedTaskRunner="false" />
    </persistenceFactory>
    ...
  <broker>
  ...
3<bean id="mysql-ds"
      class="org.apache.commons.dbcp.BasicDataSource"
      destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/>
    <property name="username" value="activemq"/>
    <property name="password" value="activemq"/>
    <property name="poolPreparedStatements" value="true"/>
  </bean>

The configuration in Example 8 has three noteworthy elements:

1

The persistenceFactory element wraps the configuration for the JDBC persistence adapter.

2

The journalPersistenceAdapterFactory element specifies that the broker will use the JDBC persistence adapter with the high performance journal. The element's attributes configure the following properties:

  • The journal will span five log files.

  • The configuration for the JDBC driver is specified in a bean element with the ID, mysql-ds.

  • The data for the journal will be stored in ${data}/kahadb.

3

The bean element specifies the configuration for the MySQL JDBC driver.

Configuration

Table 3 describes the attributes used to configure the journaled JDBC persistence adapter.

Table 3. Attributes for Configuring the Journaled JDBC Persistence Adapter

AttributeDefault ValueDescription
adapter  Specifies the strategy to use when accessing a non-supported database. For more information see Using generic JDBC providers.
createTablesOnStartup trueSpecifies whether or not new database tables are created when the broker starts. If the database tables already exist, the existing tables are reused.
dataDirectory activemq-dataSpecifies the directory into which the default Derby database writes its files.
dataSource #derbySpecifies the id of the Spring bean storing the JDBC driver's configuration. For more information see Configuring your JDBC driver.
journalArchiveDirectory  Specifies the directory used to store archived journal log files.
journalLogFiles 2Specifies the number of log files to use for storing the journal.
journalLogFileSize 20MBSpecifies the size for a journal's log file.
journalThreadPriority 10Specifies the thread priority of the thread used for journaling.
useJournal trueSpecifies whether or not to use the journal.
useLocktrueSpecifies whether the adapter uses file locking.
lockKeepAlivePeriod30000Specifies the time period, in milliseconds, at which the current time is saved in the locker table to ensure that the lock does not timeout. 0 specifies unlimited time.

Comments powered by Disqus