You are currently browsing the archives for the jython category


jetty-rackup: rodando aplicações Rack no Jetty

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!

Django agora compatível com Jython

Saiu do forno a versão 1.0 do Django e trouxe consigo uma boa notícia: Foram removidas todas as incompatibilidades com Jython, o interpretador Python 100% implementado em Java, para rodar Python na Java Virtual Machine.

Porém, isso só é verdade para  Jython 2.5, que ainda não está disponível para produção. Na verdade, o time de desenvolvimento ainda está para lançar uma versão alpha (2.5a1).

Quen, quen, quen, quennnnnn…