How to use JDBC_PING to discover cluster nodes
This article is a quick walkthough the JDBC_PING JGroups protocol which you can use for initial discovery of cluster nodes in WildFly application server.
JDBC Ping overview
This discovery protocol uses JDBC connection to a shared database. You can define connection options both as configuration properties, or with the JNDI name of a DataSource.
By default, the following DDL will run when you use the protocol without extra parameters:
CREATE TABLE JGROUPSPING
own_addr varchar(200) NOT NULL,
cluster_name varchar(200) NOT NULL,
ping_data varbinary(5000) DEFAULT NULL,
PRIMARY KEY (own_addr, cluster_name)
However, you can customize both the schema and the used SQL statements. As you can see, the recommended schema uses a single table, with two String columns being used primary key (local address, cluster name) and a third column to store the serialized form of the objects needed by JGroups.
The default table will be created at first connection.
Configuring the Protocol
In order to configure JDBC Ping using the default Datasource, you need to replace the MPING socket-protocol of your TCP connection with JDBC_PING:
<stack name="tcp">
<transport type="TCP" socket-binding="jgroups-tcp"/>
<!-- <socket-protocol type="MPING" socket-binding="jgroups-mping"/> -->
<jdbc-protocol type="JDBC_PING" data-source="ExampleDS"/>
<protocol type="MERGE3"/>
<socket-protocol type="FD_SOCK" socket-binding="jgroups-tcp-fd"/>
<protocol type="FD_ALL"/>
<protocol type="VERIFY_SUSPECT"/>
<protocol type="pbcast.NAKACK2"/>
<protocol type="UNICAST3"/>
<protocol type="pbcast.STABLE"/>
<protocol type="pbcast.GMS"/>
<protocol type="UFC"/>
<protocol type="MFC"/>
<protocol type="FRAG3"/>
</stack>
Then, set TCP as default stack for your cluster channel:
<subsystem xmlns="urn:jboss:domain:jgroups:9.0">
<channels default="ee">
<channel name="ee" stack="tcp" cluster="ejb"/>
</channels>
Connection Properties
You can check the available properties you can apply on the protocol on the source class: https://github.com/belaban/JGroups/blob/master/src/org/jgroups/protocols/JDBC_PING.java
This table summarizes the available properties:
| connection_url | The JDBC connection URL |
| connection_username | The JDBC connection username |
| connection_password | The JDBC connection password |
| initialize_sql | If not empty, a Table will be created at startup |
| insert_single_sql | SQL used to insert a new row. Customizable, but keep the order of parameters and pick compatible types |
| delete_single_sql | SQL used to delete a row. Customizable, but keep the order of parameters and pick compatible types |
| clear_sql | SQL to clear the table |
| select_all_pingdata_sql | SQL used to fetch all node’s PingData. Customizable, but keep the order of parameters and pick compatible types |
| contains_sql | Finds a given entry by its address and cluster name, used to implement a contains. |
| datasource_jndi_name | To use a DataSource registered in JNDI, specify the JNDI name here. |
Recommended Articles
Configure WildFly JTA Transaction Log Store: JDBC and File System Options
Learn how to configure JTA transaction log store in WildFly with JDBC and File System options. #WildFly #JavaTransactionAPI #JDBC #FilesystemLogStore
Configure MS SQL Server Datasource on WildFly Application Server
Learn how to configure Microsoft SQLServer Datasource on WildFly application server with step-by-step instructions and examples.
Datasource Configuration Cheatsheet for JBoss AS 7, JBoss EAP 6 and WildFly
Quick reference to valid Datasource configurations for JBoss AS 7, JBoss EAP 6 and WildFly. Includes examples for PostgreSQL, MySQL, Derby, Oracle, Microsoft SQLServer, IBM DB2.
Deploying DataSources in WildFly Application Level
Learn how to pack and deploy data sources with your Java application on WildFly, without modifying the server configuration. Follow our step-by-step guide to add data sources to your application.