ã·ããã©ã®å»æ¢ãããRatpackãããã«ã€ããŠã¯ãããšãã°ããã«ããããã«ãHabréã«æžãããŠããŸã ã
ç§ã®æèŠã§ã¯ãSinatraã®äž»ãªå©ç¹
ä»åã¯ãGrooveã³ãã¥ããã£ãSinatraãæåã«åŒãè£ããããã§ã¯ãªãããšãèšããªããã°ãªããŸããã æåã¯Scalatraã䜿çšããScalaã§ããïŒããããè¥æºããã¬ã€ã®çãïŒã ç§ã®ç¥ãéããååããããã®ããã«èŠãããæå³ã«ãã£ãŠé¢é£æ§ãæ¢ããšãã決å®ã¯ãæåã«è¡ãããããã¯ã®ããŒãžã§ã³ã®ååã®é³ã«æããã:)
Ratpackã¯Rat PackãšããŠãã·ã¢èªã«ç¿»èš³ãããŠãããã·ããã©ãšã®ã€ãªããã¯ã ãã©ã³ã¯ã·ããã©ãåºäŒã£ãããŒãã£ãŒã ãšããããšã§ãã
Javaã¯ã©ãã«ãããŸããïŒ
ããŠãããã§ãããã¯ç§ã«ã¯æããŸãããã¹ãŠãæ確ã§ãã ãã€ãŠè»œéã®RoRããã£ãRubyããGrooveãšåœŒã®Grailsããã£ãJavaãšã¯ç°ãªããJavaã«ã¯äž»æµã®ã軜éããã¬ãŒã ã¯ãŒã¯ããããŸããã§ãã*ã JSFãWicketã®ãããªããã°ããµãŒããŒåŽã³ã³ããŒãã³ããã¬ãŒã ã¯ãŒã¯ããŸãã¯ãã¡ããã³ã³ããŒãã³ãã¢ã³ã¹ã¿ãŒããã軜ããMVCã«æãã·ã³ãã«ãªããŒãžã®å ±é ¬ãèŠæ±ããMVCãã¬ãŒã ã¯ãŒã¯ããããŸãã ãã¡ãããããã§ã¯Spring MVCãšStruts2ã«ã€ããŠèª¬æããŠããŸãã ãããŠãéçºãµã€ã¯ã«ãéåžžã«é ããã®ãã¹ãŠããèšèãå€ããŸãããïŒ åèµ·åïŒã Brrr
antonarhipovãæ£ããææ ããããã«ãJerseyãRESTletãªã©ã®REST APIã®ãã¬ãŒã ã¯ãŒã¯ã䜿çšã§ããŸãããããã¯ãç§ã®æèŠã§ã¯æªçšã§ãã
SparkãšåŒã°ããJavaã®Sinatraã¯ããŒã³ããã§ã«ããã®ã§ããªãããã䜿çšããªãã®ã§ããïŒ ããã«ã¯ããã€ãã®çç±ããããŸãã
- ãã³ãã¬ãŒãäœæçšã®ããªãŒããŒã«ãŒãŸãã¯é床ã ãã¡ãããæåã®ãã®ã¯2çªç®ã®ãã®ã»ã©ã²ã©ããã®ã§ã¯ãããŸããããèŽãç©ã§ããããŸããã ã©ã¡ããGroovyãã³ãã¬ãŒããããæªã
- ãããã¹ã¯ãã-ã·ããã©ã®ã¯ããŒã³ã¯ãå€æŽãF5ãèŠããããšãã§ããªããã°ãªããŸããã ããã§ãªãå Žåã¯ãæ²ããããªã
- Ratpackã¯ãGrooveã«ã¹ã ãŒãºã«æµžã絶奜ã®æ©äŒã§ãã ãããŠããããäž»ãªå©ç¹ã ãšæããŸãã
ãã€ãã®ããã«ãJavaããã°ã©ããŒã«ãšã£ãŠã®Grooveã®å©ç¹ã¯ã圌ããå± å¿å°ãè¯ãããšã§ãã Javaã³ãŒãã®99ïŒ ã¯å€æŽãªãã§Groovesã§æ©èœãããããGrooveãã¬ãŒã ã¯ãŒã¯ãŸãã¯ããŒã«ãJavaããã°ã©ããŒãããã«äœ¿çšã§ããŸãã
ratpackã®ç¶æ³ã¯ããã«è¯ãã§ã-éçºè ã¯ãéçºã®ã©ã®æ®µéã§ãGrooveã䜿çšããã«çŽç²ãªJavaã§èšè¿°ã§ããããã«ç¹å¥ãªåªåãããŸããã ãããã£ãŠãGrooveã«ã€ããŠäœãç¥ããã«éå§ããRatpackã®æ©èœããã£ãããšèªåã§çºèŠããŠãGrooveã§æžãå§ããŠãã ããã ãã®èšäºã®1ã€ã®äŸã¯ãJavaã§100ïŒ èšè¿°ãããŠããŸãã æåã®æ®µéã§èª°ããã®ã°ã«ãã¢ã®ã·ã£ãŒãããºã ã«èå³ããªãã®ããæåŸã®äŸã«çŽæ¥ã²ãããŸãã æ®ãã¯ããããå§ãŸããŸãïŒ
Hello WorldïŒ
ãŸããHelloãWorldïŒããå§ããå¿ èŠããããšæããŸãããïŒ å®å šãªratpack Webã¢ããªã±ãŒã·ã§ã³ã¯æ¬¡ã®ããã«ãªããŸãã
@GrabResolver('http://oss.jfrog.org/artifactory/libs-snapshot') //(1) @Grab('org.ratpack-framework:ratpack-groovy:0.9.0-SNAPSHOT') import static org.ratpackframework.groovy.RatpackScript.ratpack ratpack { //(2) handlers { get { response.send 'Hello, world!' //(3) } } }
ããã ãã§ã æ£çŽã«ã ããããã¡ã€ã«ïŒããšãã°ratpack.groovyïŒã«æžã蟌ã¿ã
groovy ratpack.groovy
ã§å®è¡ã
groovy ratpack.groovy
ã
INFO: Ratpack started for localhost:5050
çŽ çŽã«é²ã
localhost:5050
localhost:5050
ãšäºæ³ããããã®ãèŠã€ãããŸãïŒ
æžãããã®ãèŠãŠã¿ãŸãããïŒ
- ãã®æé ã§ã¯ãç¡æã®ãªãŒãã³ãœãŒã¹ã¢ã«ãŠã³ãArtifactoryããå¿ èŠãªã©ã€ãã©ãªããã¹ãŠããŠã³ããŒãããŸã
- ãã®ã¢ããªã±ãŒã·ã§ã³å®£èšã¯ããã³ãã©ãŒãšã¢ãžã¥ãŒã«ã§æ§æãããŸã
- ããã¯getãã³ãã©ãŒã§ãã ãã©ã¡ãŒã¿ããªããããã«ãŒãURLãåŒã³åºãããšã§æ©èœããŸãã ããã§ãHello Worldãè¿ãããã«äŸé ŒããŸãã
å¥ã®ãã³ãã©ãŒãè¿œå
ratpack.groovyã«å¥ã®ãã³ãã©ãŒãè¿œå ããŸãã
ratpack { handlers { get { response.send 'Hello, world!' } get('habr'){ response.send 'Hello, habr!' // } } }
ãã¡ã€ã«ãä¿åãããã©ãŠã¶ã§
localhost:5050/habr
localhost:5050/habr
ãã楜ãã¿ãã ããã
åèµ·åããŸããïŒ ãããããã¯ç§ãã¡ã®ããã§ã¯ãããŸããã 誰ããããïŒ ããä»æããããã£ã ã
ãã€ãããºã ãè¿œå
é床ãšé¢å¿ãè¿œå ããŸãã ã³ãŒãïŒ
ratpack { handlers { get('hello/:username') { response.send "Hello, ${pathTokens.username}" } } }
çµæïŒ
ãŸãããŸãã¯ããã ã³ãŒãïŒ
ratpack { handlers { get('hello') { response.send "Hello, ${request.queryParams.username}" } } }
çµæïŒ
ãã³ãã¬ãŒããæ¥ç¶ããŸã
ããã«å€ãã®èå³æ·±ãæ©èœã«èšåã§ããŸããããã®èšäºã¯ãã§ã«çãã¯ãããŸãããçŽç²ãªJavaã®äŸã§ãã®ã§ããã³ãã¬ãŒãã®æäœãèŠãŠã¿ãŸãããã ããšãã°ãGroovyãã³ãã¬ãŒãã䜿çšããŸãã
ãã³ãã¬ãŒãã¯
templates
ãã£ã¬ã¯ããªã«ãããŸãã ããã«ä¿åããŸããããšãã°ã次ã®å 容ã®
index.html
ãä¿åããŸãã
<html> <head> <title>${model.title}</title> </head> <body> <h5>${model.content}</h5> <br/> <img src="http://habr.habrastorage.org/post_images/9a5/14b/49a/9a514b49a2017e50f386f154c8cb0da2.png"/> </body> </html>
ãã³ãã©ãŒãå«ãã¹ã¯ãªããã¯æ¬¡ã®ããã«ãªããŸãã
@GrabResolver('http://oss.jfrog.org/artifactory/libs-snapshot') @Grab('org.ratpack-framework:ratpack-groovy:0.9.0-SNAPSHOT') import static org.ratpackframework.groovy.RatpackScript.ratpack import static org.ratpackframework.groovy.Template.groovyTemplate ratpack { handlers { get { render groovyTemplate("index.html", title: ' Ratpack', content: ' :') } } }
æ°ããéçã€ã³ããŒãã確èªããŠãã ããã
çµæãæåŸ ãããŸãã
誰ãJavaãåŸ ã£ãŠããŸãããïŒ ãããããããŸãïŒ
å®è¡ããã¹ã¯ãªããã¯ãããŸããã®ã§ããåŸ ã¡ãã ããã ãã£ã¬ã¯ããªæ§é ãã¢ãžã¥ãŒã«ãã¢ã»ã³ããªãã¡ã€ã«ãåããæ·±å»ãªã¢ããªã±ãŒã·ã§ã³ããããŸãã
äŸåæ§æ³šå ¥ã¯ãGuiceãnettyäžã®WebãµãŒããŒãgradleã§ãã«ãããã³å®è¡ããSpringã䜿çšããŠåèµ·åããŸãã
è¡ããïŒ
ãããžã§ã¯ãæ§é ïŒ
ratpack.propertiesãã¡ã€ã«ã¯ã
HandlerFactory
ïŒãã³ãã©ãŒã®ååŸå ïŒã瀺ããŸãã
handlerFactory=example.HandlerFactory
example.HandlerFactory
ã¯ã©ã¹ã¯ãåœç¶ããã³ãã©ãŒã®ãã¡ã¯ããªã§ãã
Hello, %username%
ã®ã¿ããã
Hello, %username%
ã
package example; import ... public class HandlerFactory implements org.ratpackframework.launch.HandlerFactory { public Handler create(LaunchConfig launchConfig) { return chain(new Action<Chain>() { public void execute(Chain chain) { chain.add(get("hello/:username", new Handler() { public void handle(Context context) { Map<String, String> pathTokens = context.getPathTokens(); context.getResponse().send("Hello from Java, " + pathTokens.get("username")); } })); } }); } }
ã¯ããJava 8ã¯å·ã€ããŸããã
ããã®ãã¹ãŠã¯GroovyããŒãžã§ã³ã«äŒŒãŠããŸã-ãã³ãã©ãŒãhello /ïŒãŠãŒã¶ãŒåãã¹ã«è¿œå ãã
context.getPathTokens()
ãããã¹ã®åçéšåã®å€ãååŸããŸãã
ã¿ã¹ã¯ã®
run
ãéå§ããã¿ã¹ã¯
classes
å€æŽãåã³ã³ãã€ã«ããŸãïŒå¥ã®ãŠã£ã³ããŠã§ã
run
åæ¢ããå¿ èŠã¯ãããŸããïŒã
çµæïŒ
æ£çŽãªãšãããJavaã®äŸã¯ããŸãé åçã§ã¯ãããŸããã§ããã ç©ã¿éããããã¯ã©ã¹ãšãã£ã¬ã¯ããªãããããã¹ãŠãGrooveã®4è¡ã§èšè¿°ã§ããå Žåã ãªãã§ããïŒ
Javaã®å©ç¹ã¯ãè€éããšãµã€ãºã®å¢å€§ããå§ãŸããŸãã çªç¶ãã¯ã©ã¹ãšããã±ãŒãžãžã®åé¢ãããŒãã¿ã€ãã³ã°ãããã³ãã¹ãããèœåãããã¡ã€ã«ãšè¡ã®æ°ãããã¯ããã«éèŠã«ãªããŸãã ãããã®å©ç¹ã確èªããã«ã¯ããã¡ãã®ããå®å šãªRatpack Javaã¢ããªã±ãŒã·ã§ã³ã®äŸãã芧ãã ãã ã ç§ã話ããŠããã¡ãªãããç解ããŠããã ãããšæããŸãã
ãããã«
åœç¶ããããã¯éåžžã«åºæ¬çãªãã®ã§ããåœç¶ãRatpackã«ã¯ãä»ç€ºãããã®ãããã¯ããã«å€ãã®å©ç¹ããããŸãã ãããã¯ãGuiceã¢ãžã¥ãŒã«ããµãŒãã¹ãMongoDBããã³GORMãšã®çµ±åã§ãã
ãã³ãã©ãŒãã¢ãžã¥ãŒã«ãããã³ãµãŒãã¹ã«Javaã¯ã©ã¹ã䜿çšãããšãäžçšåºŠã®è€éãã®ã¢ãžã¥ãŒã«åŒã§ç°¡åã«ãã¹ãå¯èœãªã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã
Groovyã¹ã¯ãªããã䜿çšãããšãåçŽãªãã²ããŸããããªãã®ãã¯ããã«é«éã«éçºã§ããå°è±¡çãªçµæãåŸãããŸãã
ãã®ãã¬ãŒã ã¯ãŒã¯ã«èå³ãæã£ãŠããã ããããšãé¡ã£ãŠããŸãã ã芧ã®ãšãããæåã®ããŒãžã§ã³ã§ããŸã ãªãªãŒã¹ãããŠããªãã®ã§ïŒéããªãïŒãããã·ã§ã³ã¯ãªãã£ã«ã«ãªã¢ããªã±ãŒã·ã§ã³ãæžãçŽãå¿ èŠã¯ãããŸããããããã«æ³šæãæãã次ã®ããŒãžã§ã³ããã«ãããŠã¿ã䟡å€ããããŸããäžæ°å³ãªããŒã ããŒãžã
PS
ç¶è¡ããå Žåã¯ãã³ã¡ã³ããèšå ¥ããŠãã ããã
å人çã«Ratpackãšè©±ããããä»ã®èå³æ·±ãããšãèãããå Žåã¯ã8æ31æ¥ã«JUGã«æ¥ãŠãã ãã ã