ご注意ください

  • 当ブログのコメントやトラックバックに、アカウントハックサイトや、そのようなサイトへリダイレクト(転送)される可能性が高いサイトへのリンクが時々貼られているようです。
    そのようなサイトへのリンクが貼られたコメント・トラックバックは、見つけ次第削除・禁止ワード登録していますが、今後も危険なサイトへのリンクが貼られる可能性がありますので、安易にリンク先へ飛ばないよう充分ご注意ください。

オンラインゲーム関連

著作権表示

  • 当ブログに記載されている
    会社名・製品名・システム名などは、
    各社の登録商標、もしくは商標です。

    当ブログ上の文章・写真・画像の
    無断転載、無断転用、直リンクなどは
    行わないでください。

    (C) 1998-2016 Vertex.
    (C) 2002-2016 SQUARE ENIX CO., LTD.
    (C) CAPCOM CO., LTD. 2007, 2016

    All Rights Reserved.
無料ブログはココログ

[Tomcat] Cadaverを使ってみる Part.3

Part.2から実に2年3ヶ月ぶり。

今回、Cadaver を使うにあたって Proxy を通す必要が出てきたので、Proxy の設定方法をメモメモ。

Cadaver で Proxy を設定するには、ホームディレクトリに .cadaverrc というファイルを作り、そこに Proxy サーバを記述すればよい。

$ cat ~/.cadaverrc
set proxy proxy.server.com
set proxy-port 8080

これだけ。

しっかし、2年3ヶ月も経っているので、久しぶりの Cadaver にちょっと手こずりました。9割以上忘れていたもんなぁ…。

[Java] PermGen space

Hibernateを使った開発をしていると、たぶん一度はお目にかかると思うエラー。

java.lang.OutOfMemoryError: PermGen space

チェック → 問題発見 → 修正 → デプロイ → チェック という作業を延々とやっていると、たまに出てくるエラー。これが出ると、Tomcatを再起動しないと何もできなくなる・・・。

しかし、このエラーを回避する方法があった。完全に回避できるかどうかはわからないけど、今のところエラーが出なくなったので回避できたものとしておく(笑)

早い話が、

-XX:MaxPermSize=256m

というパラメータを、Tomcat起動時に渡してあげればいいみたい。この例だと、指定したサイズは256MB。この辺のサイズは、環境によって合わせるべし。

一応、マシンの物理メモリのおよそ50%から70%の間くらいが望ましいらしい。今回は512MBのメモリを積んだマシンだったので、半分の256MBを指定。

あとは、環境変数にセットしておくのも手かも?その場合は

export CATALINA_OPTS="-XX:MaxPermSize=256m"

でよいと思われる。

[Tomcat] Cadaverを使ってみる Part.2

昨日に続いて、今日は Cadaver を使ったファイル送受信シェルの作成方法などをメモメモ。

Cadaver をインストールし、自動ログインファイルの作成も終わったら、次はファイル送受信シェルの作成。パラメータで処理モード、リモートマシン、ファイル名を指定すれば、Cadaver を使ってファイルを送受信してくれる、という簡単なシェルが作れればOK。あ、一応ローカルディレクトリも指定できるようにしようかな。

ということで作ってみたのが、以下のようなシェル。

#!/bin/sh

