ラベル database の投稿を表示しています。 すべての投稿を表示
ラベル database の投稿を表示しています。 すべての投稿を表示

2019年5月24日金曜日

BaseX (2) / Servlet としての deploy

BaseX のサービス化

BaseX はデータベースであるためサービスとして運用しておきたいという希望があります. サービスとして常時起動させておくための方法には幾つかありますが,自分の運用環境には Tomcat が導入されており,様々な Servlet を導入しています. BaseX も Servlet としてのモジュール化がなされているため, Tomcat 上での Servlet として起動したく思います.

BaseX war のダウンロード

Ubuntu上では apt install basex で標準の BaseX を導入可能ですが, せっかく Tomcat 上で起動・管理することもあり,最新の BaseX を導入したく思います.

Servlet のモジュールとなる warファイルBaseX のダウンロードサイト から入手可能です.

このページの一番右にある Web Archive と書かれたものが該当の Servlet となります. 僕がダウンロードした際の最新は画面の通り 9.2.2 です.

Tomcat上でのデプロイ

ダウンロードした BaseX の war ファイルをデプロイするのは TomcatのManager画面からするのが楽です. 直接 Tomcat のインストールディレクトリ下にある webapps フォルダにコピーするという手もありますが, 今回は Manager画面から行います.

TomcatのManager画面は以下に示したものです. パスは http://localhost:8080/manager/html になります. もし Manager 画面が表示されない場合には,Tomcat 側に情報が多数ありますので, そちらを参照してください.

このページ真ん中にある WARファイルの配備 からデプロイを行います.表示の通り [ファイルの選択] ボタンをクリックで上がってくるダイアログからファイルを選択し, その後, [配備] ボタンによりデプロイが行われます.

実は本画面はデプロイ後の画面でして, 上のアプリケーションパスの所に /BaseX922 と表示されているのが見て取れると思います.

サーブレット動作としての BaseX

上記によりデプロイした BaseX サーブレットはWebサーバ機能が動作しているため http://localhost:8080/BaseX922/ からwebページを表示することが可能です.

以下のようなページが表示されれば無事にサーブレットして BaseX が動作しています.

このページに記載されている通り,restやwebdavでアクセスすることが可能です. その際,認証が必要となりますがデフォルトで設定されているユーザ名とパスワードは共に admin となっています.

BaseX (1) / インストール

BaseXとは

ネイティブXMLデータベースシステムです.ライセンスはBSDで ここ がトップページです. 詳細についてはトップページから辿れる DOCUMENTATION ページが詳しいです.

個人的にXMLは使っているのですが XQueryを使用する必要が発生したため,XQueryに対応しているBaseXを導入することにしました.

BaseXのインストール

BaseXは通常の apt install で導入することが可能です. 自分のマシン(Ubuntu 18.04, 64bit)でインストールした結果は以下でした. Javaで実装されている模様で関連するjavaのパッケージも合わせてインストールされます.

$ sudo apt install basex
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  java-wrappers libhawtjni-runtime-java libjansi-java libjansi-native-java libjline2-java
提案パッケージ:
  libtagsoup-java libxml-commons-resolver1.1-java libjing-java
以下のパッケージが新たにインストールされます:
  basex java-wrappers libhawtjni-runtime-java libjansi-java libjansi-native-java libjline2-java
