JavaEEの開発でアプリケーションサーバーとしてglassfishを使っています。
今回、CentOS(ver6.6)に立てる機会があったので、そのネタを共有したいと思います。
Contents
経緯
基本、いつもはローカルで開発して、Gitで共有リポジトリにプッシュしています。
共有リポジトリはCentOSですが、コミットと同時にJenkinsでビルドし、テストまで行っています。
しかし、DBのテストの場合、当然DBが見えないとテストが行えません。
glassfish上でJavaのプログラムを動かす場合、DBの情報もglassfishに格納されているのでglassfishを立てないとDBのテストができません。
そこで、CentOS上にglassfishを立てる必要性がでてきました。
DBのテストに関してはarquillianを使っているので同時にarquillianの設定もする必要があります。
※下記一部を除きすべてroot権限で行います。なお現状のversionは4.1です。
CetnOSをglassfish上にインストール
1 2 3 4 5 |
wget http://download.java.net/glassfish/4.1/release/glassfish-4.1.zip 解凍→移動 unzip glassfish-4.1.zip mv glassfish4 /usr/local/ |
ポートなどはディフォルトで
8080 HTTP
8181 HTTPS
4848 Administration
です。
変更したい場合は下記ファイルの
1 2 3 |
vim /usr/local/glassfish4/glassfish/domains/domain1/config/domain.xml <network-listener port="8080" protocol="http-listener-1" transport="tcp" name="http-listener-1" thread-pool="http-thread-pool"></network-listener> |
この部分を修正するようにしましょう。
起動
/usr/local/glassfish4/glassfish/bin/asadmin start-domain
再起動
/usr/local/glassfish4/glassfish/bin/asadmin restart-domain
停止
/usr/local/glassfish4/glassfish/bin/asadmin stop-domain
が正常に行われていればひとまずOKです。
glassfishユーザー設定
glassfishユーザーを作成し、権限を変えます。
1 2 3 |
chown -R glassfish:glassfish ./glassfish4/ su - glassfish /usr/local/glassfish4/glassfish/bin/asadmin start-domain |
で無事に起動することを確認
serviceコマンドでの実行(centOS7以降はいらないかも)
起動コマンドをいちいち見に行くのが大変なのでserviceコマンドから実行できるようにします。
1 2 |
cd /etc/init.d/ vim glassfish |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
#!/bin/sh # Provides: glassfish # Required-Start: $local_fs $remote_fs $network # Required-Stop: $local_fs $remote_fs $network # Default-Start:3 4 5 # Default-Stop: 0 1 2 6 # Short-Description: start and stop glassfish # END INIT INFO # Source function library. . /etc/rc.d/init.d/functions if [ -f /etc/sysconfig/glassfish ]; then . /etc/sysconfig/glassfish fi prog=glassfish domain=domain1 ASADMIN="/usr/local/glassfish4/bin/asadmin" START_OP="start-domain" STOP_OP="stop-domain" RESTART_OP="restart-domain" DOMAIN_DIR="/usr/local/glassfish4/glassfish/domains" DOMAIN_ARGS="--domaindir ${DOMAIN_DIR} ${domain}" lockfile=${LOCKFILE-/var/lock/subsys/glassfish} pidfile=${PIDFILE-/var/run/glassfish.pid} SLEEPMSEC=100000 RETVAL=0 start() { echo -n $"Starting $prog: " daemon --user glassfish --pidfile=${pidfile} ${ASADMIN} ${START_OP} ${DOMAIN_ARGS} RETVAL=$? echo [ $RETVAL = 0 ] && touch ${lockfile} && cp ${DOMAIN_DIR}/${domain}/config/pid ${pidfile} return $RETVAL } stop() { echo -n $"Stopping $prog: " ${ASADMIN} ${STOP_OP} ${DOMAIN_ARGS} RETVAL=$? echo [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile} } restart() { echo -n $"Restarting $prog: " ${ASADMIN} ${RESTART_OP} ${DOMAIN_ARGS} RETVAL=$? echo } rh_status() { status -p ${pidfile} ${prog} } # See how we were called. case "$1" in start) rh_status >/dev/null 2>&1 && exit 0 start ;; stop) stop ;; status) rh_status RETVAL=$? ;; restart) restart ;; *) echo $"Usage: $prog {start|stop|restart|status|help}" RETVAL=2 esac |
保存後、実行権限を付与
chmod +x glassfish
service glassfish (start|restart|stop) で起動すればOkです。
※下記エラーが表示される場合
glassfish を起動中: /usr/local/glassfish4/bin/asadmin: line 52: exec: java: not found
Javaが見えていないらしいのでjavaの実行パスを直で記述
1 2 |
which java /usr/local/src/jdk1.8.0_25/bin/java |
なので
vim /usr/local/glassfish4/bin/asadmin
JAVAの部分を2か所コメントアウトしパスを修正
1 2 |
#JAVA=java JAVA="/usr/local/src/jdk1.8.0_25/bin/java" |
1 2 |
#JAVA=${AS_JAVA}/bin/java JAVA="/usr/local/src/jdk1.8.0_25/bin/java" |
管理画面からログイン
この状態だとまだ管理画面からログインできるようにはなっていません。
管理画面からユーザー:パスワードを入力してログインするには下記の設定が必要です。
パスワード設定
/usr/local/glassfish4/glassfish/bin/asadmin change-admin-password
下記画面がでてきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Enter admin user name [default: admin]> ←空で入力(なぜかユーザーを入れると入らない。) Enter the admin password> ←defaultのパスワードを入力最初は空なので何もせずに入力 Enter the new admin password> ←新パスワードを入力 Enter the new admin password again> ←新パスワードを入力 一度再起動(ストップ後→再スタート) service glassfish restart 下記は管理画面に入るための設定 /usr/local/glassfish4/glassfish/bin/asadmin login Enter admin user name [Enter to accept default]> admin Enter admin password> ←パスワードを入力 |
メッセージ
1 2 3 4 5 6 7 |
Login information relevant to admin user name [admin] for host [localhost] and admin port [4848] stored at [/root/.gfclient/pass] successfully. Make sure that this file remains protected. Information stored in this file will be used by administration commands to manage associated domain. Command login executed successfully. /usr/local/glassfish4/glassfish/bin/asadmin enable-secure-admin service glassfish restart |
この状態でhttp://ドメイン:4848/にアクセスすると管理画面が開く。(信頼されない証明書うんぬんがでるが無視してアクセス)
ユーザー:パスワードを入力すればOK
glassfishからDBへの接続
基本的に、glassfishでDB接続(以前書いたエントリー)
のままでOK。
注意点としてはMySQLのドライバーが必要
ここよりmysql-connector-java-5.1.23.jarをダウンロード
http://dev.mysql.com/downloads/connector/j/
/usr/local/glassfish4/glassfish/lib/mysql-connector-java-5.1.23.jar に配置し、
管理画面からconfiguration→defaultconfig→JVMsetting→PathSettingの
NativeLibraryPathSuffixにmysqlのフルパスを入力(キャプチャ画像参考)
Jenkinsからの起動確認
sercure-admin状態のままだと、
com.sun.jersey.api.container.ContainerException: [status: REDIRECTION reason: Found]
というエラーがでてしまい、テストが通らない。そこで下記のように設定
1 2 3 |
/usr/local/glassfish4/glassfish/bin/asadmin disable-secure-admin service glassfish restart |
(※ただし、こうすると管理画面からアクセスできなくなるので注意。)
arqullianの設定ファイルを下記のように設定(パスは /src/test/resources/arquillian.xml )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?xml version="1.0"?> <arquillian xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://jboss.org/schema/arquillian" xsi:schemaLocation="http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd"> <group qualifier="Grid" default="true"> <container qualifier="remote-gf1" default="true" > <configuration> <property name="adminPort">4848</property> <property name="adminHost">IPアドレス</property> <property name="adminUser">ユーザー名</property> <property name="adminPassword">パスワード</property> <property name="adminHttps">false</property> <property name="serverHttps">false</property> </configuration> </container> </group> </arquillian> |
jenkinsからビルドするか、pom.xmlのあるディレクトリでmvn testで無事実行されればOK。
Java EE 7 を試すために CentOS に GlassFish をインストール
GlassFish管理コンソールのリモート接続
Arquillian with managed glassfish works under windows crashes under linux
Glassfish v4をCentOS6.4へインストール