Desenvolvimento de portlets com Rails 10

Posted by Túlio Ornelas Tue, 19 Jan 2010 13:08:00 GMT

No final do ano passado fechamos um contrato com o Conselho Federal de Administração (CFA) para o desenvolvimento do cadastro integrado de administradores do Brasil dentre outras funcionalidades. Além da implementação, o CFA também tinha a necessidade de uma ferramenta capaz de prover recursos de CMS, comunidades, fóruns, etc. Tendo em vista esse cenário ficou decidido que o Liferay iria ser a ferramenta de portal utilizada enquanto o desenvolvimento dos portlets seria feito em Ruby/Rails.

Como seria possível desenvolver um portlet Ruby em uma plataforma Java? o.O? Utilizando JRuby é claro! Dentre os projetos que viabilizavam uso do Ruby/Rails em portlets java, o rails-portlet foi o que apresentou a melhor proposta. E como ele funciona?

  • 1 portlet java
  • O projeto feito com o Rails empacotado com a gem warble, rodando com o JRuby
  • Comunicação HTTP entre o portlet e o projeto Rails
  • Rails inacessível sem o portlet


O portlet java, que é provido pelo projeto rails-portlet, é adicionado ao portlet container e irá conversar com a aplicação feita em Ruby, isso facilita muito o trabalho, pois conseguimos desenvolver tudo em Ruby e com alguns comandos geramos o .war do portlet.

O projeto feito com o Rails tem algumas particularidades, a mais proeminente é o mapeamento das rotas, pois no projeto original cada método de controller gerava um novo portlet, um mapeamento fixo, por exemplo:

map.portlet_exemplo(

‘portlet_exemplo’, :controller => :controller_1, :action => :method_1

)   

Com as contribuições que nossa equipe fez ao projeto, nós conseguimos criar rotas que abrangem N controllers, o que melhorou bastante o processo de reaproveitamento de código, exemplo:

map.portlet_exemplo(

‘portlet_exemplo/:controller/:action’, :controller => :controller_1

)

Nessa caso, utilizamos um namespace ‘portlet_exemplo’ para definir o portlet e definimos que o controller padrão será o :controller_1 e o método padrão será o :index, que no caso, não precisa ser informado. Os wildcards :controller e :action serão substituídos pelos  valores passados por parâmetro na URL, por exemplo:

http://…/portlet_exemplo
controller_1, método index


http://…/portlet_exemplo/meu_controller

meu_controller, método index


http://…/portlet_exemplo/outro_controller/outro_metodo
outro_controller, método outro_metodo

 

Outra necessidade é a utilização da gem caterpillar que é a responsável por gerar automaticamente os xmls de configuração do portlet e do liferay, além de empacotar utilizando o warbler e realizar o deploy. Essa gem tem como dependência a gem lportal, que contém as tabelas do liferay na forma de modelos do ActiveRecord. Infelizmente o lportal não atendeu as nossas necessidades pois ele apresentou algumas problemas básicos, talvez por inatividade do projeto. Dessa forma nós criamos o projeto liferay_models, que ainda não está público, e que é assunto para um outro post.

Após o panorama geral, vejamos como criar um portlet em Rails.

1) Instalar e configurar o GEM

criar variável de ambiente $GEM_HOME=/caminho/das/gems/sem/a/pasta/gems
* Atenção: O caminho das gems não inclui a pasta gems.
Por exemplo:
export GEM_HOME=/usr/lib/ruby/gems/1.8

1) Instalar e configurar o JRuby

download
http://jruby.kenai.com/downloads/1.4.0/jruby-bin-1.4.0.zip

criar variável $JRUBY_HOME=/… e adicionar no path $JRUBY_HOME:$JRUBY_HOME/bin

1.5)
    apt-get install ruby-dev
    
Ubuntu:
     apt-get install libpqxx3-dev
    Debian:
     apt-get install libpq-dev libpgsql-ruby