アップグレード: 0 個、新規インストール: 6 個、削除: 0 個、保留: 0 個。
3,776 kB のアーカイブを取得する必要があります。
この操作後に追加で 4,356 kB のディスク容量が消費されます。
続行しますか? [Y/n] 
取得:1 http://jp.archive.ubuntu.com/ubuntu bionic/universe amd64 java-wrappers all 0.3 [9,560 B]
取得:2 http://jp.archive.ubuntu.com/ubuntu bionic/universe amd64 basex all 8.5.1-1 [3,534 kB]
取得:3 http://jp.archive.ubuntu.com/ubuntu bionic/universe amd64 libhawtjni-runtime-java all 1.15-2 [27.1 kB]
取得:4 http://jp.archive.ubuntu.com/ubuntu bionic/universe amd64 libjansi-native-java all 1.7-1 [19.4 kB]
取得:5 http://jp.archive.ubuntu.com/ubuntu bionic/universe amd64 libjansi-java all 1.16-1 [36.2 kB]
取得:6 http://jp.archive.ubuntu.com/ubuntu bionic/universe amd64 libjline2-java all 2.14.6-1 [150 kB]
3,776 kB を 10秒 で取得しました (370 kB/s)
以前に未選択のパッケージ java-wrappers を選択しています。
(データベースを読み込んでいます ... 現在 575946 個のファイルとディレクトリがインストールされています。)
.../0-java-wrappers_0.3_all.deb を展開する準備をしています ...
java-wrappers (0.3) を展開しています...
以前に未選択のパッケージ basex を選択しています。
.../1-basex_8.5.1-1_all.deb を展開する準備をしています ...
basex (8.5.1-1) を展開しています...
以前に未選択のパッケージ libhawtjni-runtime-java を選択しています。
.../2-libhawtjni-runtime-java_1.15-2_all.deb を展開する準備をしています ...
libhawtjni-runtime-java (1.15-2) を展開しています...
以前に未選択のパッケージ libjansi-native-java を選択しています。
.../3-libjansi-native-java_1.7-1_all.deb を展開する準備をしています ...
libjansi-native-java (1.7-1) を展開しています...
以前に未選択のパッケージ libjansi-java を選択しています。
.../4-libjansi-java_1.16-1_all.deb を展開する準備をしています ...
libjansi-java (1.16-1) を展開しています...
以前に未選択のパッケージ libjline2-java を選択しています。
.../5-libjline2-java_2.14.6-1_all.deb を展開する準備をしています ...
libjline2-java (2.14.6-1) を展開しています...
libhawtjni-runtime-java (1.15-2) を設定しています ...
mime-support (3.60ubuntu1) のトリガを処理しています ...
desktop-file-utils (0.23-1ubuntu3.18.04.2) のトリガを処理しています ...
java-wrappers (0.3) を設定しています ...
bamfdaemon (0.5.3+18.04.20180207.2-0ubuntu1) のトリガを処理しています ...
Rebuilding /usr/share/applications/bamf-2.index...
libjansi-native-java (1.7-1) を設定しています ...
man-db (2.8.3-2ubuntu0.1) のトリガを処理しています ...
gnome-menus (3.13.3-11ubuntu1.1) のトリガを処理しています ...
hicolor-icon-theme (0.17-2) のトリガを処理しています ...
libjansi-java (1.16-1) を設定しています ...
basex (8.5.1-1) を設定しています ...
libjline2-java (2.14.6-1) を設定しています ...
BaseX GUIの起動

BaseX は単独でも,OS上のサービスとしても起動させることができます.またその操作を行うためのGUIアプリも付属しています. Ubuntu上から basexgui というコマンドを発行することで起動することが可能です.

JavaのSwingで作られたGUIでしょうか.非常にシンプルなGUIアプリが起動されます.

次回からは使い方を含めて色々と触っていこうと思います.

2018年9月30日日曜日

GitBucket の設定 / データベース (2)

Tomcat8 上の GitBucket における MySQL の設定記事の後半です.

MySQL での接続は,GitBucketの説明ページにも記載されて手順:

  1. mysql -uroot -p -hlocalhost
  2. create database gitbucket;
  3. grant all privileges on `gitbucket`.* to testuser@localhost identified by 'testpassword';
  4. flush privileges; 
  5. quit

で進めていくことになります.これで問題ないとは思いますが,自分自身での確認も含めて,自分がやった方法を順を追って説明します.

まず最初は MySQL でのデータベース管理システムへの接続です.これは上記の手順1の通り,以下となります:

server:~$ sudo mysql -u root -p -h localhost 
Enter password:
Welcome to the MySQL monitor.  
Commands end with ; or \g.Your MySQL connection id is 6Server version: 5.7.23-0ubuntu0.18.04.1 (Ubuntu)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. 
Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>


コマンド mysql への引数の意味は
  • -u : ユーザ指定 (rootで)
  • -p : パスワード要求
  • -u : ホスト名の指定
です.
その後,MySQL のコマンドプロンプト mysql> からデータベース操作を行います.

その後の手順を進める前に,まずはデフォルトの MySQL の動作モードがどうなっているかを確認しておく方が良いのではと思います.それは以下のコマンドを mysql> のプロンプトで発行することで確認できます:

  • mysql> SELECT @@sql_mode;