if [ $# == 4 ]; then
  cd $4
  /usr/local/cadaver/cadaver $2 << EOF
  $1 $3
  quit
EOF
  exit 0
fi
echo "usage: file_sdrv.sh mode remote-url file-name local-dir"
exit 9

パラメータで、処理モード(put/get)、リモートマシンのURL、送受信するファイル名、ローカルディレクトリ(送信するファイルがある場所、もしくは受信するファイルを置く場所)を指定し、パラメータの数があっていれば処理を実行するだけのシェル。

パラメータの文字列チェックなどは一切なし。超簡易版ということで(笑)

一応、処理モードに 'delete' を指定すると、パラメータで指定したファイルをリモートマシンから削除することもできました。'ls' を指定すれば、指定ファイルが存在するかどうかも確認できるかもしれません。

あとはこのシェルの実行結果をファイルにリダイレクトして出力すれば、上位アプリからそのファイルを参照して送受信が成功したか失敗したかの判断ができます。ということで、ある程度の汎用性はある・・・のかな?


ちなみに、シェルで実行結果を判断するには・・・。

#!/bin/sh

if [ $# == 4 ]; then
  LOG_FILE="$3_cadaver.log"

  ./file_sdrv.sh $1 $2 $3 $4 > $LOG_FILE

  RETURN=`grep succeeded $LOG_FILE | wc -l`

  if [ "$RETURN" == 1 ]; then
    echo "$3 の $1 が完了しました。"
    rm -f $LOG_FILE
    exit 0
  else
    echo "$3 の $1 が失敗しました。"
    rm -f $LOG_FILE
    exit 9
  fi
fi
echo "usage: backup_tool.sh mode(put/get) remote-url file-name local-dir"
exit 9

こんな感じでしょうか・・・。

[Tomcat] Cadaverを使ってみる

WebDAVを使ってファイル送受信を行うツールを作成してみようと思ったのが少し前。しかし、調べてみると面倒そう。もっと手軽にできる方法はないものかと探していたら、CadaverというWebDAVクライアントがあることを知った。

このCadaver、FTPクライアントのように、処理コマンドをシェルで渡してあげるだけで、一連の処理ができるという優れものらしい。

そうと聞いたら(見たら)使ってみるしかない。さっそくダウンロードしてインストールしてみた。

まずはcadaverのダウンロード。

http://www.webdav.org/cadaver/から最新版をダウンロードします。

FTPでもsambaでも何でもいいので、インストールするマシンに転送し、解凍。

$ tar zxvf cadaver-0.22.5.tar.gz

コンパイル。

$ ./Configure
$ make

そして実行ファイルだけを /usr/local/cadaver にコピー。

# mkdir /usr/local/cadaver
# cp -a cadaver /usr/local/cadaver/cadaver

cadaverの実行ファイルを置いたディレクトリにパスを通して、とりあえずは疎通テスト。192.168.0.120にあるWebDAVサーバに接続してlsコマンドを実行してみました。

$ cadaver http://192.168.0.120/webdav/
Authentication required for Tomcat Supported Realm on server `192.168.0.120':
Username: username
Password:
dav:/webdav/> ls
Listing collection `/webdav/': succeeded.
Coll:   index.html                          2401   5月 26  2004
        tomcat-power.gif                    2324   5月 26  2004
        tomcat.gif                          1934   5月 26  2004
dav:/webdav/> quit
Connection to `192.168.0.120' closed.

どうやらちゃんと使えるようです。

続いて、自動ログインに対応させるための設定を行います。

ユーザーのホームディレクトリに .netrc というファイルを作成し、マシン情報を登録しておくだけでOKらしい。早速作成。

$ vi ~/.netrc
machine 192.168.0.120 login username password password
machine 192.168.0.121 login webdav password webdav
machine WebDAV-server login wd000100 password abcdefg

よーするに、machine [マシン名orIP] login [ユーザー名] password [ユーザーパスワード] を書いておけばいいようだ。ちなみに、「machine [マシン名orIP]」の部分を default にすると、その行に書いた情報がデフォルトで使われるようになる。ただし、defaultは一番最後の行に書かないと、default行以降は読み飛ばされてしまうので注意。

もう一度 Cadaver で接続してみると、今度はユーザー名とパスワードを聞かれることなくログインできた。

$ cadaver http://192.168.0.120/webdav/
dav:/webdav/>

これでインストールと設定が完了。さて、ではファイル送受信するツールのようなものをシェルで作成・・・するのは、次回 Part.2 にて。

[Tomcat] デプロイしたWARファイルを展開

サーバマシンにTomcatをインストールしてWARファイルをデプロイしたときは、WARファイルが自動で展開されていたのに、普通のPCにLinuxを入れてTomcatをインストールしてWARファイルをデプロイしても、なぜか展開されずにWARファイルのまま実行している・・・。そして、Tomcatをリスタートさせると、WARファイルを手動で消してからまたデプロイしないと動いてくれない、なんて状況になっていました。

どうやらデプロイしたWARファイルを展開するかどうか、Tomcat起動・再起動時に自動でデプロイするかどうか、を設定する項目があるということで、さっそく調べてみました。

すると、何のことはない、$TOMCAT_HOME/conf/server.xmlのHostタグを書き換えればいいだけでした。

具体的には、以下のような感じで設定があります。

 <Host name="localhost" debug="0" appBase="webapps"
  unpackWARs="false" autoDeploy="true"
  xmlValidation="false" xmlNamespaceAware="false">

ここの、unpackWARsの値をtrueにしてあげると、デプロイしたときにWARファイルを展開してくれるようになります。

[Tomcat] WebDAVを使う Part.2

昨日は断念したApache制御のWebDAVを試すべく、今一度立ち上がりました(笑)

昨日より突っ込んで情報を集めてみると、Apacheとの連携をさせている場合、Tomcat制御下に置くディレクトリを指定しているファイルがあるらしい。ディレクトリを指定しているとすれば・・・Apacheのconfフォルダに新規追加した workers2.properties というファイルだったはず!早速そのファイルを開いてみると、
# cat /usr/local/apache2/conf/workers2.properties
[channel.socket:localhost:8009]
[shm:]
disabled=1
[uri:/*]

ありました、urlという指定が、どうやらTomcat制御下に置かれるディレクトリを指定している様子。とりあえずマネージャー画面と、作成中のアプリだけがTomcatで動いてくれればいいので、以下のように設定してみました。
[channel.socket:localhost:8009]
[shm:]
disabled=1
[uri:/manager/*]
[uri:/APP_HOME1/*]
[uri:/APP_HOME2/*]

ApacheとTomcatを再起動してみると・・・マネージャー画面とアプリケーションは問題なくTomcatで動き、Tomcat経由のWebDAVは「アクセス権限がありません」ということで、動かなくなりました。どうやら、これでApache制御下のWebDAVが動くようになりそうです。

[Tomcat] WebDAVを使う

ファイルのやり取りをするために、TomcatサーバにWebDAVを入れることになりました。管理のしやすさから、Apacheから制御するWebDAVがいいのではないか、と言われたので、Apache制御でのWebDAV導入に挑戦してみました。

まずは、WebDAVを使うためにApacheをコンパイルし直します。
# ./configure --enable-suexec --with-suexec-caller=apache --with-suexec-docroot=/var/www --enable-ssl --enable-dav=yes --enable-dav-fs=yes
# make
# make install

そして、WebDAV用にディレクトリを作ります。
# mkdir /home/dav
# chown nobody.nobody /home/dav
# mkdir /usr/local/apache2/var/lock
# chown nobody.nobody /usr/local/apache2/var/lock

次に、httpd.confに設定を追記します。
Alias /dav "/home/dav"
<Location /dav>
  DAV on
</Location>
DAVLockDB /usr/local/apache2/var/lock

これでApacheを再起動すればOKらしいのですが・・・再起動してもつながりません。試しに、Webブラウザでアクセスしてみると、Tomcatのエラー画面が・・・!?

どうやら、Apache+Tomcatで動かしていると、Apache制御のWebDAVはうまく使えない様子(使う方法はあるかもしれませんが、そこまで調べていません(苦笑))。
しょうがないので、時間もないことですし、Tomcat制御でWebDAVを動かしてしまおうという話になり、さっそく情報収集。

・・・5分もしないうちに、こんな記事を発見。え・・・Tomcatにはもともとついてるの?(笑)
そう言えば、マネージャー画面でWebDAVって文字を見かけたような・・・。ということで、マネージャー画面を開いてみると、アプリケーションの一番下にありました、WebDAV。開いてみると、ディレクトリが見えます。早速ネットワークプレースに追加してみると、何の問題もなくつながりました。ポカーン(´Д`)

何か、とても無駄な時間を過ごしたような気がするのは気のせい、ということにしておいて、脱力感は200%突破です。でも、無事動いてよかった・・・のかな。

[Tomcat] Broken Pipeで致命的エラー

うーん、100%出力されるエラー、どうしていいかわからず・・・。

2006/09/15 15:31:47 org.apache.jk.server.JkCoyoteHandler action
致命的: Error in action code
java.net.SocketException: Broken pipe
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
    at org.apache.jk.common.ChannelSocket.send(ChannelSocket.java:446)
    at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:654)
    at org.apache.jk.server.JkCoyoteHandler.action(JkCoyoteHandler.java:444)
    at org.apache.coyote.Response.action(Response.java:183)
    at org.apache.coyote.Response.finish(Response.java:305)
    at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:301)
    at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:372)
    at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:673)
    at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:607)
    at org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:786)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:644)
    at java.lang.Thread.run(Thread.java:595)
2006/09/15 15:31:47 org.apache.jk.common.HandlerRequest invoke
情報: Unknown message 0

とある一覧表示のページに「詳細」ボタンを設け、その詳細ボタンが押されると、DBから詳細情報を読み出して別ウィンドウに表示する仕組みを作ったのですが・・・この別ウィンドウを閉じると、上記のような致命的エラーが出てしまう・・・。

ちょっとネットで調べてみると、IEに原因があるかもしれません、との情報が。試しにOperaで同じ操作をしてみると、Operaでは上記エラーが出ない。さらに謎だ~(;´Д`)

ひとまずこの件は保留にするので、忘れないようにメモメモφ(..)
フォト
2017年5月
  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      

最近のトラックバック