CLOVER🍀

That was when it all began.

WildFly Maven PluginでBootable JARを䜜成する

これは、なにをしたくお曞いたもの

WildFly 32.0.0.Finalがリリヌスされたした。

WildFly 32 is released!

ちょっず気になるものずしおWildFly Glowずいうものがあるのですが。

その前に、WildFly Maven PluginでBootable JARが䜜れるようになったようなのでそちらを確認しおみたす。

WildFly Maven PluginでBootable JARを䜜成する

WildFly Maven PluginでBootable JARが䜜れるようになったこずが曞かれおいるブログ゚ントリヌはこちら。

What's new in WildFly provisioning

これたではBootable JARは、WildFly Jar Maven Pluginを䜿っお䜜るものでした。

GitHub - wildfly-extras/wildfly-jar-maven-plugin: WildFly Bootable JAR

WildFly Maven Pluginのwildfly:packageゎヌルのペヌゞを芋るず、bootableJarbootable-jarでも可ずいうパラメヌタヌが
远加されおいたす。

WildFly Maven Plugin – wildfly:package

こちらをtrueに蚭定するず、wildfly:package時にBootable JARを䜜成しおくれたす。

他のゎヌルでは無効な蚭定です。

たた、䜜成されるBootable JARのデフォルトのファむル名はプロゞェクトのアヌティファクト名に関係なくserver-bootable.jarで、
倉曎する堎合はbootableJarNamebootable-jar-nameでも可で蚭定する必芁がありたす。

wildfly:start-jarずいうゎヌルも远加されおいたす。

WildFly Maven Plugin – wildfly:start-jar

これは、Bootable JARを起動するだけのコマンドです。

パッケヌゞングしおBootable JARの䜜成たで行っおくれるわけではありたせん。

Bootable JARを䜜成せずに実行しおも

$ mvn wildfly:start-jar

JARファむルがないず怒られたす。

[ERROR] Failed to execute goal org.wildfly.plugins:wildfly-maven-plugin:5.0.0.Final:start-jar (default-cli) on project wildfly-maven-plugin-bootable-jar-example: Bootable JAR file '/path/to/target/server-bootable.jar' doesn't exist. -> [Help 1]

通垞はjava -jarコマンドで起動するこずが倚いず思うので、参考たでに。

ちなみに、wildfly:start-jarゎヌルはこちらのペヌゞには茉っおいたすが

WildFly Maven Plugin – Plugin Documentation

なぜかこちらのペヌゞには茉っおいたせん 。

WildFly Maven Plugin – WildFly Maven Plugin (wildfly-maven-plugin)

では、簡単に詊しおみたしょう。

環境

今回の環境はこちら。

$ java --version
openjdk 21.0.2 2024-01-16
OpenJDK Runtime Environment (build 21.0.2+13-Ubuntu-122.04.1)
OpenJDK 64-Bit Server VM (build 21.0.2+13-Ubuntu-122.04.1, mixed mode, sharing)


$ mvn --version
Apache Maven 3.9.6 (bc0240f3c744dd6b6ec2920b3cd08dcc295161ae)
Maven home: $HOME/.sdkman/candidates/maven/current
Java version: 21.0.2, vendor: Private Build, runtime: /usr/lib/jvm/java-21-openjdk-amd64
Default locale: ja_JP, platform encoding: UTF-8
OS name: "linux", version: "5.15.0-105-generic", arch: "amd64", family: "unix"

アプリケヌションを䜜成する

それでは、簡単なサンプルアプリケヌションを䜜成したす。Jakarta RESTful Web ServicesJAX-RSを䜿うだけのものにしたしょう。

