Java

JavaでSCP

とりあえずやってみたってだけで、あってるかは不明。 ちゃんと使うには、もっと中身を覗いていかないとだめかも。 ライブラリ ganymed-ssh-2 というのを使ってみる。 https://code.google.com/p/ganymed-ssh-2/バージョンは(Mavenであがってた)262という…

Spring Batchでエラー時だけ特定の処理をする設定

こんな感じ? <batch:job id="testJob"> <batch:step id="test1"> <batch:tasklet ref="hogeTasklet" /> <batch:end on="*" /> <batch:next on="FAILED" to="errorStep" /> </batch:step> <batch:step id="errorStep"> <batch:tasklet ref="errorTasklet" /> </batch:tasklet></batch:step></batch:job>

ジェネリクスむずかしい

ちょっと悩んだメモ。 あくまでイメージコード public void hoge1(List list) { // List<List<? extends Serializable> では受け取れない List list2 = foo(list); } public void hoge2(List<String> list) { List<List<String>> list2 = foo(list); } public <T extends Serializable> void hoge3(List<T> list) { List</t></t></list<string></string></list<?>

riak-java-clientを使う

RiakにJavaからアクセスするためのライブラリ https://github.com/basho/riak-java-client をちょっと触ったのでメモ。 LowレベルとHighレベルの2種類のAPIがあるけど、今回は手軽に試せるHighレベルの方で。 つっこむデータの定義 アノテーションで色々指定…

ログ設定ファイルの環境変数での指定

いっつも忘れてぐぐるのでメモ。 Logback -Dlogback.configurationFile=・・・ Log4j2 -Dlog4j.configurationFile=・・・ Log4j -Dlog4j.configuration=・・・Log4j1と2で違うんかい

今が年の何週目か

ある日がその年の何週目かということについて。 というよりかは、年の1週目っていつよ?ってお話。 まずはISO8601の定義。 D は曜日を表し、月曜日が 1、日曜日は 7 である。 〜略〜 ある年における、「最初の木曜日を含む週が、その年の第1週である。」と規…

ローカルキャッシュ

MyBatisで、同一トランザクション内で同じシーケンスから値を2回取得する ようなコードを書くと、同じ値が返されてしまう。サンプルはこんな感じ。 XML <select id="nextId" resultType="Long"> select nextval( #{name} ) as value </select> Java SqlSession session = ・・・; SequenceValue sequenceValu…

HandlerMappingを自動でやりたい

リクエストのパスに対応するControllerを見つけるためのクラスがHandlerMapping。 こういうのは、命名規約といったルール付けをしておくことで、実装者が 設定ファイルを書かなくても自動でできるようにしたい。 イメージとしては、/top/top.formにアクセス…

動的SQLを試す

ユーザー情報的なテーブルがあって、ログインIDかユーザー名か(またはその両方)で 検索するような機能をMyBatisとPostgreSQLで試す。 で、まずはベタにこんな感じ。 画面からくるパラメータの前後に%を付加してlike〜という変数に設定しておく。 <if>を使って、l</if>…

プログラムでトランザクション制御

基本的にはアノテーションでトランザクション制御するけど、 独自にコミットしたいなーって時もあるわけで、そんなテスト。 @Service public class HogeServiceImpl implements HogeService { @Autowired private PlatformTransactionManager transactionMan…

Spring3.0とMyBatisの設定メモ

SpringとMyBatisを連携して使う場合、MyBatisが用意している連携用ライブラリを使うらしい。 というわけでメモ。正しいのかどうかは知らないけど、ちゃんとできてるようには見える。 設定ファイル データソースとMyBatisとトランザクションの定義。 トランザ…

ログ用Interceptorを作る

SpringにはDebugInterceptorやらSimpleTraceInterceptorといったものが 用意されてるけど、ログはオレオレフォーマットが好きなので、無駄に 拡張して作ってみる。 作るもの MethodInterceptorを実装したクラス 上記Interceptorを設定した設定ファイル Metho…

ファイルのアップロード

ほぼサンプル通り。 Commons FileUploadをパスに通し、設定ファイルに以下を追加するだけ。 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="1024" /> </bean> あとは、マルチパートでリクエストを飛ばせば、勝手にやってくれる。 その他メモ。 ファイルサイズが超過した場合、MaxUploadSizeExceededExceptionがス…

例外のハンドリング

例外のハンドリングは、運用(ログ)にも関わるので、デフォで用意されて いるものよりは独自に実装したいなーというわけでメモ。 手順はこれだけ。 HandlerExceptionResolverを実装したクラスを作成する。 resolveExceptionの戻り値であるModelAndViewで遷移…

Controller前後に実行される共通の処理を作る

というメモ。 HandlerInterceptorかWebRequestInterceptorの実装クラスを作り、 設定ファイルに書けば、Contorollerの前後に共通の処理を挟める ようになる。 実装クラス public class HogeInterceptor implements HandlerInterceptor { private static fina…

DriverManagerDataSource

Springのデータソースの定義で指定する org.springframework.jdbc.datasource.DriverManagerDataSource というクラス、プールの機能とかはないちょっとしたテスト用のものだった。 http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/spring…

Spring MVC 始めました

で、前に触ったときと同じく、どうもしっくりこないなーなんて。 Struts病なんでしょうかね。自由度高いのはうれしいけど、そうすると破綻する プロジェクトばっかだからなぁ。 追記 ついでにMyBatis(iBATIS)も使う。

OutOfMemoryError

いつものOutOfMemory java.lang.OutOfMemoryError: Java heap space ちょっと違うOutOfMemory java.lang.OutOfMemoryError: GC overhead limit exceeded このときのGCログ [Full GC [〜] GC time would exceed GCTimeLimit of 98% ・・・ [Full GC [〜] GC t…

いやんな感じだけど正しく動いちゃうコード

Calendar calendar = Calendar.getInstance(); calendar.clear(); // 2011/02/01 calendar.set(2011, Calendar.FEBRUARY, 1); // 1ヵ月後 calendar.add(Calendar.MONDAY, 1); System.out.printf("%1$tF", calendar); まぁいんだけどさ・・・。 そういえば、p…

演算子の優先順位

絶対Bが出力されないコード。 public static void main(String[] args) { boolean hoge = true; boolean foo = true; String str = hoge ? "A" : " " + (foo ? "B" : " "); System.out.println(str); } 正解はこう。 String str = (hoge ? "A" : " ") + (foo…

慣れないものを使うと

バグるよなーという実例。 Pattern pattern = Pattern.compile("^FATAL|ERROR"); ERRORが見事に行頭以外にマッチして、 どーでもいいログをエラーと判定してました\(^o^)/ ここらへんの優先順位って、どっかで明確になってるんですかね? けっこうな大き…

身近なところに

あるもんだなーと。org.apache.commons.lang.time.DurationFormatUtils もうちょいで自作するとこだった・・・。 で、このエントリと全然関係ないけど、連絡が来ていたのでご紹介。 http://www.seasarfoundation.org/event_report/205 今回も幅広く募集して…

久しぶりにみた

こんなコード。 int i = 01; ・・・ いや、確かに値としては間違ってないんだけどさ。 01とする理由はまったくないとこだし、絶対意味わかって書いてないよなー。

社内勉強会の資料

アップしました。 作成する時間があまりなかった(言い訳)ので、話の流れはてきとーです。 私の前職のお客さんは見ないでくださいw View SlideShare presentation or Upload your own. もうめんどくさいので、ネタはほとんどそのままあげています。 おまい…

オーバーライドしたメソッドのJavadoc

前にid:daisuke-mに教えてもらってて、忘れそーだったのでメモ。 オーバーライドしたメソッドって、Javadocコメントを書く必要のないことがけっこうある。 # いや、ホントは書くべきなんだけど、めんどいこともあるし・・・。 Eclipseのデフォルトの場合、オ…

Pattern#quoteとMatcher#quoteReplacement

Pattern#quoteとMatcher#quoteReplacementとを間違って使ってたー。 というわけで、備忘録。 Pattern#quote(String s) Javadocでは「sにマッチするPatternの作成に使用可能なStringを生成する。」 つまりは、正規表現では特殊な文字として認識される文字とか…

よく考えたら当たり前のことだったどーでもいいこと

アノテーションクラスの要素で、戻り値voidは定義できない。 つづけて、どうでもいいこと2 アノテーションの中身(と言えばいいのか?)っていままで「属性」と呼んでいたけど、 「要素」というのが正しいみたい。 http://java.sun.com/j2se/1.5.0/ja/docs/j…

FindBugsのフィルタファイルを作る

FindBugsでどのルール(ディテクタ?)を採用するかを指定する場合、Eclipeの設定画面で行う。 ただ、これだとMavenでFindBugsを動かしたときに、同じ設定で動かすことができない。 このような場合に、フィルタファイルというものを作成すると 同じ設定でFin…

FindBugsのルール一覧を出力する

って、FireBugと間違えるよね。 で、FireBugsとか検索して見つかんねーとかやるよね。 さて、JiemamyでFindBugsのルール設定のタスクをやってたんですが、 FindBugsのルール一覧ってびみょーに見にくいんですよねー。 説明見ただけだとどんなルールかわから…

Jiemamy会に参加してきました

Jiemamy会(Jiemamyインサイド for contributorsって長いからとりあえずJiemamy会で)に 参加してきました。id:daisuke-m さん、参加した方々、お疲れ様でしたー。 そして、会場を提供してくれた某会社(w)さんと準備していただいた方々(ww)、 ありが…