Java
今回はsynchronizedメソッドの話。「synchronizedが付いているメソッドは同時に実行されない」と思っていたら大まちがい。下記に4種類のコード例のうち、System.out.println()が排他的に実行されるのは2つだけ。 System.outする箇所にブレークポイントを設定…
前回(1回目)はサーブレットを例にスレッドセーフではないコードを考えてみたが、スレッドセーフではないことを目に見えるかたちで実証するのが難しかった。 今回はJava SEの環境で動かせるクラスでスレッドセーフではないことを実証してみる。まずは、カウン…
他人が書いたコードがマルチスレッド下で正しく動くかどうか検証するのは骨の折れる作業と実感する。テスト時になるべくバグが出やすくするコツとしてClient VMではなくServer VMで動かすとよいそうだ。ServerVMの方がClientVMにくらべてより最適化しようと…
書いてはいけないコードの例。アクセスカウント(requestCount)を表示するサーブレットを考える。サーブレット自体はシングルトンなので、ブラウザからアクセスするとrequestCountの値がインクリメントされ、正しく動くかのように見える。しかし、++のインク…
StrutsのActionやFormをJUnitでテストするには StrutsTestCase http://strutstestcase.sourceforge.net/ を使う。設定ファイルを置く場所は厄介。次のようにマニュアル通り記述しても public void setUp() throws Exception { super.setUp(); // コンテキス…
Mavenで決まっているディレクトリの構成を変えるのは公式サイトを見ても「推奨しない」だの「考え直せ」だの書かれているが、それでも変更しなければならない状況におちいることがあろうかと思います。例えば下図のような構成のプロジェクトで試しにMavenを…
Jenkinsの導入〜MavenやSonarとの連携方法までを紹介します。SubversionやGitとの連携は次回以降に紹介したいと思います。まずはJenkinsの準備。 http://jenkins-ci.org/ からWARファイルをダウンロードし、javaコマンドでサーバを起動します。 C:\root\usr\…
Javaソースコードのカバレッジツールを探していたらSonarというJavaソースコードのメトリクス収集ツールに行き当たりました。 これまでソースをWebで見れるようにするツール等は様々出回っていましたが、総合的にメトリクスを収集してくれるツールは、多くは…
Springフレームワークが提供するDI(Dependency Injection)を理解するためのサンプルプログラムを作りました。 『Spring3入門』の 第2章 SpringのDI を参考にしています。初版の第一刷を買ったせいか、それじゃ動かないだろ、というサンプルソースもあるが許…
例えばJDT Core ComponentのソースをCVSから取得する方法 C:\home\jdt-core>set CVSROOT=:pserver:anonymous@dev.eclipse.org:/cvsroot/eclipse C:\home\jdt-core>cvs login Logging in to :pserver:anonymous@dev.eclipse.org:2401/cvsroot/eclipse CVS pas…
Emacsでの生産性を格段に向上させるツール。便利すぎるのになぜ今までインストールしてなかったのか不思議。まずはgithubからYASnippetをzipでダウンロードする。 https://github.com/capitaomorte/yasnippetダウンロードしたら ~/.emacs.d/elisp 直下に解凍…
Senのインストールに関してまとめておく。 Java SenはJavaで書かれているのでJavaは必須だが、ここでは省略。 Antの準備 最近はもっぱらMavenばかり使ってたのでAnt入れてなかった...Apache Ant - Binary Distributions ここから apache-ant-1.8.3-bin.zip …
Javaのメソッド名や変数名はいやに長くなりがちだが、 upsert って単語があることを初めて知った。SMART!! 今まで真面目にinsertOrUpdateって長々と書いてたのがアホらしい。http://en.wikipedia.org/wiki/Upsert
PCをWindowsXPから64bit版Windows7に替えて以来、java/javacの起動が異様に遅くイライラしていたが・・・ Pleiades 付属のjava(32bit版)を使っていたことがどうも原因。Oracleのサイトから入手したWindows x64(64-bit)版に変更してからはそれなりのスピード…
気になるソースを見かけた。具体的にはこんな感じ。 try { Connection conn = DriverManager.getConnection(URL, USER, PASSWORD); String sql = "SELECT * FROM SOMETABLE WHERE ID = ?"; PreparedStatement ps = conn.prepareStatement(sql); ps.setString…