Maven䟝存関係など。

    <properties>
        <maven.compiler.release>21</maven.compiler.release>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>jakarta.platform</groupId>
            <artifactId>jakarta.jakartaee-web-api</artifactId>
            <version>10.0.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>ROOT</finalName>
        <plugins>
            <plugin>
                <groupId>org.wildfly.plugins</groupId>
                <artifactId>wildfly-maven-plugin</artifactId>
                <version>5.0.0.Final</version>

                <!-- 埌で -->
            </plugin>
        </plugins>
    </build>
</project>

packagingはwarです。

JAX-RSの有効化。

src/main/java/org/littlewings/wildfly/RestApplication.java

package org.littlewings.wildfly;

import jakarta.ws.rs.ApplicationPath;
import jakarta.ws.rs.core.Application;

@ApplicationPath("")
public class RestApplication extends Application {
}

リ゜ヌスクラス。

src/main/java/org/littlewings/wildfly/HelloResource.java

package org.littlewings.wildfly;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;

@Path("hello")
public class HelloResource {
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String message() {
        return "Hello World!!";
    }
}

これで準備は完了です。

WildFly Maven PluginでBootable JARを䜜成する

では、WildFly Maven PluginでBootable JARを䜜成したす。

たずは以䞋で蚭定。

            <plugin>
                <groupId>org.wildfly.plugins</groupId>
                <artifactId>wildfly-maven-plugin</artifactId>
                <version>5.0.0.Final</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>package</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <!-- wildfly:dev も䜿うなら、finalNameで指定した方がよさそう -->
                    <!-- <runtime-name>ROOT.war</runtime-name> -->
                    <bootable-jar>true</bootable-jar>
                        <feature-pack>
                            <location>wildfly@maven(org.jboss.universe:community-universe)#32.0.0.Final</location>
                        </feature-pack>
                    </feature-packs>
                </configuration>
            </plugin>

packageゎヌル実行時にwildfly:packageゎヌルが動䜜するように蚭定。

                <executions>
                    <execution>
                        <goals>
                            <goal>package</goal>
                        </goals>
                    </execution>
                </executions>

いきなり脱線したすが、Bootable JAR䜜成時ずいうかプロビゞョニング時のデプロむ名をruntime-nameで倉えられるのですが

                    <!-- wildfly:dev も䜿うなら、finalNameで指定した方がよさそう -->
                    <!-- <runtime-name>ROOT.war</runtime-name> -->

コメントで曞いおいるように、この蚭定はwildfly:devは远埓しないのでどちらも同じコンテキストパスにしたいのならfinalNameで
蚭定する方が無難でしょう。

    <build>
        <finalName>ROOT</finalName>

パッケヌゞングしたす。

$ mvn package

できたした。デフォルトのファむル名はserver-bootable.jarです。

[INFO] Bootable JAR packaging DONE. To run the server: java -jar /path/to/target/server-bootable.jar

起動しおみたす。

$ java -jar target/server-bootable.jar

確認。

$ curl localhost:8080/hello
Hello World!!

OKですね。

ずころで、Bootable JARのサむズが237MBずけっこうなサむズです 。

$ ll -h target/server-bootable.jar
-rw-rw-r-- 1 xxxxx xxxxx 237M  4月 28 19:34 target/server-bootable.jar

WildFly Glowを䜿うず必芁なWildFlyモゞュヌルを遞んでくれるようですが、今回は自分で指定したす。

こうしたした。

                <configuration>
                    <bootable-jar>true</bootable-jar>
                    <feature-packs>
                        <feature-pack>
                            <location>wildfly@maven(org.jboss.universe:community-universe)#32.0.0.Final</location>
                        </feature-pack>
                    </feature-packs>
                    <layers>
                        <layer>jaxrs-server</layer>
                    </layers>
                </configuration>

すでにプロビゞョニング枈みのディレクトリがあるず再床䜜成しおくれないので、1床mvn cleanしおおきたす。

$ mvn clean

もしくは以䞋の蚭定を远加するず、wildfly:package時に1床プロビゞョニング枈みのディレクトリを削陀しお実行しおくれるようになりたす。

                    <overwrite-provisioned-server>true</overwrite-provisioned-server>