上記コマンドを入力すると表形式で情報が表示されますが,そのコンテンツとしては以下が表示されるのではないかと思います:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 
詳細についてはネット検索や MySQL のリファレンスマニュアル で確認できると思いますが,一つのポイントは以下かと思います:
NO_AUTO_CREATE_USER認証情報が指定される場合を除き、ほかの方法で実行される場合は、GRANT ステートメントで新規ユーザーを自動的に作成しません。ステートメントは IDENTIFIED BY を使用した空以外のパスワードを指定するか、IDENTIFIED WITH を使用した認証プラグインを指定する必要があります。
その後のSQL文における GRANT ステートメント発行において IDENTIFIED BY でパスワードを指定するか,陽にユーザ作成を行ってから GRANT を発行する必要があるとの認識です.MySQL のリファレンスマニュアルでは
「通常、データベース管理者は最初に CREATE USER を使用してアカウントを作成し、次に GRANT を使用してその権限や特性を定義します」(13.7.1.4 GRANT 構文
と記載してあり,通常の順をおったやり方ではまずは CREATE USER でのアカウント作成になるかとは思います.ただし「通常」と記載されている通り,自身の理解があるのであれば簡略した手順で進めていくことも可かと思います.

それをふまえて以下を進めます.
次はデータベースの生成です(手順2).これは GitBucket のページの通りです:
mysql> create database gitbucket;
Query OK, 1 row affected (0.00 sec)
無事に成功です.

その後の手順3:
grant all privileges on `gitbucket`.* to testuser@localhost identified by 'testpassword';
ですが,これは
testpassword というパスワードにより認識されたローカルホストのユーザ名 testuser に,MySQL の gitbucket データベース下のアクセスに関するすべての権限を与える
という意味になりますかね.特に「all privileges」は
ALL [PRIVILEGES] は、GRANT OPTION および PROXY 権限を除き、権限が付与されるレベルで使用可能なすべての権限を表します
となっています.
ここではユーザ名とパスワードを適切に指定して発行します.シングルコーテーション等少しわかりずらい所がありますが,自分は以下と入力し無事にOKが出ました
mysql> grant all privileges on gitbucket.* to 'gitbucket'@'localhost' identified by 'gitbucket'; 
Query OK, 0 rows affected, 1 warning (0.01 sec)
その後は手順4の
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
です.FLUSH ステートメントは,さまざまな内部キャッシュをクリアまたはリロードしたり、テーブルをフラッシュしたりするものですが,上記の「privileges」指定は以下の意味となります:
mysql データベース内の付与テーブルから権限をリロードします。
GRANT、CREATE USER、CREATE SERVER、および INSTALL PLUGIN ステートメントの結果として、サーバーは情報をメモリーにキャッシュします。このメモリーは、対応する REVOKE、DROP USER、DROP SERVER、および UNINSTALL PLUGIN ステートメントによって解放されないため、キャッシュを発生させるステートメントの多数のインスタンスを実行するサーバーでは、メモリー使用量が増加します。このキャッシュされたメモリーは FLUSH PRIVILEGES で解放できます。
その後は最後の quit です:
mysql> quit
Bye

これで無事にデータベースが作成できました.

後は GitBucket 側での設定です.それは次に記事にて.



GitBucket の設定 / データベース (1)

GitBucket を立ち上げ後,System Administration にて各種設定をしていくのですが,その際,System Settings にて以下の表示が目につくと思います:

ピンク色で囲まれた記載:
Your GitBucket is running on embedded H2 database. Recommend to configure to use external database if you would like to use GitBucket for important purpose.
がポイントです.

 GitBucketのデフォルトでは,その各種データを Java SQL Database である
H2 Database Engine
に保存するようになっています.Wikipedia のページ で紹介されている通り,オープンソースで低フットプリントな Java プラットフォーム用データベースの様で,開発元のwebページにある History and Roadmap を拝見するに 2004 年から開発されているデータベースの様です.
 使ってみた感覚として,それなりの信頼性はありそうな気はしますが,上記の GitBucket 上の記載を見るに,重要なデータを管理する場合には,より広く使われているデータベース(MySQLなりPostgreSQLなり)を使用することが薦められています.
作者側で確認済のことがあるのやもしれませんが,一般論としても,その使用者数が多いことからくる信頼性の高さは H2 よりも MySQL/PostgreSQL の方は良いかとは思います.
 記載上にある青字の "configure to use external database" のリンクに飛ぶと,MySQL や PostgreSQL を用いた設定方法が記載されています.
External database configuration
上記ページの記述を元に設定すればデータベースは使える様ですが,さて,どちらを使うべきか,です.
 それについては,僕自身は判断根拠を持ってはいませんが,以下のページを参考にさせて頂きました:
PostgreSQLとMySQL、使うならどっち? データベース専門家が8つの視点で徹底比較!
このページの結論によると
  • PostgreSQLは「多機能であること」が最大の利点なので、その特徴が生きるようなシステムには向いていると思います。たとえば、Oracle Databaseからの移行やSIer系の企業で使われるケースが多いという印象を個人的には持っています。あとは、分析系のシステムでもよく使われます。ただこれも前述のようにMySQLの分析機能が徐々に充実してきているため、将来的に差は少なくなってくるでしょう。
  • (MySQLは) 基本的には、シンプルなWebサービスに向いていると思います。一定数の結果セットを取ってきて、そのデータを表示するといった感じの。たとえばTwitterのように、タイムラインの先頭部分を表示して、下にスクロールすると次のデータを読みこむようなサービスは、MySQLには特にマッチしていると思います。
の様です.最後は「とはいえ、バージョンが上がるごとにPostgreSQLもMySQLも高性能になってきているので、結局は使いたい方を使えばいいんじゃないでしょうか。」と結ばれていますが,上記内容を見るに「MySQL」でいこうかなと思います.GitBucketのページでも MySQL の方が最初に記載されていますし.

MySQL での設定については,少し確認したこととかもあるので後半の記事で紹介しようと思います.

GNU Emacs for Windows における最近の IMEパッチ問題

自分は GNU Emacs 使いなのですが、Windows版の Emacs を使用する場合、IMEパッチの問題がありました。 ざっくり言うと、FSFの正規のリリースバイナリだと日本語変換のIMEに切り替えた時、インラインで候補文字が表示されないという問題です。そのために有志の方々...