2) Instalar gems

gem install jruby-openssl
gem install jruby-jars
gem install hpricot
gem install warbler
gem install caterpillar
gem install lportal
gem install uuidtools
gem install rails -v=2.3.3 (Até o momento o caterpillar só funciona com essa versão do rails, estamos trabalhando nisso)

* no caso de utilizar postgres
gem install pg
gem install activerecord-jdbcpostgresql-adapter

3) Criar projeto

rails nome-projeto
cd nome-projeto

ruby script/generate controller example index

- Configure a rota

map.example(‘example/index’, {:controller => ‘example’, :action => ‘index’})

- Adicionar as dependências das gems no config/environment.rb
config.gem "caterpillar"
config.gem "lportal"

- Configurar config/database.yml
development:
adapter: postgresql
database: lportal
username: postgres
password: postgres
host: 127.0.0.1
timeout: 5000

production:
adapter: jdbcpostgresql
database:
lportal
username: postgres
password: postgres
host: 127.0.0.1
encoding: unicode

- Ativar caterpillar

ruby script/generate caterpillar

- No arquivo config/portlets.rb adicione
portlet.container.root = ‘/../Programas/liferay-portal-5.2.3/tomcat-6.0.18/’
portlet.category = ‘Rails-apps’ (ou um nome que você preferir)

- Deploy

* Teste a conexao com:
caterpillar portlets

- Gerar o arquivo warble.rb
warble config

- Adicionar essa configuração no warble.rb
config.gems << "activerecord-jdbcpostgresql-adapter"
config.gems << "lportal"

# Precisa fazer apenas uma vez
caterpillar jar:install (Coloca o portlet genérico que trata as requisições no liferay)

# Sempre que mudar alguma configuracao e for testar a aplicação no liferay
caterpillar xml
caterpillar warble (nesse momento não pode ter nenhuma gem nativa no environment.rb, exemplo pg)

# Utilizado para atualizar os arquivos no container
caterpillar deploy:xml
caterpillar deploy:war

Após realizar os passos acima, inicie o Liferay e acesse a aplicação. Selecione o portlet rails que se encontra na categoria que foi configurada. Pronto, nós temos nosso portlet rails rodando!

Esse foi o primeiro de uma série de posts sobre o assunto. Fiquem no aguardo.

Equipe CFA:
Túlio Ornelas, Pedro Dias, Bruce Rodrigues e Renan Mendes.

Comments