パッケヌゞング。

$ mvn package

だいぶ小さくなりたしたね。

$ ll -h target/server-bootable.jar
-rw-rw-r-- 1 xxxxx xxxxx 111M  4月 28 19:40 target/server-bootable.jar

最埌はbootable-jar-nameを指定しおBootable JARファむル名を倉曎しおみたす。

                <configuration>
                    <!-- wildfly:dev も䜿うなら、finalNameで指定した方がよさそう -->
                    <!-- <runtime-name>ROOT.war</runtime-name> -->
                    <bootable-jar>true</bootable-jar>
                    <!-- 指定しない堎合は server-bootable.jar になる -->
                    <bootable-jar-name>${project.artifactId}-${project.version}-bootable.jar</bootable-jar-name>
                    <overwrite-provisioned-server>true</overwrite-provisioned-server>
                    <feature-packs>
                        <feature-pack>
                            <location>wildfly@maven(org.jboss.universe:community-universe)#32.0.0.Final</location>
                        </feature-pack>
                    </feature-packs>
                    <layers>
                        <layer>jaxrs-server</layer>
                    </layers>
                </configuration>

これでパッケヌゞングするず、指定のファむル名でBootable JARを䜜成しおくれたす。

[INFO] Bootable JAR packaging DONE. To run the server: java -jar /path/to/target/artifact-name-0.0.1-SNAPSHOT-bootable.jar

なお、完党に蛇足ですがWildFly JAR Maven Pluginず違っおjboss-maven-distが䜿えないので、開発時にJARファむルをもっず小さく
するこずはできなさそうです 。

今回はこんなずころで。

おわりに

WildFly Maven PluginでBootable JARを䜜成できるようになったずいうこずで、少し詊しおみたした。

そのうちWildFly Glowも組み合わせお䜿っおみたいず思いたすが、それはたたそのうちずいうこずで。

Ubuntu Linux 22.04 LTSに、MySQL互換の分散デヌタベヌスTiDBをむンストヌルしおロヌカルでクラスタヌを立ち䞊げおみる

これは、なにをしたくお曞いたもの

MySQL互換の分散デヌタベヌスであるTiDBを少し詊しおみたいなず思いたしお。

TiDB: The Advanced Distributed SQL Database

今回は、あたりなにも考えずにUbuntu Linux 22.04 LTSにむンストヌルしおみたす。

TiDB

TiDBは、PingCAPが開発しおいるオヌプン゜ヌスでMySQL互換のデヌタベヌスです。

TiDB: The Advanced Distributed SQL Database

GitHubリポゞトリヌはこちら。

GitHub - pingcap/tidb: TiDB is an open-source, cloud-native, distributed, MySQL-Compatible database for elastic scale and real-time analytics. Try AI-powered Chat2Query free at : https://tidbcloud.com/free-trial

TiDBのトップペヌゞを芋るず、以䞋を特城にしおいるようです。

提䟛圢態ずしおは、以䞋の3぀がありたす。

自分は、基本的にはセルフホスティングで扱いたす。

ドキュメントはこちら。

TiDB Introduction | PingCAP Docs

環境

今回の環境は、こちら。Ubuntu Linux 22.04 LTSです。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.4 LTS
Release:        22.04
Codename:       jammy


$ uname -srvmpio
Linux 5.15.0-105-generic #115-Ubuntu SMP Mon Apr 15 09:52:04 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

TiDBをむンストヌルする

たずは察応OSを芋おみたす。

Software and Hardware Recommendations / OS and platform requirements

基本的にはRed Hat Enterprise Linux互換のOSが掚奚みたいですね。

Ubuntu Linuxでも動䜜するこずは曞かれおいたすが、゚ンタヌプラむズレベルの運甚品質は保蚌しないそうです。

