Por conta de um projeto que está pintando no trabalho, que requer o uso de um conector escrito em Java, há umas duas semanas mais ou menos comecei a fazer novos testes com Jython, considerando fortemente uma solução baseada Python. Até publiquei uma aplicação boba usando Flask, só de exemplo, porque googlando não achei nada que não fosse com Pylons ou Django. Mas no final, Jython não pode preencher alguns requisitos e voltamos então para JRuby.
É aqui que entra o tema deste post.
Essa semana andei fazendo algumas contribuições em um projeto open source bem simples, mas igualmente interessante, que é o jetty-rackup.
O objetivo do jetty-rackup é rodar aplicações Rack no Jetty WebServer, sem ter que empacotá-las em arquivos WAR, o que é definitivamente excelente em ambiente de desenvolvimento ou quanto você quer fazer deploy orientado a git pull.
Tutorial de 1 minuto
Bem, para que o jabá seja completo, nada melhor do que um tutorial. Vamos escrever então uma aplicação Sinatra básica — ótima pedida para Web API.
1. Com Sinatra já instalado, crie uma aplicação — app.rb
require 'sinatra' configure :development do Sinatra::Application.reset! # recarrega as rotas use Rack::Reloader # recarrega arquivos end get '/?' do "hello" end get '/:message/?' do |message| "hello #{message}" end
2. Com a aplicação criada, crie o arquivo rackup — config.ru
require 'rubygems' require 'app' set :run, false set :environment, :development run Sinatra::Application
3. Com o arquivo rackup criado, installe a gem jetty-rackup
$ gem install jetty-rackup
4. Com a gem jetty-rackup instalada, no diretório da aplicação criada, inicie a aplicação
$ jetty-rackup config.ru
5. Finalmente, com tudo pronto, teste com cURL e Apache Benchmark
$ curl http://localhost:9292/
$ ab -n 10000 -c 25 http://localhost:9292/
Voilà!
Agora, rode o último comando algumas vezes e observe a variação crescente de “Requests per second”. JIT Compiler for the win!
Um pouco mais
Se quiser saber como usar bibliotecas Java, no repositório do projeto tem também um exemplo usando classes Java, tanto contidas no diretório WEB-INF/classes quanto em arquivo JAR no WEB-INF/lib.
Divirta-se!
Uma consideração sobre “jetty-rackup: rodando aplicações Rack no Jetty”