makotan _at_ gmail dot com

DIとAOPが面倒になったは良いけど、結局どれにするんだ?

OSSとしては出尽くした気はするのでまとめてみた

プロダクト DIコンテナ 通信部分 Annotation 特徴
Spring MVC Spring Servlet 独自Annotation オールインワン
JAX-RS CDI/Spring Servlet JavaEEのAnnotation CDIかSpringとの組み合わせが事実上必須、複数の実装から選べる
Ninja Guice Servlet Annotationなし オールインワン
MSF4J DIなし netty JavaEEのAnnotation
SparkFramework DIなし Servlet(Jetty) 独自Annotation
RESTX DIなし Servlet JavaEEのAnnotation
Vert.x DIなし netty Annotation無し 全力でasync


DIの有無、通信部分、Annotationあたりがやっぱり特徴的だなぁ〜と思ったので比較してみた
Spring MVCJAX-RSは黒魔術が出やすいのでさくっと除外して

JAX-RSのAnnotationを使うMSF4J,RESTX

MSF4Jを使うならServletでの運用は諦める、ただし現在企業がバックに付いてる安心感はある(いつ捨てられるかも不明だけどね)。ただ、欲しい機能が用意されてる
RESTXを使うなら開発が停止する可能性を考慮する必要がある

独自の方法でやるNinja,Spark,Vertx。

安定のNinja(WebFrameworkとしては結構お気に入り)。
Sparkはソースを読んだ結果、プロダクトとしてまだ本番投入したくないあれやこれやがあるw
Vert.xは実はバックに企業が居る(開発者が居るところがOSSの支援してる)安心感はある。あと改めて確認したら欲しい機能が既に存在してる

とりあえず非常に個人的な結論

マイクロサービスで作るという点と、あらゆる標準準拠への圧力が皆無な点と、今回はパフォーマンス重視な部分の開発なので・・・
Vert.xを第一候補に、MSF4Jを横目に眺めながら、Sparkのバージョンアップを気長に待つ
サービスを作るときにどれを選択するかはまたその時考える