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 MVCとJAX-RSは黒魔術が出やすいのでさくっと除外して
JAX-RSのAnnotationを使うMSF4J,RESTX
MSF4Jを使うならServletでの運用は諦める、ただし現在企業がバックに付いてる安心感はある(いつ捨てられるかも不明だけどね)。ただ、欲しい機能が用意されてる
RESTXを使うなら開発が停止する可能性を考慮する必要がある
独自の方法でやるNinja,Spark,Vertx。
安定のNinja(WebFrameworkとしては結構お気に入り)。
Sparkはソースを読んだ結果、プロダクトとしてまだ本番投入したくないあれやこれやがあるw
Vert.xは実はバックに企業が居る(開発者が居るところがOSSの支援してる)安心感はある。あと改めて確認したら欲しい機能が既に存在してる
とりあえず非常に個人的な結論
マイクロサービスで作るという点と、あらゆる標準準拠への圧力が皆無な点と、今回はパフォーマンス重視な部分の開発なので・・・
Vert.xを第一候補に、MSF4Jを横目に眺めながら、Sparkのバージョンアップを気長に待つ
サービスを作るときにどれを選択するかはまたその時考える