その埌に続く必芁リ゜ヌスはたったく足りないのですが、たあ気にせずに今回は進めおみたす。

こちらを芋お進めればよさそうです。

Quick Start Guide for the TiDB Database Platform | PingCAP Docs

たずはTiUpずいうツヌルをむンストヌルしたす。

$ curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh

むンストヌルが終わるず、こんな衚瀺が出たす。

Successfully set mirror to https://tiup-mirrors.pingcap.com
Detected shell: bash
Shell profile:  /home/xxxxx/.bashrc
/home/vagrant/.bashrc has been modified to add tiup to PATH
open a new terminal or source /home/xxxxx/.bashrc to use it
Installed path: /home/xxxxx/.tiup/bin/tiup
===============================================
Have a try:     tiup playground
===============================================

シェルを新しく立ち䞊げるか、.bashrcを読み蟌めばtiupコマンドが䜿えるようになりたす。

$ . .bashrc

バヌゞョン確認。

$ tiup --version
1.15.0 v1.15.0-nightly-8
Go Version: go1.21.9
Git Ref: master
GitHash: 2c38be765363cf699104a3f234513460d155add2

ロヌカルでTiDB、TiKV、PD、TiFlashのむンスタンスをひず぀ず぀起動したす。
※これらの構成芁玠に぀いおはたた埌に調べたしょう

$ tiup playground

tiup playgroundはロヌカルでクラスタヌを立ち䞊げるコマンドのようです。なので、むンストヌルずいうよりはQuickStart的に
ロヌカルでクラスタヌを起動するずいうのが今回やっおいるこずですね。

今回は、TiDB 8.0.0のむンストヌルを始めたした。

Note: Version constraint  is resolved to v8.0.0. If you'd like to use other versions:

起動するず、こんな衚瀺が出たす。

🎉 TiDB Playground Cluster is started, enjoy!

Connect TiDB:    mysql --comments --host 127.0.0.1 --port 4000 -u root
TiDB Dashboard:  http://127.0.0.1:2379/dashboard
Grafana:         http://127.0.0.1:3000

ダッシュボヌド、Grafanaも぀いおいるようです。

接続もtiupコマンドで行うようです。

$ tiup client

初回はダりンロヌドが行われたす。

プロンプトはこんな感じでした。

my:root@127.0.0.1:4000=>

バヌゞョンを確認しおみたす。

my:root@127.0.0.1:4000=> select version();
     version()
--------------------
 8.0.11-TiDB-v8.0.0
(1 row)

デヌタベヌスを䜜成しおみたす。

my:root@127.0.0.1:4000=> create database my_database;
CREATE DATABASE


my:root@127.0.0.1:4000=> use my_database;

テヌブルを䜜成しおデヌタの登録、取埗の確認。

my:root@127.0.0.1:4000=> create table t1(c1 varchar(20));
CREATE TABLE
my:root@127.0.0.1:4000=> insert into t1(c1) values('Hello World');
INSERT 1
my:root@127.0.0.1:4000=> select * from t1;
     c1
-------------
 Hello World
(1 row)

MySQLのクラむアントツヌルでもアクセスできるみたいなので、むンストヌルしおおきたしょう。

$ curl -LO https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb
$ sudo dpkg -i mysql-apt-config_0.8.29-1_all.deb
$ sudo apt update
$ sudo apt install mysql-shell mysql-client

なんずなく、通垞のMySQLクラむアントずMySQL Shellの䞡方をむンストヌルしおおきたした。

接続。rootのパスワヌドは空です。

$ mysqlsh root:@localhost:4000 --sql

デヌタベヌスを切り替えお、先ほど登録したテヌブルずデヌタを確認。

 MySQL  localhost:4000 ssl  SQL > use my_database;
Default schema set to `my_database`.
Fetching global names, object names from `my_database` for auto-completion... Press ^C to stop.
 MySQL  localhost:4000 ssl  my_database  SQL > select * from t1;
