2014年9月17日水曜日

Mybatisを使う中でのTips (軽め

使っているライブラリのバージョンは、3.0.4です。
マニュアルをきちんと読めばわかる内容なので、自分用メモです。

IF文について


else はありません。
比較演算子は、 != か、 == です
ELSEを使いたければ、chooseを。

例) Order Byを可変にする例

OEDER BY
<if test="sortId != null and sortId!=''">
  ${sortId} ${sortType}
</if>
<if test="sortId == null or sortId == ''">
  COLA ASC
  ,COLB DESC
</if>

別途定義しているSQLを利用する方法


定義:

<sql id = "commonQuery">
SELECT 1
</sql>

呼び出し

<include refid="commonQuery"/>


2014年9月16日火曜日

MySQLでサブクエリでUPDATE

以外と便利です。ただ、方言なので、ANSI的なSQLとは違います。


UPDATE `tableA` r,
    (SELECT id,c.hoge
    FROM `tableA` r
       JOIN tableB e ON r.aa = e.aa
       JOIN tableC c ON c.bb = e.bb) x
SET
r.hoge = x.hoge
WHERE
r.id = x.id;

2014年9月12日金曜日

サーバーOSのシャットダウン時にtomcatが正常にシャットダウンしない件

仮想環境で新たにアプリが動作するサーバー環境を作成したところ、
OSのシャットダウン時にTomcatが正しく終了せず、OSが終了できなくなってしまいました。

色々と調べたところ、解消したので経緯を残しておきます。


事象

サーバOS上で、shutdown -h nowを行うと、tomcatの終了スクリプトで待ち状態。そのうち
UnknownHostExceptionを出して、うんともすんともいかなくなる。


java.net.UnknownHostException: hostname: hostname
    at java.net.InetAddress.getLocalHost(InetAddress.java:1360)
    at org.apache.jk.common.ChannelSocket.unLockSocket(ChannelSocket.java:490)
    at org.apache.jk.common.ChannelSocket.pause(ChannelSocket.java:288)
    at org.apache.jk.server.JkMain.pause(JkMain.java:726)
    at org.apache.jk.server.JkCoyoteHandler.pause(JkCoyoteHandler.java:153)
    at org.apache.catalina.connector.Connector.pause(Connector.java:1037)
    at org.apache.catalina.core.StandardService.stop(StandardService.java:578)
    at org.apache.catalina.core.StandardServer.stop(StandardServer.java:788)
    at org.apache.catalina.startup.Catalina.stop(Catalina.java:662)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)


結果

ホスト名が原因ではなく、tomcatのサービスが正しくインストールされていなかったため。

過程

・ホスト名の解決
 /etc/hostsに、hostnameを書いていなかったので、書きました。

しかし、ダメ。

・シャットダウンの詳細確認

きちんと動いているサーバーもあるので、シャットダウンの時の内容を比較。
すると、tomcatの終了順が違う事がわかりました。

終了順をさらに調べていくと、以下な感じ
cd /etc/rc.d

【OKケース】

[root@host rc.d]# ls -l -R | grep tomcat
lrwxrwxrwx  1 16  9月 12 19:52 2014 K15tomcat -> ../init.d/tomcat
lrwxrwxrwx  1 16  9月 12 19:52 2014 K15tomcat -> ../init.d/tomcat
lrwxrwxrwx  1 16  9月 12 19:52 2014 S80tomcat -> ../init.d/tomcat
lrwxrwxrwx  1 16  9月 12 19:52 2014 S80tomcat -> ../init.d/tomcat
lrwxrwxrwx  1 16  9月 12 19:52 2014 S80tomcat -> ../init.d/tomcat
lrwxrwxrwx  1 16  9月 12 19:52 2014 S80tomcat -> ../init.d/tomcat
lrwxrwxrwx  1 16  9月 12 19:52 2014 K15tomcat -> ../init.d/tomcat
【NGケース】

[root@host rc.d]# ls -l -R | grep tomcat
lrwxrwxrwx  1 16  9月 12 19:52 2014 S80tomcat -> ../init.d/tomcat
lrwxrwxrwx  1 16  9月 12 19:52 2014 S80tomcat -> ../init.d/tomcat
lrwxrwxrwx  1 16  9月 12 19:52 2014 S80tomcat -> ../init.d/tomcat
lrwxrwxrwx  1 16  9月 12 19:52 2014 S80tomcat -> ../init.d/tomcat
終了スクリプトがない・・・


というわけで、


chkconfig --del tomcat
chkconfig --add tomcat
chkconfig tomcat on


を実施し、きちんと生成されて、正しくシャットダウンできる事が確認できました。

インストールに失敗したのかもしれません・・・


2014年9月9日火曜日

CentOS6.5 + mod_mono で起動時にエラー「Failed to connect to mod-mono-server after several attempts to spawn the process.」

いつもの通りCentOS環境でmod_monoをソースからインストールして起動したところ
「Failed to connect to mod-mono-server after several attempts to spawn the process.」
のエラーが出てしまい、対処をしたので手順をメモしておきます。

概略

  1. ソースからmod_monoをインストール
  2. /testエイリアスを作成し、mod_monoのサンプルサイトへアクセス
  3. 503エラーとなったので、/var/log/httpd/error_log を参照したところ、上記のエラー

原因

SELINUXが標準でインストールされ、稼働していたためでした。

SELINUUXの動作状況確認


#getenforce

enforcing : 有効 , disabled : 無効




SELINUXの無効化設定


/etc/selinux/config
SELINUX=disabled


サーバー再起動で、完了です。