Leave a comment

  1. Avatar
    Ismael Stahelin about 2 hours later:

    Gostei do post e principalmente da aposta na integração dessas tecnologias. Parabéns pela iniciativa. Estarei aguardando os outros posts da série.

  2. Avatar
    Alexandre Gomes about 4 hours later:

    Desde 2008, a Sun mudou sua estratégia de venda da tecnologia Java. De lá pra cá, o discurso é em prol do Java como plataforma, e não como yet another programming language.

    Servidores de aplicação começaram a seguir a mesma linha, deixando de ser apenas servidores de aplicação Java, para se tornar servidores de aplicação para qualquer linguagem (e.g. Glassfish e JBoss que já suportam componentes em outras linguagens além do Java)

    Agora, chega a vez das ferramentas de portais, antes exclusivas ao desenvolvimento de portlets Java e, agora, genéricas para a extensão com outras linguagens (no caso do Liferay, já há o suporte a Ruby e PHP).

    Seria bom a comunidade desenvolvedora se ligar para o fim da era da monogamia tecnológica. IMO, o futuro é pluritecnológico. Aliás, já leu o Manifesto 2.0? http://tinyurl.com/manifesto20

    []s

  3. Avatar
    Bruno Pedroso 3 months later:

    Um detalhe, pra não esquecermos: A gem uuidtools precisa estar na versão 1.0.3

    gem install uuidtools -v=1.0.3

  4. Avatar
    bvlgari rings 9 months later:

    details tag heuer carrera replica about the assaults, Kelly said. The bvlgari replica watch Hate Crimes Task Force took Cartier La Dona over the investigation, along with vivienne westwood bracelets Bronx robbery and gang division cheap goalie gloves and special victims squad, and cheap goalkeeper gloves arrested the seven men. The mother bvlgari replica watch of one of the suspects replica bulgari told ABC New York station chicago bulls shorts WABC-TV that she cannot believe swiss watch replica that her son could be mizuno football shoes involved in such a heinous bulgari cufflinks

  5. Avatar
    pozycjonowanie about 1 year later:

    Thanks for this great post. Did you do it all on your own? This must’ve taken a lot of time

  6. Avatar
    programy about 1 year later:

    I think this is one of the most important information for me. And i’m glad reading your article. But wanna remark on few general things, The website style is great, the articles is really excellent. Good job, cheers

  7. Avatar
    christian louboutins over 1 year later:

    Numerous celebrities are the super fans of buy Christian Louboutin Terracotta Suede Very Prive Platform .Fashion Christian Louboutin Rolando Hidden-Platform Pumps Metallic gives beautiful lovely women a perfect show and looked more sexy with mature.Here you can Save your chance to buy discount but authentic quality of Christian Louboutin Leather Pigalle Snake Pumps Beige! Show your good taste and special personality with a pair of Christian Louboutin Women’s Nylon Fabric Peep-toe Pumps and join our Christian Louboutin club to become a fashion icon.

  8. Avatar
    buy4cheaps over 1 year later:

    Reviews and Articles on Latest [url=http://www.buy4cheaps.fr/louis-vuitton-monogram-vernis-brentwood-p-26116.html]Louis Vuitton Monogram Vernis Brentwood [/url],We have [url=http://www.buy4cheaps.fr/louis-vuitton-monogram-vernis-brentwood-p-26117.html]Louis Vuitton Monogram Vernis Brentwood [/url] on sale that you want to look at! [url=http://www.buy4cheaps.fr/louis-vuitton-monogram-canvas-speedy-30-p-26005.html]Louis Vuitton Monogram Canvas Speedy 30[/url] Outlet Online.Store supply discount [url=http://www.buy4cheaps.fr/louis-vuitton-monogram-canvas-speedy-35-p-26006.html]Louis Vuitton Monogram Canvas Speedy 35[/url] , [url=http://www.buy4cheaps.fr/louis-vuitton-monogram-keepall-55-p-26008.html]Louis Vuitton Monogram Keepall 55[/url] deisgner luggage for men and women on sale.please feel free to contact us.

  9. Avatar
    buy4cheaps.fr over 1 year later:

    Reviews and Articles on Latest Louis Vuitton Monogram Vernis Brentwood ,We have Louis Vuitton Monogram Vernis Brentwood on sale that you want to look at! Louis Vuitton Monogram Canvas Speedy 30 Outlet Online.Store supply discount Louis Vuitton Monogram Canvas Speedy 35 , Louis Vuitton Monogram Keepall 55 deisgner luggage for men and women on sale.please feel free to contact us.

  10. Avatar
    Christian Louboutins Sale over 1 year later:

    They replied me that experts claim because golf shoes by working with smart rivets look wild beautiful so they fancy them. 2010, the actual sales and profits together with Discount Christian Louboutins are actually stupendously pleasant. Christina Aguilera follows the very fashion accessory fad tightly. My husband and i think the its best rivets Christian Louboutin 1:1 Grade Zebras Suede Pumps she wears goes well ready red attractive strapless dress. Unfortunately, kindly please happen to be careful skill decide to wear the actual rough rivets shoes, and it’s sometimes be hurt in addition hurt other individuals just by the particular sharpened rivets. Please understand which in turn your personal safety and as well, typically the safety with regards to people today just about you. Every single types has contrasting temperament. So each single looks extremely diverse kinds of likewise that they dress in a similar style clothes in addition footwear.

Comments