More than 1 year has passed since last update.

発表

LT第一弾

■基本のキ

ここ数年の業務で気になったこと

(新人の様なレベルの低い話で、面白くないことですが)

その一

業界経験が数年はある人なのに、クローズ処理が出来ていない。

例えば、DBやファイルをOPENした時に、例外が発生しても

必ずクローズするようなコーディングをしていない。

これは、非常にまずい。

(個人的には、自分の会社の人が、やっていたら

恥ずかしいと思ってしまう。)

このリソース解放のケースでは、次の2つの事例が、有名です。

それは、岡崎図書館事件とアメリカの航空会社のシステム障害です。

岡崎図書館での(三xxxxx株式会社による)

図書検索プログラムでは、DBセッションをクローズせずに

ASPセッションがタイムアウトするまでの間(620秒位

閉じられることなく(使いもしないのに)占有されていました。

その間に新しい閲覧者(ブラウザが)接続してくると

次々新しいDB接続が確保され、その最大数に達すると、

それ以上のアクセスを受付けなくなってしまう。

つまり、ASPがタイムアウトで勝手に閉じてくれることを

期待していたわけです。

あまりよろしくは無いが、webで公開せずに

館内端末のみをクライアントとしていたならば

この問題は起きなかったのです。

(無駄にセッションを保持するのは、リソースの無駄遣いなので

どちらにしても良くないが。。。)

こんなことが、自社で起こったら、もうxxxx社員とは

口外できないです。恥ずかしすぎます。

この件については、これだけではなく、問題山盛りですが省略します。

岡崎図書館HP大量アクセス事件について

http://p9.hatenablog.com/entry/20100822/1282405120

専門家(高木浩光氏)の分析

http://takagi-hiromitsu.jp/diary/20100821.html


もう一つのアメリカの航空会社では、数千人が足止めとなり

最終的に数十万ドル(数千万円)の損害が出た。

(バグの内容については、少し同情の余地があり

技術的に素人とまでは言えないミスではあります。)

以下、本のネタばれ注意!!

世界を股にかける数十億ドル規模の巨大航空会社をストップさせたバグ

http://www.gesource.jp/weblog/?p=682

どうですか?

分かりますか?

package com.example.cf.flightsearch;


public class FlightSearch implements SessionBean {
private MonitoredDataSource connectionPool;
private List lookupByCity() throws SQLException RemoteException {
Connection conn = null;
Statement stmt = null;
try {
conn = connectionPool.getConnection();
stmt = conn.createStatement();
// 検索のロジックを実行して、
// 結果のリストを返す
} finally {
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
}
}
}

この本に事例が載っています。

https://www.amazon.co.jp/Release-%E6%9C%AC%E7%95%AA%E7%94%A8%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E8%A3%BD%E5%93%81%E3%81%AE%E8%A8%AD%E8%A8%88%E3%81%A8%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AB-Michael-T-Nygard/dp/4274067491

つづき

http://qiita.com/zeal1483/items/2524c69dfcab29f13636