これは、なにをしたくて書いたもの?
WildFlyのコネクションプールの実装についてちゃんと調べたことがなかったので、見てみたら全然知らなかったんだな?と
思ったのでメモしておこうということで。
WildFlyの2つのDataSourceサブシステム
現在のWildFlyには、DataSourceを扱う2つのサブシステムがあります。
- WildFly Admin Guide / Subsystem configuration / DataSource Subsystem
- WildFly Admin Guide / Subsystem configuration / Agroal Subsystem
ふだん、意識せずに使っていると思われるのが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年ですね。
デフォルトの実装は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サイトはこちら。
ドキュメントはこちら。
IronJacamar.org - Documentation
GitHub - ironjacamar/ironjacamar: The IronJacamar project
Webサイトやドキュメントを見ると、更新されていない…?とドキッとしますが、GitHubリポジトリー側を見ると更新が
続けられていることがわかります。
IronJacamarはJakarta Connectorsの実装です。
Jakarta Connectorsとは?というと、Jakarta EEプラットフォームをヘテロジニアスなEISに接続するための標準アーキテクチャー
であるとされています。
この仕様の中でJDBCやプールの話も触れられています。
IronJacamarのドキュメントで、DataSourceについて書かれているのはこちらですね。
Deployment / Deploying datasources
設定内容を見ると、見たことのある項目が並んでいる気がします。
WildFly 36 Model Reference / subsystem=datasources / data-source=ExampleDS
実装を見る場合は、このあたりを眺めることになる気がしますね。
プールの実装はこのあたりのようですが、Jakarta Connectors自体がDataSourceに特化したものではないため汎用的な
プールのようですね。
WildFlyのDataSourceサブシステムとしての実装はこちらです。
Galleon Layer。
IronJacamarについて見るのはこれくらいにしておきます。
Agroal
AgroalはWildFlyの新しいコネクションプールの実装です。
なんとSpring BootのStarterもあったりします。
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としては定義されていなさそうですね。
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まわりはさらっと扱っておしまいということが多いので、時々ちゃんと見ないとですね。