You are viewing the documentation for Blueriq 17. Documentation for other versions is available in our documentation directory.
This component was introduced in Blueriq 14.6. Before Blueriq 14.6, this component was a part of the Trace SQL Store component.
Table of contents
Description
This Timeline SQL Store Component contains a Timeline DAO implementation that can be used by the trace engine to store timeline messages in a database.
Blueriq 14.8 introduced the possibility to consume timeline events that are pushed on a queue by the Timeline Event Publisher Component and then store them in a database in an asynchronous way. See consume timeline events.
Requirements
This component persists data in a database, that must be provided. See platform support for the supported databases.
Installation
In order to use this component, the timeline-sql-store
profile must be active. More information on how to configure the application using Spring Profiles can be found here: Component configuration with Spring Profiles.
Add the artifact with groupId com.blueriq
and artifactId blueriq-component-timeline-sql-store
as a dependency to your Blueriq runtime POM file if you want to depend on it.
Configuration
The datasource name is timeline-sql-store.
Database
Scripts to create the required database content are provided for the supported databases.
For customers that are upgrading, if the database scheme was already created in a previous version, check to see if there are database upgrade scripts provided for any of the intermediate versions in the Upgrade Instructions.
Configuration
Use the following steps to configure the datasource:
- Install the driver for your database. See Configuring JDBC database drivers for information on how to do this.
- Provide the connection details for the datasource. There are two options for this: using JDBC or JNDI.
Using JDBC datasource : this is configured in the
application-
file. When configuring external datasources, theexternaldatasources
.propertiesexternaldatasources
profile should be enabled.application-externaldatasources.propertiesblueriq.datasource.<datasource-name>.url=<JDBC url> blueriq.datasource.<datasource-name>.username=<username> blueriq.datasource.<datasource-name>.password=<password> blueriq.datasource.<datasource-name>.driverClassName=<driver-class>
Using JNDI datasource : this can be configured in the
application-
file. When configuring JNDI datasources thejndidatasources
.propertiesjndidatasources
profile should be enabled.blueriq.datasource.<datasource-name>.jndiName=<JNDI url>
- Provide the appropriate Hibernate settings in the same properties file as step 2.
blueriq.hibernate.<datasource-name>.dialect=<database-dialect> blueriq.hibernate.<datasource-name>.use_nationalized_character_data=true blueriq.hibernate.<datasource-name>.hbm2ddl.auto=validate # validate is the only supported value here
Example configuration
Below are configuration examples which contain a JDBC url, driver-class and dialect for each supported database.
blueriq.datasource.<datasource-name>.url=jdbc:oracle:thin:@<host>:<port>/<servicename> blueriq.datasource.<datasource-name>.username=<username> blueriq.datasource.<datasource-name>.password=<password> blueriq.datasource.<datasource-name>.driverClassName=oracle.jdbc.driver.OracleDriver blueriq.hibernate.<datasource-name>.dialect=org.hibernate.dialect.OracleDialect blueriq.hibernate.<datasource-name>.hibernate.use_nationalized_character_data=true blueriq.hibernate.<datasource-name>.hbm2ddl.auto=validate
blueriq.datasource.<datasource-name>.url=jdbc:sqlserver://<host>:<port>;databaseName=<database>;trustServerCertificate=true blueriq.datasource.<datasource-name>.username=<username> blueriq.datasource.<datasource-name>.password=<password> blueriq.datasource.<datasource-name>.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver blueriq.hibernate.<datasource-name>.dialect=org.hibernate.dialect.SQLServer2012Dialect blueriq.hibernate.<datasource-name>.hibernate.use_nationalized_character_data=true blueriq.hibernate.<datasource-name>.hbm2ddl.auto=validate
blueriq.datasource.<datasource-name>.url=jdbc:postgresql://<host>:<port>/<database> blueriq.datasource.<datasource-name>.username=<username> blueriq.datasource.<datasource-name>.password=<password> blueriq.datasource.<datasource-name>.driverClassName=org.postgresql.Driver blueriq.hibernate.<datasource-name>.dialect=org.hibernate.dialect.PostgreSQLDialect blueriq.hibernate.<datasource-name>.hibernate.use_nationalized_character_data=true blueriq.hibernate.<datasource-name>.hbm2ddl.auto=validate
Consume timeline events
The Timeline SQL Store component can store timeline messages directly in the database, but it is also possible to decouple the storage of timeline messages using the Timeline Event Publisher Component to publish timeline events to a queue and then consume them using this component.
To be able to consume event messages, the event channel needs to be configured in the application.properties
. This file can be found, or otherwise should be placed in the spring.config.additional-location
The Timeline SQL Store either stores timeline messages in the database, or consumes timeline events from the queue. When the configuration below is enabled, only timeline events are consumed, no timeline messages are saved to the database directly. So if you enable this configuration, be sure to also enable the Timeline Event Publisher Component, otherwise no timeline information is saved anywhere.
The queue configuration can be configured using a default queue (using blueriq.default.rabbitmq.* in the application.properties). When it is needed, it can be overruled using the configuration below.
Also the timeline events queue has a default, and can be overruled by configuration when needed.
# RabbitMQ configuration blueriq.timeline.event.listener.amqp.rabbitmq.host=localhost blueriq.timeline.event.listener.amqp.concurrency.max-concurrent-consumers=1 # Enable consumer functionality |
In certain circumstances it is possible that an error happens while consuming the timeline event. Because of the workings of RabbitMQ, this will result in an endless loop where it tries to re-send the timeline event until it is correctly consumed. To prevent this, a republish mechanism is added with Blueriq 15.7. This mechanism sends timeline events to a dead-letter-queue when an error occurs. This will prevent the creation of the endless loop. For information see Configuring RabbitMQ
For more information on concurrent consumers see Configuring RabbitMQ.
Enable TLS connection
To enable a secure (TLS) AMQP connection to the queue, set the property "blueriq.timeline.event.listener.amqp.rabbitmq.ssl
.enabled
" to "true
".
The default for AQMP port with TLS on RabbitMQ is '5671', it needs to be explicitly enabled though, see https://www.rabbitmq.com/ssl.html for more information.
Performance
The performance impact of the Timeline SQL Store is minimal when used normally: to write timeline messages to the database and retrieve these messages for one given Case ID.