JavaMailでGMailをPOP3

今まで普通にPOP3でメールにアクセスしていたアプリがあるのだけど、それをGMailに変更しなきゃならなくなった。そのような場合は、今まで

Session session = Session.getDefaultInstance(System.getProperties(), null);
Store store = session.getStore("pop3");
store.connect(server, -1, username, password);

みたいなコードだったものを

Properties pop3Props = new Properties();
pop3Props.setProperty("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
pop3Props.setProperty("mail.pop3.socketFactory.fallback", "false");
pop3Props.setProperty("mail.pop3.port", "995");
pop3Props.setProperty("mail.pop3.socketFactory.port", "995");
URLName url = new URLName("pop3", "pop.gmail.com", 995, "", username, password);
Session session = Session.getInstance(pop3Props, null);
Store store = new POP3SSLStore(session, url);
store.connect();

という感じに変えたら、動くようになった。という感じでメモ…。

DL_SYNCHRONIZATION_ON_BOXED_PRIMITIVE

FindBugs に

private Integer activeThreadCount = 0;
...
synchronized (activeThreadCount) {
activeThreadCount++;
}

みたいに書いていたら、DL_SYNCHRONIZATION_ON_BOXED_PRIMITIVE と怒られた。はて、何だろと思ったら、activeThreadCount = 0 が内部的には activeThreadCount = Integer.valueOf(0) になり、Integer.valueOf(0) は -128~127 でキャッシュを利用するから、synchronized の対象が意図しない、共有されるオブジェクトになるためみたい(つまり、新規に作った固有のオブジェクトという感じじゃない)。というわけで、ロックしたかったら、それようのロックオブジェクトを作るべしということみたい。なるほどね。

CRUDなMavenプラグイン

Mavenプラグインの学習を兼ねて、SAStruts+DBFluteベースのCRUDなページたちを生成するMavenプラグインを作成中。結構、個人的なニーズに基づく感じだけど、これができると個人的には楽なので(Doltengを使えばいいのかもしれないけど)。仕組み的には、DBFluteでクラスたちを生成したあとに、それで作成されるschemaファイル(たぶん、Torqueのやつ?)を読み込んで、それをベースにSAStruts+DBFluteのページとクラスたちを吐き出す感じ。変更が必要ないものはベースクラスにして(Bs~みたいな)、DBFluteみたいにカスタマイズの処理はその子クラスに書けばよいかと。そんな感じで地道に作成中…(Mavenプラグイン作成の良い学習にもなる感じかな)。