ApacheとWildFlyをmod_jkで繋ぐ
TweetPosted on Tuesday Jan 21, 2014 at 07:34AM in Technology
環境
- さくらインターネット VPS 1G
- CentOS 6.5
- WildFly 8.0.0CR1
- Apache 2.2.24
- tomcat-connectors-1.2.37-src.tar.gz
- ここに書いた作業をした後
何をするの?
ApacheとWildFlyをmod_jkで繋ぎます
mod_jkを入れる
ビルドとインストール
yumとかでインストール出来れば楽なのですが、見当たらなかったのでここからソースを取ってきます
sudo yum install httpd-devel tar zxvf tomcat-connectors-1.2.37-src.tar.gz cd tomcat-connectors-1.2.37-src/native ./configure --with-apxs=/usr/sbin/apxs make -j 2 sudo make install
設定ファイルの雛型をコピー
sudo cp tomcat-connectors-1.2.37-src/conf/httpd-jk.conf /etc/httpd/conf.d sudo cp tomcat-connectors-1.2.37-src/conf/workers.properties.minimal /etc/httpd/conf/workers.properties sudo service httpd restart
動作確認
jk-status画面を表示したいのですが、localhostからのアクセスしか許可してないので、sshのトンネル経由でアクセスしてみる。手元の端末で以下を実行
ssh [SERVER ADDRESS] -L 10080:localhost:80
その後ブラウザでここを開いてみると
まだWildFly側で受け入れの設定はしてないけど一応動いてますね
WildFly側の設定
CLIの管理コンソールを起動する
sudo -u wildfly /usr/local/wildfly/bin/jboss-cli.sh
設定コマンドを打ち込む
connect /subsystem=undertow/server=default-server/ajp-listener=myListener:add(socket-binding=ajp, scheme=http, enabled=true) exit
こういう感じになればOK
$ sudo -u wildfly /usr/local/wildfly/bin/jboss-cli.sh You are disconnected at the moment. Type 'connect' to connect to the server or 'help' for the list of supported commands. [disconnected /] connect [standalone@localhost:9990 /] /subsystem=undertow/server=default-server/ajp-listener=myListener:add(socket-binding=ajp, scheme=http, enabled=true) {"outcome" => "success"} [standalone@localhost:9990 /]
telnetで覗いてみる
ちゃんとポートが開いているようです
$ telnet localhost 8009 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. ^] telnet> quit Connection closed. $
Apache側の設定
ここではとりあえず何も考えず全部WildFlyに飛ばすことにします
sudo sh -c 'cat > /etc/httpd/conf.d/jk.conf' <<EOF <IfModule jk_module> JkMount /* lb </IfModule> EOF sudo service httpd restart ]]>
終わったらグローバルIPアドレス経由でアクセスしてみましょう。
単純な設定しかしてませんがとりあえず繋がったようですね。管理コンソールは9990番ポート経由でないとアクセス出来ないので、リモートから80番経由で管理コンソールを触られる心配はないようです。
参考文献
Tags: linux
さくらVPSにJRE, WildFly, PostgreSQL, Apacheを入れる
TweetPosted on Tuesday Jan 21, 2014 at 07:24AM in Technology
環境
- さくらインターネット VPS 1G
- CentOS 6.5
- ここに書いた作業をした後
何をするの?
- JRE (jre-7u51-linux-x64.rpm) を入れる
- WildFly (wildfly-8.0.0.CR1.tar.gz) を入れる
- PostgreSQL 9.2.6を入れる
- Apacheを入れる
JREを入れる
いまのところこのへんにあります。私はjre-7u51-linux-x64.rpmを取ってきました。
<![CDATA[ sudo rpm -ivh jre-7u51-linux-x64.rpm ]]>
動作確認
$ java -version java version "1.7.0_51" Java(TM) SE Runtime Environment (build 1.7.0_51-b13) Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode) $
WildFlyを入れる
ユーザを作ります
sudo useradd wildfly
tarballを展開します
sudo tar zxvf wildfly-8.0.0.CR1.tar.gz -C /usr/local --no-same-owner sudo chown -R wildfly:wildfly /usr/local/wildfly-8.0.0.CR1 sudo ln -s /usr/local/wildfly-8.0.0.CR1 /usr/local/wildfly
設定ファイルを作ります
sudo mkdir /etc/java sudo sh -c 'cat > /etc/java/java.conf' <<EOF export JAVA_HOME=/usr/java/default EOF sudo sh -c 'cat > /etc/default/wildfly.conf' <<EOF export JBOSS_HOME=/usr/local/wildfly export JBOSS_USER=wildfly export LANG=ja_JP.UTF-8 EOF
ログとpid出力用のディレクトリを作ります
sudo mkdir /var/run/wildfly sudo mkdir /var/log/wildfly
起動スクリプトを置きます
sudo cp /usr/local/wildfly-8.0.0.CR1/bin/init.d/wildfly-init-redhat.sh /etc/init.d/wildfly sudo chkconfig --add wildfly sudo chkconfig wildfly on
起動してみます
$ sudo service wildfly start Starting wildfly: [ OK ] $
ログとpidファイルを確認してみます
$ ls -l /var/log/wildfly 合計 8 -rw-r--r-- 1 root root 4670 1月 19 11:54 2014 console.log $ ls -l /var/run/wildfly 合計 4 -rw-r--r-- 1 wildfly wildfly 6 1月 19 11:54 2014 wildfly.pid $
ログを見てみます
========================================================================= JBoss Bootstrap Environment JBOSS_HOME: /usr/local/wildfly JAVA: /usr/java/default/bin/java JAVA_OPTS: -server -XX:+UseCompressedOops -Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true ========================================================================= 11:48:59,714 INFO [org.jboss.modules] (main) JBoss Modules version 1.3.0.Final 11:49:05,184 INFO [org.jboss.msc] (main) JBoss MSC version 1.2.0.CR1 11:49:05,351 INFO [org.jboss.as] (MSC service thread 1-2) JBAS015899: WildFly 8.0.0.CR1 "WildFly" starting 11:49:07,201 INFO [org.xnio] (MSC service thread 1-1) XNIO version 3.2.0.Beta4 11:49:07,208 INFO [org.jboss.as.server] (Controller Boot Thread) JBAS015888: Creating http management service using socket-binding (management-http) 11:49:07,216 INFO [org.xnio.nio] (MSC service thread 1-1) XNIO NIO Implementation Version 3.2.0.Beta4 11:49:07,278 INFO [org.jboss.remoting] (MSC service thread 1-1) JBoss Remoting version (unknown) 11:49:07,302 INFO [org.jboss.as.clustering.infinispan] (ServerService Thread Pool -- 33) JBAS010280: Activating Infinispan subsystem. 11:49:07,314 INFO [org.jboss.as.naming] (ServerService Thread Pool -- 41) JBAS011800: Activating Naming Subsystem 11:49:07,325 INFO [org.jboss.as.webservices] (ServerService Thread Pool -- 50) JBAS015537: Activating WebServices Extension 11:49:07,317 INFO [org.jboss.as.security] (ServerService Thread Pool -- 46) JBAS013171: Activating Security Subsystem 11:49:07,376 INFO [org.jboss.as.security] (MSC service thread 1-2) JBAS013170: Current PicketBox version=4.0.20.Beta2 11:49:07,395 INFO [org.jboss.as.jsf] (ServerService Thread Pool -- 39) JBAS012615: Activated the following JSF Implementations: [main] 11:49:07,616 INFO [org.wildfly.extension.undertow] (ServerService Thread Pool -- 49) JBAS017502: Undertow 1.0.0.Beta30 starting 11:49:07,665 INFO [org.jboss.as.naming] (MSC service thread 1-2) JBAS011802: Starting Naming Service 11:49:07,646 INFO [org.wildfly.extension.undertow] (MSC service thread 1-1) JBAS017502: Undertow 1.0.0.Beta30 starting 11:49:07,715 INFO [org.jboss.as.mail.extension] (MSC service thread 1-4) JBAS015400: Bound mail session [java:jboss/mail/Default] 11:49:07,716 INFO [org.jboss.as.connector.logging] (MSC service thread 1-4) JBAS010408: Starting JCA Subsystem (IronJacamar 1.1.2.Final) 11:49:07,725 INFO [org.jboss.as.connector.subsystems.datasources] (ServerService Thread Pool -- 28) JBAS010403: Deploying JDBC-compliant driver class org.h2.Driver (version 1.3) 11:49:07,775 INFO [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-1) JBAS010417: Started Driver service with driver-name = h2 11:49:07,947 INFO [org.wildfly.extension.undertow] (ServerService Thread Pool -- 49) JBAS017527: Creating file handler for path /usr/local/wildfly/welcome-content 11:49:07,978 INFO [org.wildfly.extension.undertow] (MSC service thread 1-3) JBAS017525: Started server default-server. 11:49:08,004 INFO [org.wildfly.extension.undertow] (MSC service thread 1-2) JBAS017531: Host default-host starting 11:49:08,497 INFO [org.wildfly.extension.undertow] (MSC service thread 1-4) JBAS017519: Undertow HTTP listener default listening on /127.0.0.1:8080 11:49:09,116 INFO [org.jboss.as.remoting] (MSC service thread 1-2) JBAS017100: Listening on 127.0.0.1:9999 11:49:09,147 INFO [org.jboss.as.server.deployment.scanner] (MSC service thread 1-1) JBAS015012: Started FileSystemDeploymentService for directory /usr/local/wildfly/standalone/deployments 11:49:09,248 INFO [org.jboss.ws.common.management] (MSC service thread 1-3) JBWS022052: Starting JBoss Web Services - Stack CXF Server 4.2.3.Final 11:49:09,310 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-4) JBAS010400: Bound data source [java:jboss/datasources/ExampleDS] 11:49:09,474 INFO [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http://127.0.0.1:9990/management 11:49:09,475 INFO [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://127.0.0.1:9990 11:49:09,475 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: WildFly 8.0.0.CR1 "WildFly" started in 10253ms - Started 184 of 232 services (78 services are lazy, passive or on-demand)ログはもう一カ所 /usr/local/wildfly/standalone/log にもあります。こっちがメインっぽいです。
listenしているポートを確認してみます
$ netstat -an | grep LISTEN | grep tcp tcp 0 0 127.0.0.1:9999 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:9990 0.0.0.0:* LISTEN tcp 0 0 :::22 :::* LISTEN tcp 0 0 ::1:25 :::* LISTEN $localhostしかlistenしてないのでこのままでいいかな。
WildFlyの管理ユーザを作ります
別に今すぐは使いませんが一応。
sudo -u wildfly /usr/local/wildfly/bin/add-user.sh [USERNAME] [PASSWORD]
Webの管理コンソールから設定状況を見てみます
手元の端末でトンネルを作ります
ssh [IP ADDRESS] -L 10080:localhost:80 -L 19990:localhost:9990
ここにアクセスするとトンネル経由でWebの管理コンソールにアクセス出来ます。ユーザ名とパスワードは先ほど入力した物を使います。
止めてみます
$ sudo service wildfly stop Stopping wildfly: [ OK ] $ ps -Af | grep java kyle 25222 24452 0 11:58 pts/0 00:00:00 grep java $問題なさげ。一応リブートしてシャットダウンスクリプトと起動スクリプトが走るか確認しておくとベターかも。
PostgreSQLを入れる
インストール
<![CDATA[ sudo yum install http://yum.postgresql.org/9.2/redhat/rhel-6-x86_64/pgdg-centos92-9.2-6.noarch.rpm sudo yum install postgresql92-server postgresql92-contrib sudo service postgresql-9.2 initdb sudo chkconfig postgresql-9.2 on ]]>
WildFlyから接続できるように認証方式を変更する
sudo -u postgres cp /var/lib/pgsql/9.2/data/pg_hba.conf /var/lib/pgsql/9.2/data/pg_hba.conf.bak sudo -u postgres sed -i -e "s/^host all all 127.0.0.1\/32 ident/host all all 127.0.0.1\/32 md5/" /var/lib/pgsql/9.2/data/pg_hba.conf
動かしてみる
$ sudo service postgresql-9.2 start Starting postgresql-9.2 service: [ OK ] $
Apacheを入れる
インストール
sudo yum install httpd sudo chkconfig httpd on
動かしてみる
$ sudo service httpd start Starting httpd: [ OK ] $
アクセスしてみる
普通に手元の端末のブラウザからアクセス可。
参考文献
- tarを展開するときパーミッション、所有者を一定にする - きれいさっぱり、逝くぜ!
- Linux:Linuxのadduserコマンドで新規ユーザを作成する | raining
- How to add user without /home - Ask Ubuntu
- Script to install JBoss Wildfly 8.x as service in Linux
- sudoでリダイレクトをしたいとき - Yuta.Kikuchiの日記
- ぽちネット-Linux備忘録-Hints&Tips-自作サービスをchkconfigに登録する方法
- さくらのVPS を使いはじめる 4 – Apache のインストールと初期設定 | アカベコマイリ
- WildFly 8.0.0.Alpha4でOracle 11g XEのデータソースを追加する - kagamihogeの日記
- Admin Guide - WildFly 8 - Project Documentation Editor
- Javaのシステムプロパティの設定と文字エンコーディングについて改めて見直してみた - PiyoPiyoDucky
Tags: linux
さくらVPSの初期設定をしてみる
TweetPosted on Tuesday Jan 21, 2014 at 06:43AM in Technology
環境
- さくらインターネット VPS 1G
- CentOS 6.5
何をするの?
- 一般ユーザを作る
- 作ったユーザの公開鍵を置く
- 作ったユーザがsudo出来るようにする
- sshのパスワード認証を無効化
- ssh以外のポートが空いてない事を確認
- iptablesでsshとhttp以外を遮断
- IPv6を無効化
接続まで
Webから申し込みをして5分ほどで、IPアドレスとrootアカウントのパスワードが書かれた仮登録完了メールが届くが、この時点ではまだ起動していないのでVPSコントロールパネルから起動してやらないといけない。さらにVPSコントロールパネルからリモートコンソールを開くとOSの起動ログが見える。リモートコンソールでログインプロンプトが表示されたのを確認してからsshで接続すると良い。
OSのアップデート
まあ一応ログインしたらすぐやっておく。やってみたけど特に何も更新はなかった。
yum update
ユーザを作る
面倒くさいけどsshでrootログイン出来るとか若干気持ち悪いのでやっておきましょう。こういう感じ
# adduser kyle # passwd kyle ユーザー kyle のパスワードを変更。 新しいパスワード: 新しいパスワードを再入力してください: passwd: 全ての認証トークンが正しく更新できました。 #終わったら作ったユーザでログインし直しましょう。
公開鍵を置く
こんな感じかと
<![CDATA[ cd mkdir .ssh chmod 700 .ssh cat > .ssh/authorized_keys << EOF [YOUR PUBLIC KEY HERE] EOF chmod 600 .ssh/authorized_keys ]]>実行するとこうなる
$ ls -ld .ssh drwx------ 2 kyle kyle 4096 1月 19 09:08 2014 .ssh $ ls -l .ssh 合計 4 -rw------- 1 kyle kyle 408 1月 19 09:08 2014 authorized_keys $
sudo出来るようにする
suしてvisudoを起動します
$ su - パスワード: # visudo起動したら一番下に以下を追加。面倒くさいので全部パスワード不要にする。
kyle ALL=(ALL) NOPASSWD: ALL確認してみよう
$ sudo whoami root $大丈夫そうですね
sshのパスワード認証を無効にする
日常的にブルートフォースアタック的なものが飛んでくる今日においては嫌な感じなので無効にしておきましょう
cd /etc/ssh sudo cp sshd_config sshd_config.bak sudo sed -i -e "s/^PasswordAuthentication yes/PasswordAuthentication no/" sshd_config変更したら再起動
sudo service sshd restart万が一入れなくなったらWebのリモートコンソールからログインしてなんとかしましょう。
空いてるポートを確認する
$ netstat -an | grep LISTEN | grep tcp tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 0 :::22 :::* LISTEN tcp 0 0 ::1:25 :::* LISTEN $
22と25だからsshとメールですかね。外に向けて空いてるのはsshだけだ。
ポートスキャンサービスを使って空いてるポートを確認する
25番が空いてるか閉じてるか手元の端末から叩いても分からない(そもそも25番向けの外向きパケットはほとんどのISPで遮断される?)し、念のためポートスキャンサービスを使って確かめてもらいます。
ここを使います。GRC | ShieldsUP! — Internet Vulnerability Profiling ここで問題なのがこのサービスは、そのサービスにアクセスしたIPアドレスに対してしかスキャンかけてくれない事ですね。まあしょうがない。ゆえに若干力技ですがsshを使ってsocksのトンネル(?)を使ってアクセスします。手元の端末で以下を叩くと手元の端末でsocksサーバが立ち上がります。Windowsでもputtyの設定でゴニョゴニョすればsocksサーバ立てられたはず。
ssh [YOUR VPS IP ADDRESS HERE] -D 1080こうすると手元の1080番にsocksサーバが立ち上がり、VPSを通じてWebアクセスができるようになります。socks用WebブラウザとしてはOperaが良い。OSのプロキシの設定いじらなくても独立した設定をアプリで持ってくれるので。こんな感じになります
Proceedっていうボタン押して遷移する画面でAll Service Portsを押すとポートスキャンが始まります
---------------------------------------------------------------------- GRC Port Authority Report created on UTC: 2014-01-19 at 00:55:26 Results from scan of ports: 0-1055 1 Ports Open 1055 Ports Closed 0 Ports Stealth --------------------- 1056 Ports Tested NO PORTS were found to be STEALTH. The port found to be OPEN was: 22 Other than what is listed above, all ports are CLOSED. TruStealth: FAILED - NOT all tested ports were STEALTH, - NO unsolicited packets were received, - A PING REPLY (ICMP Echo) WAS RECEIVED. ----------------------------------------------------------------------
開いてるのはsshだけですね。25番は127.0.0.1に対してしかlistenしてないから出てきません。
iptablesの設定
別にこのままでもいいのですが、PING返したくないし、一応念のためにiptablesの設定もします。sshとhttpだけ開けます。
sudo sh -c 'cat > /etc/sysconfig/iptables' <<EOF *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT COMMIT EOF sudo service iptables restart
この状態で再度ポートスキャンしてみるとこんな感じ
---------------------------------------------------------------------- GRC Port Authority Report created on UTC: 2014-01-19 at 04:32:40 Results from scan of ports: 0-1055 1 Ports Open 1 Ports Closed 1054 Ports Stealth --------------------- 1056 Ports Tested The port found to be OPEN was: 22 The port found to be CLOSED was: 80 Other than what is listed above, all ports are STEALTH. TruStealth: FAILED - NOT all tested ports were STEALTH, - NO unsolicited packets were received, - NO Ping reply (ICMP Echo) was received. ----------------------------------------------------------------------
IPv6の無効化
Apacheの設定とかで微妙にはまりそうな気配なので無効化しておく
sudo cp /etc/sysconfig/network /etc/sysconfig/network.bak sudo sed -i -e 's/NETWORKING_IPV6="yes"/NETWORKING_IPV6=no/' /etc/sysconfig/network echo 'options ipv6 disable=1' | sudo sh -c 'cat > /etc/modprobe.d/disable-ipv6.conf' sudo chkconfig ip6tables off
参考文献
- Linuxのお勉強(CentOSとApache):CentOSでユーザーを追加・削除する(LINUX) - livedoor Blog(ブログ)
- sedでファイルを置換する - より良い環境を求めて
- さくらVPSでセキュリティ関連の設定をする(ファイヤーウォール編) - モンテカットの開発日記
- yumでシステムのアップデート | hajichan.net technical version
- 開いているポートを確認するには - すがブロ
- iptablesの設定
- ファイアウォール(iptables)の設定
- CentOS - 立ち上げ直後のiptablesを設定する。 - Qiita [キータ]
- さくらVPSにおけるIPv6を無効化する - なぜにぷろぐらむ
- LinuxでIPv6を無効化する(意外と苦戦) - OpenGroove
- CentOS 6でIPv6を無効にするには « smilemark blog
Tags: linux
動かしてみる
TweetPosted on Tuesday Jan 21, 2014 at 06:40AM in JBatch
jbatch(JSR352)とはJavaEE7から入ったバッチフレームワークの規格です。WildFly8ではGlassFish4とは別の実装が使われています。すごく簡単なのをWildFly8で動かしてみます。
環境
- WildFly 8.0.0CR1
- Eclipse等々はここで設定した状態
CDIの設定をする
プロジェクトの設定を開いてProject Facetsを選びCDIにチェックを入れてOKを押します。
ジョブXMLファイルを作る
ジョブを起動すると、まずこのXMLファイルがロードされます。JSR352ではアプリ開発者はこのXMLファイルとartifactと呼ばれるクラス群を作る必要があります。まずXMLファイルが読まれ、ここに書かれた通りにartifactが呼び出されます。
作る場所はこのへん.画像では/src/main/javaの下になっていますが,XMLファイル等のJavaソース以外のものは/src/main/resourcesに置くのが望ましいです.war内の位置で言うとclasses/META-INFの下になります。このファイルの名前がバッチの名前になります。
内容はとりあえずこんな感じ。<?xml version="1.0" encoding="UTF-8"?> <job id="job001" version="1.0" xmlns="http://xmlns.jcp.org/xml/ns/javaee"> <step id="step001"> <batchlet ref="testBatchlet"/> </step> </job>
Batchletを作る
Batchletは簡単な処理を書くときに使います。バルク処理とかをやるときは、ここで紹介するBatchletではなく、chunk方式と呼ばれるartifactを使ったほうがよいです。作るクラス1つだけで簡単なのでここではBatchletを作ります。XMLファイルとartifactはCDIの名前でひも付けるので、作る場所はどこでも良いです。
package com.example; import javax.batch.api.AbstractBatchlet; import javax.inject.Named; @Named public class TestBatchlet extends AbstractBatchlet{ @Override public String process() throws Exception { System.out.println("Hello JSR352"); return "SUCCESS"; } }
Servletを作る
バッチを動かす際の起点にします。ブラウザでServletにGETを飛ばすとバッチが動き出す感じです。定時実行とかスケジュール実行がしたければEJBタイマでやることもできます。
package com.example; import java.io.IOException; import java.util.Properties; import javax.batch.runtime.BatchRuntime; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/TestServlet") public class TestServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { long executionId = BatchRuntime.getJobOperator().start("job001", new Properties()); response.getWriter().write("execution id: " + executionId); } }
動かしてみる
デプロイしたらブラウザでアクセスしてみましょう
動いているようです。それっぽいログも出ています
ジョブを実行するとDB等にかなり詳細な履歴が残せるのですが、WildFly8のデフォルトではインメモリデータベースに格納されるだけになっているようで、後から参照する方法とかは少し調べましたが不明です。DBに残すようにする設定の方法はまた別途調べる予定。
JobOperator#start()で返るのはexecutionIdといって、このIDを使って実行中のバッチを止めたり、途中で死んだバッチを再実行したりできます。バッチの実行ごとに採番されます。リロードすると数字がインクリメントされていきます。
Tags: jbatch
CLIでデータソースを定義する
TweetPosted on Tuesday Jan 21, 2014 at 06:37AM in Technology
環境
- WildFly 8.0.0CR1
- PostgreSQL 9.2.4
- postgresql-9.3-1100.jdbc41.jar
何をするの?
CLIからPostgreSQLのデータソースを定義してみます
JDBCドライバをデプロイ
方法1
WildFlyを展開したディレクトリ内の/standalone/deploymentsディレクトリにJDBCドライバを放り込むだけです。
方法2
[3]の下の方にPostgreSQLの例が書いてある。こっちの方が正規の手順っぽい。8.0.0.Finalだけどやってみる
資源を置く
kyle-no-MacBook:wildfly-8.0.0.Final kyle$ mkdir -p modules/org/postgresql/main kyle-no-MacBook:wildfly-8.0.0.Final kyle$ cd modules/org/postgresql/main kyle-no-MacBook:main kyle$ cp ~/Downloads/postgresql-9.3-1100.jdbc41.jar . kyle-no-MacBook:main kyle$ cat > module.xml << EOF > <?xml version="1.0" encoding="UTF-8"?> > <module xmlns="urn:jboss:module:1.0" name="org.postgresql"> > <resources> > <resource-root path="postgresql-9.3-1100.jdbc41.jar"/> > </resources> > <dependencies> > <module name="javax.api"/> > <module name="javax.transaction.api"/> > </dependencies> > </module> > EOF
(貼付け用)
<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.0" name="org.postgresql"> <resources> <resource-root path="postgresql-9.3-1100.jdbc41.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
jboss-cliを使って登録する
kyle-no-MacBook:main kyle$ ~/apps/wildfly-8.0.0.Final/bin/jboss-cli.sh --connect Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8 [standalone@localhost:9990 /] /subsystem=datasources/jdbc-driver=postgresql:add(driver-name=postgresql,driver-module-name=org.postgresql,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource) {"outcome" => "success"} [standalone@localhost:9990 /] ls subsystem=datasources data-source jdbc-driver xa-data-source 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","driver-class-name" => "org.h2.Driver","driver-major-version" => 1,"driver-minor-version" => 3,"jdbc-compliant" => true},{"driver-name" => "postgresql","deployment-name" => undefined,"driver-module-name" => "org.postgresql","module-slot" => "main","driver-datasource-class-name" => "","driver-xa-datasource-class-name" => "org.postgresql.xa.PGXADataSource","driver-class-name" => "org.postgresql.Driver","driver-major-version" => 9,"driver-minor-version" => 3,"jdbc-compliant" => false}] [standalone@localhost:9990 /]
データソースの定義
jboss-cliの起動と接続
$ ./jboss-cli.sh You are disconnected at the moment. Type 'connect' to connect to the server or 'help' for the list of supported commands. [disconnected /] connect [standalone@localhost:9990 /]
使用可能なJDBCドライバ一覧を表示
デプロイしたものが出てきていることを確認します
[standalone@localhost:9990 /] ls subsystem=datasources data-source jdbc-driver xa-data-source 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","driver-class-name" => "org.h2.Driver","driver-major-version" => 1,"driver-minor-version" => 3,"jdbc-compliant" => true},{"driver-name" => "postgresql-9.3-1100.jdbc41.jar","deployment-name" => "postgresql-9.3-1100.jdbc41.jar","driver-module-name" => undefined,"module-slot" => undefined,"driver-datasource-class-name" => undefined,"driver-xa-datasource-class-name" => undefined,"driver-class-name" => "org.postgresql.Driver","driver-major-version" => 9,"driver-minor-version" => 3,"jdbc-compliant" => false}] [standalone@localhost:9990 /]
データソースを追加
driver-nameはJDBCドライバのデプロイ方法によって変わってくる
- 方法1の場合、JDBCドライバのjarファイルの名前(postgresql-9.3-1100.jdbc41.jar)
- 方法2の場合、jboss-cliで指定した名前(postgresql)
data-source add \ --name=TestDS \ --driver-name=postgresql-9.3-1100.jdbc41.jar \ --connection-url=jdbc:postgresql://localhost:5432/testdb \ --jndi-name=java:jboss/jdbc/TestDS \ --user-name=postgres \ --password=***
接続のテスト
[standalone@localhost:9990 /] /subsystem=datasources/data-source=TestDS:test-connection-in-pool { "outcome" => "success", "result" => [true] } [standalone@localhost:9990 /]
データソースの情報を見る
[standalone@localhost:9990 /] /subsystem=datasources/data-source=TestDS:read-resource { "outcome" => "success", "result" => { "allocation-retry" => undefined, "allocation-retry-wait-millis" => undefined, "allow-multiple-users" => false, "background-validation" => undefined, "background-validation-millis" => undefined, "blocking-timeout-wait-millis" => undefined, "capacity-decrementer-class" => undefined, "capacity-decrementer-properties" => undefined, "capacity-incrementer-class" => undefined, "capacity-incrementer-properties" => undefined, "check-valid-connection-sql" => undefined, "connection-listener-class" => undefined, "connection-listener-property" => undefined, "connection-properties" => undefined, "connection-url" => "jdbc:postgresql://localhost:5432/testdb", "datasource-class" => undefined, "driver-class" => undefined, "driver-name" => "postgresql-9.3-1100.jdbc41.jar", "enabled" => true, "exception-sorter-class-name" => undefined, "exception-sorter-properties" => undefined, "flush-strategy" => undefined, "idle-timeout-minutes" => undefined, "initial-pool-size" => undefined, "jndi-name" => "java:jboss/jdbc/TestDS", "jta" => true, "max-pool-size" => undefined, "min-pool-size" => undefined, "new-connection-sql" => undefined, "password" => "***", "pool-prefill" => undefined, "pool-use-strict-min" => undefined, "prepared-statements-cache-size" => undefined, "query-timeout" => undefined, "reauth-plugin-class-name" => undefined, "reauth-plugin-properties" => undefined, "security-domain" => undefined, "set-tx-query-timeout" => false, "share-prepared-statements" => false, "spy" => false, "stale-connection-checker-class-name" => undefined, "stale-connection-checker-properties" => undefined, "track-statements" => "NOWARN", "transaction-isolation" => undefined, "url-delimiter" => undefined, "url-selector-strategy-class-name" => undefined, "use-ccm" => true, "use-fast-fail" => false, "use-java-context" => true, "use-try-lock" => undefined, "user-name" => "postgres", "valid-connection-checker-class-name" => undefined, "valid-connection-checker-properties" => undefined, "validate-on-match" => false, "statistics" => { "jdbc" => undefined, "pool" => undefined } } } [standalone@localhost:9990 /]
データソースの設定を変更する
connection-urlを変更してみる
[standalone@localhost:9990 /] /subsystem=datasources/data-source=TestDS:write-attribute(name=connection-url, value=jdbc:postgresql:\/\/localhost:5432\/testdb2) { "outcome" => "success", "response-headers" => { "operation-requires-reload" => true, "process-state" => "reload-required" } } [standalone@localhost:9990 /]
データソースを削除する
[standalone@localhost:9990 /] /subsystem=datasources/data-source=TestDS:remove { "outcome" => "success", "response-headers" => {"process-state" => "reload-required"} } [standalone@localhost:9990 /]
データソース一覧を表示する
[standalone@localhost:9990 /] ls /subsystem=datasources/data-source ArticlesDS ExampleDS PostgresqlDS TestDS [standalone@localhost:9990 /]
XAデータソースの定義
WildFly8.0.0.Finalでやってみた
普通のデータソースと異なりconnection-url表記は受け付けられないようだ。[5][6]を参考に
XAデータソースの追加
batch xa-data-source add \ --name=JBatchXADS \ --driver-name=postgresql \ --jndi-name=java:jboss/jdbc/JBatchXADS \ --user-name=postgres \ --password=*** /subsystem=datasources/xa-data-source="JBatchXADS"/xa-datasource-properties=ServerName:add(value="localhost") /subsystem=datasources/xa-data-source="JBatchXADS"/xa-datasource-properties=PortNumber:add(value="5432") /subsystem=datasources/xa-data-source="JBatchXADS"/xa-datasource-properties=DatabaseName:add(value="jbatch") run-batch
接続テスト
[standalone@localhost:9990 /] /:reload { "outcome" => "success", "result" => undefined } [standalone@localhost:9990 /] /subsystem=datasources/xa-data-source=JBatchXADS:test-connection-in-pool { "outcome" => "success", "result" => [true] }
read-resourceで情報を見てみると、何故かxa-data-source-propertiesで設定した値がundefinedとかになっているのだが、XMLファイルを見てみると値が入っているし、接続テストもOKなので気にしない事にする
接続の障害検知
check-valid-connection-sqlを設定
[8]を見ると「試験以降は valid-connection-checker-class-name と check-valid-connection-sql のどちらかは絶対指定するように」とあるので、設定してみる。例はxa-data-source
/subsystem=datasources/xa-data-source=TestDS:write-attribute(name=check-valid-connection-sql, value="SELECT 1")
background-validation-millisを設定
[9]を見ると接続チェックを定期的に行わせることもできるみたい。設定はこんな感じか
/subsystem=datasources/xa-data-source=TestDS:write-attribute(name=background-validation-millis, value=60000)
validate-on-matchを設定
DataSource#getConnection()実行時に接続チェックをするか否か。AS7/EAP6からはデフォルトfalseらしい
/subsystem=datasources/xa-data-source=TestDS:write-attribute(name=validate-on-match, value=true)
idle-timeout-minutesを設定
障害検知ではないけど。プールの中で使われてない接続を破棄する設定。デフォルト30分。60分に延ばしてみる
/subsystem=datasources/xa-data-source=TestDS:write-attribute(name=idle-timeout-minutes, value=60)
備考
“non-JDBC-compliant”
デプロイするとこういう文言が出力されるのがすごい気になる
18:06:10,463 INFO [org.jboss.as.connector.subsystems.datasources] (management-handler-thread - 3) JBAS010404: Deploying non-JDBC-compliant driver class org.postgresql.Driver (version 9.3) 18:06:10,464 INFO [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-2) JBAS010417: Started Driver service with driver-name = postgresql
参考文献
- CLI Recipes - JBoss AS 7.1 - Project Documentation Editor
- java - How to check datasource in JBoss? - Stack Overflow
- wildfly/quickstart · GitHub
- “non-JDBC-compliant”? - Community - JBoss
- WildFlyにXA DataSourceを登録する
- Creating XA Datasource from the CLI fails | Community
- JDBC XAデータソース - nekopの日記
- JBoss ASのデータソース設定 - nekopの日記
- JBoss ASのデータソース障害検知 - nekopの日記
Tags: wildfly