(注:このブログはもう更新していません)この日記は私的なものであり所属会社の見解とは無関係です。 GitHub: takahashikzn

[クラウド帳票エンジンDocurain]

Java

javamailでGMailメールサーバを使う

javamailでGMailへ送信しようとしたら一筋縄でいかなかったのですが、 最終的には以下の手順で落ち着いたというご報告。 javamailプロパティ 以下のプロパティを設定する必要があります。 mail.smtp.host=smtp.gmail.com mail.smtp.port=465 mail.smtp.auth=…

FindBugs on JDK7において、System.outは常にnullであると警告される

先日、JDK7に乗り換えました。だけどFindBugsはJDK7に対応していないので、"-source 1.6 -target 1.6"で使っています。 ここまでは先日の日記で書いたとおり。 で、FindBugs on JDK7に新たな問題(と言えるか微妙だけど)があることを発見しました。 JDK7で…

JDK6準拠コードでも"Type safety: Potential heap pollution via varargs parameter"を解消する

ご無沙汰です。近頃、書くネタが切れたので放置気味です。 え?もちろん言い訳ですよ? このままブログを諦めるのか…?いや、まだ頑張れるはずだ。 というわけで、当面はブログのネタを生んでくれそうにない 平凡な仕事をしているので更に更新頻度が落ちます…

AspectJで自動コードレビュー

10月から新しい現場で作業してます。 で、その現場は典型的な大規模案件でして、 前の現場と比較して鈍重かつ洗練されていない開発プロセスになってしまっている感じ。 何をするにしても意思決定が遅い。無駄な作業が多い。進捗はエクセルで管理。等々… でも…

JDK7のホットスポットコンパイラに致命的なバグ

既に各所で報道済みですが、JDK7にはホットスポットコンパイラの致命的なバグが存在します。 http://journal.mycom.co.jp/news/2011/08/01/053/index.html で、なんとJDK6でも-XX:+AggressiveOptsを付けると、このバグが発現しうるそうです。 http://lucene.…

JDK7正式版の新機能一覧(Java言語仕様に関して)

2011-08-02追記 JDK7に致命的なバグ 重要なので先頭に追記しておきますが、JDK7のホットスポットコンパイラに致命的なバグが存在するそうです。 詳しくはコチラ。 http://d.hatena.ne.jp/takahashikzn/20110802 JDK7を使用する際はご注意下さい。 (Javadocの…

OpenSymphony, RIP(2000-2011)

OGNLのドキュメントを読もうと、OpenSymphonyのサイトへ行ったら こんな風になってました。あらら。今まで大変お世話になりました。お疲れ様でした。 http://www.opensymphony.com/ 一番重要なプロダクトxworkはstruts2の一部として今後も生きていくし、 OGN…

例外スローのテストをどう書くべきか

