makotan _at_ gmail dot com

DIとAOPが面倒になったのでRESTX

コメントで太一におしえてもらったやつhttp://restx.io/
Servletベースで、黒魔術無しで、JAX-RS準拠っと。
このスペックはJAX-RS準拠の中ではいちばんかも知れない
restxのshell上でゴソゴソすると色々作れるし
ただ・・・v0.34なのにアクティブさが無い。このアクティブさの無さは何かを思い出して採用を踏ん切れない


結論:必要ならプロダクトの修正もするつもりがあるならかなり良い選択しかも知れない


ま、どっちにしろフレームワークソースコード見ることになるんだけどねw

DIとAOPが面倒になったのでVert.x

1.0の頃に追いかけてて、HTTPなRESTサーバを作るにはちょっと面倒だったイメージから除外してたんだけど改めてhttp://vertx.io/
nettyベースで独自のAPIで任意の言語が使えて、Don’t call us, we’ll call you. Don’t block me! っていうもの
servletにのっからなくて良いならっていう選択肢の中ではもっともパフォーマンスが出そうなやつ
基本的なモデルはasyncなのでServletのThreadモデルすら応用が利かないw
ってここまでは知ってた。
3.x.xになってHTTPなサービスを作るところとか認証系とかJDBCとか(これはあった)増えたなぁ〜
元々放置してた理由が解消されてて驚いた


結論:Vert.xな世界に浸りたいなら有り

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のバージョンアップを気長に待つ
サービスを作るときにどれを選択するかはまたその時考える