CLOVER🍀

That was when it all began.

WildFlyのコネクションプール実装って?(IronJacamar、Agroal)

これは、なにをしたくて書いたもの?

WildFlyのコネクションプールの実装についてちゃんと調べたことがなかったので、見てみたら全然知らなかったんだな?と
思ったのでメモしておこうということで。

WildFlyの2つのDataSourceサブシステム

現在のWildFlyには、DataSourceを扱う2つのサブシステムがあります。

WildFly 14 is released!

ふだん、意識せずに使っていると思われるのがDataSourceサブシステムです。

[standalone@localhost:9990 /] ls -l /subsystem=datasources
ATTRIBUTE         VALUE TYPE
installed-drivers [{"driver-name" => "h2","deployment-name" => undefined,"driver-module-name" => "com.h2database.h2","module-slot" => "main","driver-datasource-class-name"
=> "","driver-xa-datasource-class-name" => "org.h2.jdbcx.JdbcDataSource","datasource-class-info" => [{"org.h2.jdbcx.JdbcDataSource" => {"URL" => "java.lang.String","descrip
tion" => "java.lang.String","loginTimeout" => "int","password" => "java.lang.String","url" => "java.lang.String","user" => "java.lang.String"}}],"driver-class-name" => "org
.h2.Driver","driver-major-version" => 2,"driver-minor-version" => 2,"jdbc-compliant" => true}]LIST

CHILD          MIN-OCCURS MAX-OCCURS
data-source    n/a        n/a
jdbc-driver    n/a        n/a
xa-data-source n/a        n/a

Agroalサブシステムは明示的に有効化(追加)する必要があります。

[standalone@localhost:9990 /] /extension=org.wildfly.extension.datasources-agroal:add
{"outcome" => "success"}


[standalone@localhost:9990 /] /subsystem=datasources-agroal:add
{
    "outcome" => "success",
    "response-headers" => {
        "operation-requires-reload" => true,
        "process-state" => "reload-required"
    }
}

AgroalサブシステムがWildFlyに含まれるようになったのは、WildFly 14からのようです。2018年ですね。

WildFly 14 is released!

デフォルトの実装はIronJacamarであるとも書かれていますね。

By default, the existing JCA based implementation (IronJacamar) is still used; however, in a future release, Agroal may become the new default. For more information, please see the WildFly 14 documentation.

よく見ると、ドキュメントにも書かれていました。

The datasource subsystem is provided by the IronJacamar project.

WildFly Admin Guide / Subsystem configuration / DataSource Subsystem / Component Reference

IronJacamar

IronJacamarのWebサイトはこちら。

Welcome to IronJacamar.org

ドキュメントはこちら。

IronJacamar.org - Documentation

GitHubリポジトリーはこちら。

GitHub - ironjacamar/ironjacamar: The IronJacamar project

Webサイトやドキュメントを見ると、更新されていない…?とドキッとしますが、GitHubリポジトリー側を見ると更新が
続けられていることがわかります。

IronJacamarはJakarta Connectorsの実装です。

Jakarta Connectorsとは?というと、Jakarta EEプラットフォームをヘテロジニアスなEISに接続するための標準アーキテクチャ
であるとされています。

Jakarta Connectors

この仕様の中でJDBCやプールの話も触れられています。

IronJacamarのドキュメントで、DataSourceについて書かれているのはこちらですね。

Deployment / Deploying datasources

設定内容を見ると、見たことのある項目が並んでいる気がします。

WildFly 36 Model Reference / subsystem=datasources / data-source=ExampleDS

実装を見る場合は、このあたりを眺めることになる気がしますね。

https://github.com/ironjacamar/ironjacamar/tree/3.0.13.Final/common/api/src/main/java/org/jboss/jca/common/api/metadata/ds

ironjacamar/adapters/src/main/java/org/jboss/jca/adapters/jdbc at 3.0.13.Final · ironjacamar/ironjacamar · GitHub

https://github.com/ironjacamar/ironjacamar/tree/3.0.13.Final/as/src/main/java/org/jboss/jca/as/converters

プールの実装はこのあたりのようですが、Jakarta Connectors自体がDataSourceに特化したものではないため汎用的な
プールのようですね。

https://github.com/ironjacamar/ironjacamar/blob/3.0.13.Final/common/impl/src/main/java/org/jboss/jca/common/metadata/common/PoolImpl.java

WildFlyのDataSourceサブシステムとしての実装はこちらです。

https://github.com/wildfly/wildfly/tree/36.0.0.Final/connector/src/main/java/org/jboss/as/connector/subsystems/datasources

Galleon Layer。

https://github.com/wildfly/wildfly/blob/36.0.0.Final/ee-feature-pack/galleon-shared/src/main/resources/layers/standalone/datasources/layer-spec.xml

IronJacamarについて見るのはこれくらいにしておきます。

Agroal

AgroalはWildFlyの新しいコネクションプールの実装です。

Agroal

なんとSpring BootのStarterもあったりします。

GitHubリポジトリーはこちら。

GitHub - agroal/agroal: The natural database connection pool

QuarkusのJDBCコネクションプールとしても使われています。

Configure data sources in Quarkus - Quarkus

WildFlyのAgroal extension、サブシステムはこちらです。

https://github.com/wildfly/wildfly/tree/36.0.0.Final/datasources-agroal

AgroalはGalleon layerとしては定義されていなさそうですね。

Galleon Provisioning Guide

QuarkusのAgroal Extensionはこちら。

https://github.com/quarkusio/quarkus/tree/3.21.2/extensions/agroal

DataSource Extensionとは別にあるようです…。

https://github.com/quarkusio/quarkus/tree/3.21.2/extensions/datasource

これはどうなっているかというと、各RDBMS向けのJDBC Extensionを使用するとAgroal Extensionも含まれるということに
なっているようです。

https://github.com/quarkusio/quarkus/tree/3.21.2/extensions/jdbc

おわりに

ちょっとWildFlyのデータソースまわりを調べようと思って見てみたら、意外と知らなかったことがわかりました。

Agroalの名前だけ少し見かけていたのですが、そういえばIronJacamarって聞いたことあるなと後から思いましたが、
最初は完全に忘れていましたね。

そして、Agroalを使っていたんだとずっと思っていました…。

このブログではJDBCまわりはさらっと扱っておしまいということが多いので、時々ちゃんと見ないとですね。