[Spring][Maven]実行可能jarを生成するときの落とし穴 その2

fatjarを生成すると当然jarの署名も変わります。なのでchecksumを検証するような行儀の良いjarを含んでいると実行時にSecurityExceptionが吹っ飛んできます。回避策は以下の通り。署名のマニフェストをjarから除外するのです。 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>ma</artifactid></plugin>…

[Spring][Maven] 実行可能jarを生成するときの落とし穴

どうやらSpringは各jarにspring.handlersやspring.schemasがあるため、maven-assembly-pluginでfatjarを生成しようとすると、ファイルがコンフリクトしてしまいます。なのでmaven-shade-pluginを使うのが正解。 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId></plugin>…

RelativeDateLabel

時刻を「36秒前」とか「15分前」とか「8時間前」のように相対的な経過時間で表示するLabel。24時間以上前は絶対時刻で表示。 自分はだいたいIConverterでやってしまうのだけど、Modelでも出来るよね。どう使い分けるのがいいのかね。 package net.nagaseyasu…

cronで任意の件数をバックアップ

例えばデータベースのバックアップを7日間ごとにやるなら曜日を利用して、 /usr/bin/pg_dump database > database-`/bin/date +\%A`.dump と書けばよかったけれど、任意の日付間隔の場合どうしようかなあと考えた結果がこれ。 /usr/bin/pg_dump database > d…

Galileoのミラーアップデートサイト

Galileoのアップデートサイト重すぎ!という訳でミラーサイトに変更。 [Window]->[Preferences]->[Install/Update]->[Available Software Sites] LocationのURLの http://download.eclipse.org/ を http://ftp.yz.yamagata-u.ac.jp/pub/eclipse/ に置換する…

Place Holder(Input Prompt)を表示するIBehavior

TextFieldやTextArea用のPlace Holder(入力がない場合はグレーの文字でヒントが出るやつ)のIBehaviorを書いてみました。 書いた、といってもSimpleAttributeModifierと大して変わらないですが。jQueryとjQuery.placeholderをこのIBehaviorと同じpackageにお…

enhanceされたclassにも対応するIConverterLocator

HibernateなどORMでentityがenhanceされているとWicketのConverterLocatorはObject.toString()の値を返してしまいます。Application.newConverterLocator()は、内部にclass名とIConverterのMapを持ち、IConverterLocator.getConverter(Class type)は単純にMa…

LIVE雅咆2009〜春の祭典スペシャル!動画

4月の25〜26日に吉祥寺は前進座劇場で行われたLIVE雅咆2009〜春の祭典スペシャル!の動画ができました。 是非ご覧ください!

ServletFilterではなくIRequestCycle

対DoS攻撃用のIRequestCycleを書きました。 あるIPアドレスから同じURLへ一定期間(expire)に閾値(threshold)以上のアクセスがあるとDosAttackExceptionをぶん投げます。こういったものはServletFilterで書くのも手ですが、そうするとWicketTesterでテストを…

Guice-Quartz integration

GuiceとQuartzのintegrationを書いてみました。 CronTriggerのみの実装です。 Jobをimplementsしたinterfaceにannotationを書だけで定期的にメソッドが呼ばれるようになります。 見たほうが早いのでとりあえずソース。呼び出すinterface。 package net.nagas…

DoCoMoのiモードIDを取得する

DoCoMoのiモードIDを取得する場合URLにguid=onという文字列を含める必要があります。 簡単サインインの際はformのactionに加えるのですが、Wicketの場合は以下のように書きます。 Form<SignInPage> signInForm = new StatelessForm<SignInPage>("signInForm") { private static final</signinpage></signinpage>…

au端末のcheckboxに注意

auの端末はinputタグのtypeがcheckboxの場合にvalueを指定しないとデフォルトで0が送信されます。 Wicketはこれをfalseとして解釈してしまうので、明示的に値を設定するListenerを書きました。 package net.nagaseyasuhito.sandbox.listener; import org.apa…

Cookieを使った自動サインイン

AuthenticatedWebSession.isSignedIn()がfinalなお陰でoverrideできず若干トリッキーな実装になっています。 が、やってる事は普通のservletでcookieを扱うのと変わりありません。 AuthenticatedWebSession.signIn(String username, String password)の代わ…

リポジトリにないjarを扱う

Mavenのセントラルリポジトリにないjarを扱う場合はプロジェクト直下にリポジトリディレクトリを作成して管理しています。 例えばguice+JPA用にwarp::persistというライブラリを使う事が多いのでこれを例にします。 といっても手順は簡単でjarファイルをgrou…

携帯向けに文字列を実体参照にするListener

Wicketは文字列を実体参照としてhtmlに出力してしまうので、それを抑制するためにComponent.setEscapeModelStrings(boolean escapeMarkup)を片っ端から呼び出すListenerを書きました。 package net.nagaseyasuhito.sandbox.listener; import org.apache.wick…

enum型のConverter

国際化に対応するためプロパティファイルを参照するConverterを書いてます。 package net.nagaseyasuhito.sandbox.converter; import java.util.Locale; import org.apache.wicket.Application; import org.apache.wicket.Component; import org.apache.wick…