Tomcat7のmanagerロールとリロードアクション

Tomcat6までは

http://localhost:8080/manager/html/reload?path=/hogehoge

でリロードできてたのが、Tomcat7ではできなってた。


tomcat-users.xmlに定義するロールがmanagerがなくなって
manager-gui、manager-script、manager-jmx、manager-statusに細分かされてる。


リロード用URLで簡単リロードするのは、managerじゃなくて、manager-scriptロールを追加して

http://localhost:8080/manager/text/reload?path=/hogehoge

(managerの後がhtmlじゃなくてtext)とするとよいようだ。


リロードしようとして出てくる403 Access Deniedエラーページの解説が端的でわかりすかった
詳細はManager App HOW-TO
http://tomcat.apache.org/tomcat-7.0-doc/manager-howto.html


あとsysdeoのtomcatプラグインだと、これに対応されてないので
「このコンテキストをリロード」がうまく動かない。
何度もクリックするの手間なので、この機能使ってる人いないと思うけど。

Invokerサーブレット

最近知ったがTomcat7ではInvokerServletがなくなってるみたい
セキュリティ的に問題あるし、アノテーションも使えるのでもういらんしょってことかな

http://www.mail-archive.com/users@tomcat.apache.org/msg84546.html
http://www.mail-archive.com/users@tomcat.apache.org/msg79211.html
http://www.docjar.com/html/api/org/apache/catalina/servlets/InvokerServlet.java.html

たしか
Tomcat4のどこからかデフォルトでオフになって
Tomcat6では特権も付与しないと実行不可になって
Tomcat7では存在時代が抹消されたと

改行コード

http://ash.jp/code/return.htm

重複行を削除する処理をしてファイルを保存したのにファイルサイズが増えてしまうのなんでだろうと思ったら、元のファイルが改行コードLFだったのが、後のファイルはCR+LFで保存してた。Writer#write(....+"\n")とか書いてたのとPrintWriter#printlnを使った部分の違い。
あとEclipseの比較エディタでは改行コード違いのファイルを比較する場合は設定のCompare/PatchのIgnore white spaceをチェックすると改行コード違いでも比較できる。

Windows7のエアロスナップとエアロシェイクを無効にする

コントロール パネル
→コンピューターの簡単操作
→コンピューターでの作業に集中しやすくします
「ウィンドウが画面の端に移動されたときに自動的に整列されないようにします」をチェック

JFaceSnippetsのチェックアウト

http://wiki.eclipse.org/index.php/JFaceSnippets
CVS JFace code snippets
の Where can I get this? に書いている通り


Web上のコードをコピペしただけだとクラスが足りないことがあるので、CVSでプロジェクトごとチェックアウトすると楽
忘れたころにたびたび使うのでメモ

JavaのDNSキャッシュ

いままでそんなことなかったのだが、本日自作JavaアプリでUnknownHostExceptionがたびたび発生した。たぶんプロバイダ提供のDNSサーバが不調なのかなーという気がするのだが、はっきりしない。ちょっと調べてみたメモ。

OSのDNSキャッシュ

OS(のDNSゾルバ)はDNSキャッシュを持っている
DNSキャッシュはWindowsの場合、以下のコマンドで確認できる

ipconfig /displaydns キャッシュの一覧の表示
ipconfig /flushdns キャッシュのクリア

displaydnsしたときのTime To Liveというのがキャッシュを保持する時間(秒)

JavaDNSキャッシュ

また、JavaでもDNSキャッシュを持っている
キャッシュの保持時間の設定は、以下のセキュリティプロパティーで行う
設定ファイルは以下の場所にある。JREJDKで場所がJAVA_HOMEが違うので注意。


%JAVA_HOME%\lib\security\java.security


抜粋


# The Java-level namelookup cache policy for successful lookups:
#
# any negative value: caching forever
# any positive value: the number of seconds to cache an address for
# zero: do not cache
#
# default value is forever (FOREVER). For security reasons, this
# caching is made forever when a security manager is set. When a security
# manager is not set, the default behavior is to cache for 30 seconds.
#
# NOTE: setting this to anything other than the default value can have
# serious security implications. Do not set it unless
# you are sure you are not exposed to DNS spoofing attack.
#
#networkaddress.cache.ttl=-1

# The Java-level namelookup cache policy for failed lookups:
#
# any negative value: cache forever
# any positive value: the number of seconds to cache negative lookup results
# zero: do not cache
#
# In some Microsoft Windows networking environments that employ
# the WINS name service in addition to DNS, name service lookups
# that fail may take a noticeably long time to return (approx. 5 seconds).
# For this reason the default caching policy is to maintain these
# results for 10 seconds.
#
#
networkaddress.cache.negative.ttl=10

networkaddress.cache.ttlがキャッシュを保持する時間(秒)
デフォルトではコメントアウトされており、デフォルトの動作は無限(セキュリティーマネージャをセットした場合)、または30秒(セキュリティーマネージャをセットしてない場合)とのこと

networkaddress.cache.negative.ttlが名前解決に失敗した場合に、失敗情報を保持する時間(秒)
あんまり連続してOSに名前解決しにいっても、失敗しまくるだけなので、少し間をあけるのがよいらしい
デフォルトは10秒


また、java.securityファイルで設定する場合は、上記を使うが、コマンド行オプションで値を渡す場合は、代わりに sun.net.inetaddr.ttl sun.net.inetaddr.negative.ttl を使うらしい(ためしてない)。


参考
ネットワークのプロパティー(UTF-8)
http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/net/properties.html
URLConnectionのDNSキャッシュ
http://d.hatena.ne.jp/trash717/20070627/p1


とりあえず、自分の場合は、朝PCをつけてアプリ起動した後、夜消すまで、キャッシュしてるのが都合がいいので、上記のnetworkaddress.cache.ttlに-1を指定して無限キャッシュすることにした。