ping コマンドで送信元IPアドレスを指定する方法

ホストに複数のインタフェースがあって複数の IPアドレス が付いていたりすると、ICMP パケットの送信元アドレスに意図しない IPアドレス が選ばれて困ったりします。そういう場合は ping コマンドにオプションを付けて対処しましょう。 Linux 系の場合 $ pi…

ANTLRv3 を Maven から使う

ANTLR は Java で書かれたパーサジェネレータです。文法を定義したファイル (.g) からパーサのコードを自動生成してくれます。今回は ANTLR を antlr3-maven-plugin で Maven から使ってみます。 サンプル Maven の設定ファイル (pom.xml) です。

Jersey (JAX-RS) のアクセス制御

今回は Jersey (JAX-RS) で作った WebAPI でアクセス制御を行う方法について書きます。JAX-RS は J2EE の仕様である以上、アクセス制御をロール単位で行う点に変わりはありません。とはいえ、アプローチの方法は複数あります。主に 3 つです。1. web.xml (な…

お財布を落としたとき、必要以上に困らないようやっておくべき 3 つのこと

去年、酔っぱらったあげくに現金にキャッシュカード、保険証など諸々一式入ったお財布を外で落として途方に暮れました。本当に色々と困ったので、その時の経験をもとに、あらかじめやっておいた方が良いことについて書いておきます。 お財布以外で現金または…

Google Guice で JPA のトランザクションを管理する

トランザクション管理って面倒ですよね。JPA を使うときを考えると、まず EntityManagerFactory を作って、EntityManager を取得して、EntityTransaction を取得して、開始して、コミットして、例外が上がったらロールバックして…。うーん、継承などで処理を…

Jackson JSON Proceccor で JSON を扱う (データバインディング編)

Java で JSON を扱うのに Jackson JSON Processor が便利です。他の JSON を扱うライブラリと比較するとパフォーマンスに優れるそうですが、何より API がシンプルで使いやすいです。Jackson で JSON を扱うには 3 つの方法があります。今回紹介するのは、パ…

Google Guice で AOP (アスペクト指向プログラミング)

プログラムのあっちゃこっちゃで頻繁に登場するような処理などを上手く取り扱うために AOP (Aspect Oriented Programming) という技法があるみたいです。このエントリは Google Guice という Java の DIコンテナ を使って AOP を試した際のメモです。今回の…

Maven の archetype:create ゴールは非推奨 (Deprecated)

Maven でプロジェクトを作る方法に archetype:create ゴールを使うやり方がありますが、これは 2012/01 現在、非推奨 (Deprecated) とされています。今後は archetype:generate ゴールを使いましょう。 http://maven.apache.org/archetype/maven-archetype-p…

RabbitMQ を OSX + Homebrew + Java で使ってみる

RabbitMQ というメッセージ指向ミドルウェアが便利らしい、という話を聞いて使ってみました。メッセージ指向ミドルウェアそのものの説明は他におまかせして、公式の Tutorial を試して便利に思った機能について書いてみます。 準備 RabbitMQ は使う前にマシ…

Jersey Test Framework を使って WebAPI の単体テストを書いてみる

フロントエンドの HTML やアプリケーションと WebAPI を別々に開発すると、ビューとロジックをほぼ完全に分離できます。それぞれの責務が絞られるので、もともと不具合が生じにくいというのもありますが、何より WebAPI は単体テストが書きやすいという点で…

Jetty8のWebSocketサーバ/クライアントを使ってみる

ついに RFC6455 (WebSocket) が出ましたね!ぼくも興味津々です。 ということで今回は Jetty の WebSocket サーバ/クライアント実装を使ってみます。 サーバ 今回作ったサーバのソースは以下の通りです。 import java.io.IOException; import javax.servlet.…

Hibernate+Mavenでドメインモデルからスキーマを自動生成する

O/Rマッパーを使ってデータベースを扱うアプリケーションを作るにも色々なアプローチがあると思いますが、今回はドメインモデル (POJO) をまず作ってからそれを元にデータベースのスキーマを自動的に生成する方法についてです。 hibernate3-maven-plugin Hib…

WebAPIのステートレスなCSRF対策

Jerseyのバージョン1.9.1で追加されたCSRFをステートレスに防ぐフィルタが興味深かったので、そのメモです。 CSRF対策の手法 通常、CSRF攻撃を防ぐにはトークンを使う方法があります。サーバがクライアントにトークンを発行して、クライアントは発行されたト…

JAX-RS のリファレンス実装 Jersey のフィルタを使う方法 その2

前回のフィルタの例はあまりにも実用性がなかったので、もう少し実用性のある例を書いてみました。ContainerRequestFilter と ContainerResponseFilter を組み合わせてリソースの処理時間を測るフィルタです。 package test.jersey.filter; import javax.ser…

JAX-RS のリファレンス実装 Jersey のフィルタを使う方法

JAX-RS を使っていると、リソースの処理が呼ばれる前か後に何らかの処理をはさみたい、ということがあると思います。Jersey ではそういったニーズにフィルタで対応できます。Jersey のフィルタにはリクエスト/レスポンスを一律処理するフィルタ (ContainerRe…

Jersey OAuth を使って Twitter API にアクセスする

Jersey には OAuth で認証するためのモジュールが用意されています。今回はそれを使ってみた時のメモです。内容的には JAX-RS を使ったことがあることを想定しています。まず、あらかじめ Twitter Developers でアプリケーションを登録して Consumer Key と …

テスト投稿

テスト public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!!"); } }