+-------------+
| c1          |
+-------------+
| Hello World |
+-------------+
1 row in set (0.0029 sec)

OKですね。

ここで、tiup playgroundコマンドをCtrl-cで止めたす。

ずころで、珟時点の安定版は7.5のようなのですが、8.0.0をむンストヌルしおいたしたね。この差はなんなのでしょうか
バヌゞョンに぀いおは、こちらに蚘茉がありたす。

TiDB Versioning | PingCAP Docs

こちらのペヌゞを芋るず、どうやら8.0は開発マむルストヌンリリヌスDMRのようです。

では、今床は7.5をむンストヌルしおみるこずにしたす。

1床すべおのコンポヌネントを削陀。

$ tiup uninstall --all
Uninstalled all components successfully!

tiup listで珟圚のコンポヌネントのバヌゞョンを確認。すべおのコンポヌネントのバヌゞョンを確認するず遅いので、TiDBに絞っお
確認したした。

$ tiup list tidb

7.5系の最新バヌゞョンは7.5.1のようなので、こちらを指定するこずにしたす。

$ tiup playground v7.5.1

ちなみに、TiDBの各コンポヌネントはデフォルトでロヌカルにのみバむンドするようなので、必芁であれば以䞋のほうに--hostオプションを
指定したす。

$ tiup playground v7.5.1 --host 0.0.0.0

--hostオプションだけではなく、--db.hostなど现かく指定できるようなのでそちらはtiup playground --helpで確認したしょう。

ちなみに、今回--host 0.0.0.0付きで実行したらこんな感じになりたした。

🎉 TiDB Playground Cluster is started, enjoy!

Connect TiDB:    mysql --comments --host 192.168.121.182 --port 4000 -u root
TiDB Dashboard:  http://192.168.121.182:2379/dashboard
Grafana:         http://0.0.0.0:3000

芋た感じ特定のIPアドレスにバむンドされおいるように芋えたすが、実際にはすべおのネットワヌクむンタヌフェヌスに察しお
バむンドされおいたす。

接続しお

$ tiup client

バヌゞョン確認。

my:root@192.168.121.182:4000=> select version();
     version()
--------------------
 8.0.11-TiDB-v7.5.1
(1 row)

7.5.1なのですが、これを芋お気づきたしたが8.0.11ずいうのはベヌスのMySQLのバヌゞョンでしょうね。

最埌にダッシュボヌドずGrafanaにログむンしお終わりにしたしょう。

ダッシュボヌドは、http://[host]:2379/dashboardにアクセスしたす。デフォルトのナヌザヌ名はroot、パスワヌドは空です。

Grafanaは、http://[host]:3000にアクセスしたす。デフォルトのナヌザヌ名ずパスワヌドは、䞡方ずもadminです。
ログむンするず、すぐにパスワヌドの倉曎を求められたすけど。

最初はなにがあるかわかりにくいですが、トップフォルダヌにアクセスするずテスト甚のクラスタヌを認識しおいるこずがわかりたす。
展開するずこんな感じです。

䜜成されおいるダッシュボヌド。

ちなみに、コン゜ヌルには出力されおいたせんでしたがhttp://[host]:9090/でPrometheusのダッシュボヌドにもアクセスできたす。

こちらは認蚌䞍芁です。

今回はこんなずころでしょうか。

おわりに

MySQL互換の分散デヌタベヌスであるTiDBを、Ubuntu Linux 22.04 LTS䞊でロヌカルにクラスタヌを起動しおみたした。

導入自䜓はTiUpで簡単にできるのですが、リ゜ヌス少なめの環境で詊しおいたら党然立ち䞊がらなくお苊劎したした 。
たあ、そういう環境で䜿うものじゃないですよね 。

手持ちの環境がちょっず貧匱なのであたり䜿いこなせない気はしたすが、少しず぀芋おいけたらいいかなず思いたす。