例えば、 public class Sample { /** * do something. * * @param i * a positive value. * @throws IllegalArgumentException * if i is a negative value. */ public static void doSomething(int i) { if (i < 0) throw new IllegalArgumentException("ne…

cofojaでラクラクDbC(予定)

http://code.google.com/p/cofoja/cofojaというプロジェクトがあります。これ、"Contract For Java"の略。 かつて存在したModernJassというプロジェクトの後継だそうです。 Contractという単語があることから判る通り、"Design by Contract"に関する何か、 …

serverVMはclientVMの夢を見るか

昨日、JDK1.6.0_25に更新しました。 "-XX:+TieredCompilation"が使えるようになったということで、 早速Tomcatの起動オプションに追加してみたのですが。コレがまた、Webアプリのリロードを繰り返すと頻繁にVMエラーで落ちるという。 # There is insufficien…

Tomcat7のスタックトレースがちょっと便利

2012-12-11追記: Tomcatの機能ではなくて、JDK7からそうなっているようです。失礼しました。 Tomcat7のスタックトレースがちょっと便利になっているということに気が付きました。 クラスがどのJarからロードされたか、わかるようになっています。([jasper.ja…

logbackへ移行するの巻

Javaにおける標準ログ実装の地位は、随分と長い間Log4Jが担ってきました。 (まさかjava.util.loggingなんて誰も使ってないと思いますが。。。) で、Log4Jは次期バージョンになるはずだった1.3の開発に失敗して以降、 ろくに新バージョンも出さずにいるわけで…

今日の、変なコード

今日、こんなコードを見かけました。 new Foo().super(); 僕の脳内:『なんじゃこりゃ???』→(5秒後)ああ、アレか。 さて、コレって何だかわかりますか? 正解は class Foo { class Bar { } } class Baz extends Foo.Bar { public Baz() { new Foo().super…

リストの最速ループの書き方

処理順序が重要でない場合に、ArrayListや配列を走査する場合には、フツーなら for (int i = 0; i < list.size(); i++) { Object o = list.get(i); ...(略) } とかやる*1わけだが、昔は色々と病気に罹患していた*2ため、こんな書き方をしてしまっていた。 fo…

全ての例外発生をフックする最短手段

ちょっと自分用メモ。 デバッガ上でアプリを動作させられないような状況下において、 例外の発生をフックしたいことがある。(エラー原因の解析処理をフックしたいなど→例えばログを出すとか) で、技術的にどうすればコレが可能か?を考えたのだが まず思いつ…

package-infoをJavadoc用途以外で使う

以前の日記でも書きましたが、 package-info.javaはインタフェースとしてコンパイルされます。 で、"package-info"という名前だけあって、パッケージ自身のメタ情報を含めるのにちょうど良い。 今やっている仕事で、『特定の処理を全てのクラスに適用する』…

TLDパス解決に見るTomcat7.0とTomcat6.0の違い

Tomcat7.0.8(Stable)がリリースされていたので早速使ってみました。 とりあえず、いつも使っているサンプルアプリケーション (Struts2, EclipseLink2, Spring3で構成)をデプロイして起動してみます。 2011-02-11 18:27:14,787 INFO [spring.StrutsSpringObje…

assertノススメ

僕は仕事だろうがプライベートだろうが、コードを書くときにはassert文を積極的に使います。 しかし、自分の他に使っている人をほとんど見たことがない。…何故? 考えるんじゃない 感じるんだ 使わない人が使わない理由として一番挙げそうなのが『いつ使えば…

final原理主義

僕は昔からずーっと、finalを付けられる箇所にはすべて付けるようにしています。 ちなみにEclipseを使うと、セーブアクションで自動的にfinal宣言できるので超便利です。 不変オブジェクトを作るために、インスタンスフィールドをfinal宣言するようなケース…

hashCodeとHashMapの危険な関係

Object#hashCodeは、インスタンスをHashSetとかHashMapに格納するときに重要な役割を担うメソッドです。いわゆる『値クラス』を実装する際に、equalsなどと一緒に実装することが多いでしょう。 しかし。。。その『値クラス』をHashMapのキーとして使うとき、…

続・ファイル名に半角スペースを含むファイルダウンロード

ちょっと前にコチラで説明したお話。 http://d.hatena.ne.jp/takahashikzn/20100824/ 最近コメント頂いたのですが、ファイル名を生のShift_JISデータでContent-Dispositionに入れる場合、『半角スペースが"_"に変わる』とのこと。 で、たった今調べてみたの…

JDK8のラムダ式

ネタ元 http://www.infoq.com/jp/news/2010/10/lambda-update みんな大好きラムダ式。JDK8でやっと導入予定なわけですが、ネタ元によると、また仕様が変わったようです。 元々は、 #(int a, int b){ a+b } みたいな感じだったのが、今のドラフトだと #{ a,b …

コンストラクタにJavadocのリンクを貼る

個人的メモ。メソッドに対してJavadocのリンクを貼るには /** {@link String#charAt(int) */ とすればよいが、コンストラクタにリンクを貼るには /** {@link String#String(char[]) */ といった感じで、コンストラクタをクラス名と同名のメソッドとみなして…

JDK7にラムダ式は入らない

http://www.infoq.com/news/2010/09/plan-b こちらを見て知ったのですが、どうやらJDK7では待望のラムダ式が入らない模様です。 Oracleの中の人のブログでは以下のように記されています。 In my previous entry I described two plausible plans for moving …

java.lang.reflect.AccessibleObject#isAccessibleは常にfalseを返す

java.lang.reflect.AccessibleObject#setAccessibleは、 例えばprivateメソッドをリフレクションで無理矢理呼び出す場合に使うメソッド。 ちょっと込み入ったことをする場合に良く使います。 で、これと対になるisAccessibleなんですが。 名前を見る限り、「…

長いファイル名を持つファイルダウンロードで名前が途中で切れる件

先日、半角スペースの文字化け問題を取り上げましたが、 今度はIEで、『長いファイル名を持つファイルをダウンロードすると、ファイル名が最後の15文字程度しか残らない』という問題が発生。 (ただし環境による模様。僕のマシンでは発生しました) 調べてみ…

ファイル名に半角空白を含むファイルをダウンロードするとファイル名が化ける

ファイル名に半角空白を含むファイルをダウンロードすると ファイル名が化けるというバグに出くわしました。 例えば、a b c.txtというファイルをダウンロードしようとすると、a+b+c.txtとなってしまいます。 原因 Servletでダウンロードさせるファイル名を指…

「Classオブジェクトを生成済み→staticイニシャライザを実行済み」ではない

まえがき 今日はJavaマニアックコースです。フツーのプログラムを書いている場合、こういう事は一切気にしなくて良いです。というか、気にしないといけないようなプログラムを書いてはイカン。 今日のお題 さて、先程、こんなコードを書いたのです。 public …

#defineはダイナミック。

Apache Velocity。とてもよく出来ているマクロプロセッサです。 個人的に昔から(version1.2あたりから)ずっと愛用している逸品でして、 弊社製品MOD99でも、内部でコレデモカと使いまくってます。 黒歴史 昔、Velocityのソースを魔改造して独自プログラミン…

EasyMockを使う

僕はモックオブジェクトの作成にEasyMockを使ってます。 このEasyMock、例えばHttpServletRequestのように、用意するのが大変なオブジェクトをサクっと作成するのに重宝します。 例えば、 こんなメソッドの単体テストを書くとします。 public final class Ht…