Java

スレッドセーフではないコード(4回目)

今回はsynchronizedメソッドの話。「synchronizedが付いているメソッドは同時に実行されない」と思っていたら大まちがい。下記に4種類のコード例のうち、System.out.println()が排他的に実行されるのは2つだけ。 System.outする箇所にブレークポイントを設定…

スレッドセーフではないコード(2回目)

前回(1回目)はサーブレットを例にスレッドセーフではないコードを考えてみたが、スレッドセーフではないことを目に見えるかたちで実証するのが難しかった。 今回はJava SEの環境で動かせるクラスでスレッドセーフではないことを実証してみる。まずは、カウン…

スレッドセーフではないコード(3回目)

他人が書いたコードがマルチスレッド下で正しく動くかどうか検証するのは骨の折れる作業と実感する。テスト時になるべくバグが出やすくするコツとしてClient VMではなくServer VMで動かすとよいそうだ。ServerVMの方がClientVMにくらべてより最適化しようと…

スレッドセーフではないコード(1回目)

書いてはいけないコードの例。アクセスカウント(requestCount)を表示するサーブレットを考える。サーブレット自体はシングルトンなので、ブラウザからアクセスするとrequestCountの値がインクリメントされ、正しく動くかのように見える。しかし、++のインク…

今さらながらStruts1系のActionやFormをJUnitでテストする方法

StrutsのActionやFormをJUnitでテストするには StrutsTestCase http://strutstestcase.sourceforge.net/ を使う。設定ファイルを置く場所は厄介。次のようにマニュアル通り記述しても public void setUp() throws Exception { super.setUp(); // コンテキス…

Mavenのディレクトリ構成を変更(+Mockitoを使ってサーブレットをJUnitでテスト)する方法

Mavenで決まっているディレクトリの構成を変えるのは公式サイトを見ても「推奨しない」だの「考え直せ」だの書かれているが、それでも変更しなければならない状況におちいることがあろうかと思います。例えば下図のような構成のプロジェクトで試しにMavenを…

Jenkinsの使い方+MavenやSonarとの連携

Jenkinsの導入〜MavenやSonarとの連携方法までを紹介します。SubversionやGitとの連携は次回以降に紹介したいと思います。まずはJenkinsの準備。 http://jenkins-ci.org/ からWARファイルをダウンロードし、javaコマンドでサーバを起動します。 C:\root\usr\…

SonarとMavenでJavaソースコードのメトリクスを収集する

Javaソースコードのカバレッジツールを探していたらSonarというJavaソースコードのメトリクス収集ツールに行き当たりました。 これまでソースをWebで見れるようにするツール等は様々出回っていましたが、総合的にメトリクスを収集してくれるツールは、多くは…

SpringのDI(Dependency Injection)のサンプルを作りました

Springフレームワークが提供するDI(Dependency Injection)を理解するためのサンプルプログラムを作りました。 『Spring3入門』の 第2章 SpringのDI を参考にしています。初版の第一刷を買ったせいか、それじゃ動かないだろ、というサンプルソースもあるが許…

EclipseのソースコードをCVSから取得する方法

例えば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…

YASnippetがあまりに便利すぎる件

Emacsでの生産性を格段に向上させるツール。便利すぎるのになぜ今までインストールしてなかったのか不思議。まずはgithubからYASnippetをzipでダウンロードする。 https://github.com/capitaomorte/yasnippetダウンロードしたら ~/.emacs.d/elisp 直下に解凍…

形態素解析Senのインストールと使い方

Senのインストールに関してまとめておく。 Java SenはJavaで書かれているのでJavaは必須だが、ここでは省略。 Antの準備 最近はもっぱらMavenばかり使ってたのでAnt入れてなかった...Apache Ant - Binary Distributions ここから apache-ant-1.8.3-bin.zip …

メソッド名のつけ方、それでもまだinsertOrUpdateって書きますか?

Javaのメソッド名や変数名はいやに長くなりがちだが、 upsert って単語があることを初めて知った。SMART!! 今まで真面目にinsertOrUpdateって長々と書いてたのがアホらしい。http://en.wikipedia.org/wiki/Upsert

java/javacの起動高速化

PCをWindowsXPから64bit版Windows7に替えて以来、java/javacの起動が異様に遅くイライラしていたが・・・ Pleiades 付属のjava(32bit版)を使っていたことがどうも原因。Oracleのサイトから入手したWindows x64(64-bit)版に変更してからはそれなりのスピード…

ResultSetをcloseする時はNULL判定すべし

気になるソースを見かけた。具体的にはこんな感じ。 try { Connection conn = DriverManager.getConnection(URL, USER, PASSWORD); String sql = "SELECT * FROM SOMETABLE WHERE ID = ?"; PreparedStatement ps = conn.prepareStatement(sql); ps.setString…