Desenvolvimento
 de portlets em
      Rails
2
Agenda
•   Ambientes
•   Ferramentas
•   Preparando o ambiente
•   Montando um projeto
•   Deploy
•   Extras
    -   File Download
    -   Preferências


                                3
Ambientes

Desenvolvimento   Produção




                             4
Desenvolvimento


• Servidor leve (WEBrick)
• Gems nativas
• Produtividade


                            5
Produção

• .war
• Deploy no Liferay
• Gems compatíveis com o JRuby
• Xmls de configuração do portlet
• Escalabilidade

                                   6
Ferramentas
• Rails-portlet
 - É um generic-portlet responsável por
    coordenar a conversa entre o Liferay e a
    aplicação Rails
• Caterpillar
 - Responsável por auxiliar na montagem do
    projeto, empacotamento (.war) e
    comunicação com o Liferay

                                               7
Rails-portlet




                8
Caterpillar

• sudo gem install caterpillar
• sudo jgem install caterpillar
• Dependências
 - hpricot
 - warbler

                                  9
Preparando o ambiente
• JRuby >= 1.4
 -   apt-get install jruby (Debian like) ou port install jruby (MacOS)

 -   http://jruby.org

 -   Garanta que a variável JRUBY_HOME exista

• Gems (Instale no Ruby e no JRuby)
 -   sudo gem install caterpillar rails warbler jruby-jars

 -   sudo jgem install caterpillar rails warbler jruby-jars

 -   Não use GEM_HOME


                                                                         10
Preparando o ambiente
• Atenção!
• As gems devem ser instaladas tanto
 no Ruby (desenvolvimento) quanto
 no JRuby, pois no empacotamento
 elas serão lidas do JRuby




                                       11
Preparando o ambiente


• Rails-Portlet >= 0.10.0
 -   Coloque o jar do Rails-Portlet em:
     liferay/tomcat/webapps/ROOT/WEB-INF/lib/

 -   Ou caterpillar jar:install




                                                12
Montando um projeto
• Criar o projeto rails
 - Para caterpillar >= 1.3.0
 - caterpillar rails nome_do_projeto
[tulios] ~/Projetos/rails caterpillar rails mapa_do_tesouro
Checking for required gems...OK
Checking for JRuby binary...OK
Checking for required gems in JRuby...OK
Creating Rails project...OK
Updating config/environment.rb...OK
Activating caterpillar...OK
Configuring warbler...OK
                                                              13
Montando um projeto
• Os portlets são mapeamentos no
 config/routes.rb




                                   14
Montando um projeto



• Podemos utilizar os wildcards :controller
  e :action para que o portlet possa
  acessar outros controladores e actions

• Caso a action não seja informada, o
  método index será chamado


                                              15
Montando um projeto


        A “porta de entrada”
        do portlet será o
        controller e action
        definidos no
        config/routes.rb



                               16
Montando um projeto
• Configurando os portlets
 - config/portlets.rb




                            17
Montando um projeto
• No config/portlets.rb podemos
 configurar cada portlet (ser for
 necessário)




                                   18
Montando um projeto

• Ainda contamos com as seguintes
 opções para cada um:




                                    19
Montando um projeto

• Em config/warble.rb configuramos
 características do empacotamento
 e do funcionamento em produção




                                    20
Montando um projeto



• No config/warble.rb devemos
 informar as gems nativas do Java,
 para que o warbler faça o tratamento
 correto no empacotamento


                                        21
Montando um projeto
• Ainda podemos definir o pool de
  runtimes do JRuby
• Caso nenhum valor seja informado
  o pool irá crescer de acordo com a
  necessidade




                                       22
Deploy
• Primeiro devemos gerar os xmls
 de configuração do portlet
 -   caterpillar makexml

  Using Liferay schema build 5201, version 5.2.1
  Caterpillar 1.3.0 configured for Liferay version 5.2.1
  at /opt/liferay/tomcat
   !! no route for portlet_test_bench
   * -> tmp/portlet-ext.xml
   * -> tmp/liferay-portlet-ext.xml
   * -> tmp/liferay-display.xml

                                                          23
Deploy
• Não se preocupe com a mensagem
 -   !! no route for portlet_test_bench

• Essa rota é utilizada apenas para teste
• Os arquivos criados na pasta tmp
  foram:
 -   portlet-ext.xml
 -   liferay-portlet-ext.xml
 -   liferay-display.xml
                                            24
Deploy

• Os arquivos deverão ser colocados
  em ../liferay/tomcat/webapps/ROOT/WEB-INF
• Utilize o comando
 - caterpillar deploy:xml
  * deploying XML files to /opt/liferay/tomcat/webapps/
 ROOT/WEB-INF
  * tmp/portlet-ext.xml
  * tmp/liferay-portlet-ext.xml
  * tmp/liferay-display.xml

                                                         25
Deploy

• O arquivo liferay-display.xml possui as
  categorias dos portlets presentes no
  liferay + as categorias do seu portlet
• Esta edição pode ser feita de forma
  manual




                                            26
Deploy

• Os arquivos portlet-ext.xml e
  liferay-portlet-ext.xml configuram
  o seu portlet com o Rails-portlet
• Caso você tenha outros portlets
  em Rails mantenha a configuração
  de todos eles nesses arquivos


                                      27
Deploy


• Resumindo a geração e o deploy
 dos XMLs
 -   caterpillar makexml
 -   caterpillar deploy:xml



                                   28
Deploy
• Para gerar o .war utilize
 - caterpillar warble
    * Building WAR using Warbler 1.0.1 on JRuby
    at /opt/jruby/bin/jruby
    *
    jar cf meu_portlet.war -C tmp/war .
    * Warbler finished successfully



                                                  29
Deploy


• O arquivo .war deverá ser gerado
  na raiz do projeto
• Coloque o arquivo em /liferay/deploy
 - caterpillar deploy:war

                                         30
Deploy


• Resumindo a geração e o deploy
 do .war
 -   caterpillar warble
 -   caterpilar deploy:war



                                   31
Deploy
•   Podemos resumir todo o deploy (xmls + .war)
    em um comando
    -   caterpillar deploy
[tulios] ~/Projetos/rails/teste caterpillar deploy
Caterpillar 1.3.0 configured for Liferay version 5.2.3 at /opt/liferay/tomcat
 !! no route for portlet_test_bench
 * -> tmp/portlet-ext.xml
 * -> tmp/liferay-portlet-ext.xml
 * -> tmp/liferay-display.xml
 * Building WAR using Warbler 1.0.1 on JRuby at /Applications/jruby-1.4.0/bin/jruby
jar cf teste.war -C tmp/war .
 * Warbler finished successfully
 * deploying XML files to /opt/liferay/tomcat/webapps/ROOT/WEB-INF
 * tmp/portlet-ext.xml
 * tmp/liferay-portlet-ext.xml
 * tmp/liferay-display.xml
 * ..removing previous installs..
 * deploying the WAR package to /opt/liferay/deploy/teste.war
                                                                                      32
Extras - File Download


• Resource Portlet
 - Faça um método de controller que envie
    um arquivo




                                            33
Extras - File Download

• Inclua o módulo Liferay no seu
  application_helper.rb


• Criando a URL para o download

                                   34
Extras - Preferências
• Habilite o modo de edição
 - instanceable true = preferências para cada
      instância de portlet
  -   instanceable false = preferências para qualquer
      “instância” do portlet




                                                        35
Extras - Preferências


• No controller mapeado como
 “porta de entrada” do portlet crie
 um método preferences




                                      36
Extras - Preferências

• O Rails-portlet irá fornecer um
  hash com as preferências salvas no
  Liferay
• Para isso inclua o módulo
  PortletSupport para ter acesso ao
  método get_liferay_preferences


                                       37
Extras - Preferências
• Uma boa abordagem seria:




                             38
Extras - Preferências
• Dessa forma teremos acesso as
 preferências em cada método de
 action
• Atenção!
• Em modo de edição o único
 método chamado será o
 preferences, tanto para post
 quanto para get

                                  39
Extras - Preferências

• Lembre-se!
• As preferências ficam
 salvas no Liferay e não na
 aplicação, por isso a
 necessidade de recupera-
 las a cada requisição


                              40
Extras - Preferências

• Um exemplo de form para o modo
 de edição




                                   41
Extras - Preferências

• Somente os parâmetros com o
 sufixo _preference serão salvos no
 Liferay
• O método preferences será
 chamado novamente após a
 operação


                                     42
Mais


• Para mais informações
 - http://github.com/tulios/caterpillar
 - http://github.com/tulios/html2jsr286
   •   Esse é o rails-portlet =]




                                          43
Obrigado




           44
P&R

SEA Rails Portlet

  • 1.
  • 2.
  • 3.
    Agenda • Ambientes • Ferramentas • Preparando o ambiente • Montando um projeto • Deploy • Extras - File Download - Preferências 3
  • 4.
  • 5.
    Desenvolvimento • Servidor leve(WEBrick) • Gems nativas • Produtividade 5
  • 6.
    Produção • .war • Deployno Liferay • Gems compatíveis com o JRuby • Xmls de configuração do portlet • Escalabilidade 6
  • 7.
    Ferramentas • Rails-portlet -É um generic-portlet responsável por coordenar a conversa entre o Liferay e a aplicação Rails • Caterpillar - Responsável por auxiliar na montagem do projeto, empacotamento (.war) e comunicação com o Liferay 7
  • 8.
  • 9.
    Caterpillar • sudo geminstall caterpillar • sudo jgem install caterpillar • Dependências - hpricot - warbler 9
  • 10.
    Preparando o ambiente •JRuby >= 1.4 - apt-get install jruby (Debian like) ou port install jruby (MacOS) - http://jruby.org - Garanta que a variável JRUBY_HOME exista • Gems (Instale no Ruby e no JRuby) - sudo gem install caterpillar rails warbler jruby-jars - sudo jgem install caterpillar rails warbler jruby-jars - Não use GEM_HOME 10
  • 11.
    Preparando o ambiente •Atenção! • As gems devem ser instaladas tanto no Ruby (desenvolvimento) quanto no JRuby, pois no empacotamento elas serão lidas do JRuby 11
  • 12.
    Preparando o ambiente •Rails-Portlet >= 0.10.0 - Coloque o jar do Rails-Portlet em: liferay/tomcat/webapps/ROOT/WEB-INF/lib/ - Ou caterpillar jar:install 12
  • 13.
    Montando um projeto •Criar o projeto rails - Para caterpillar >= 1.3.0 - caterpillar rails nome_do_projeto [tulios] ~/Projetos/rails caterpillar rails mapa_do_tesouro Checking for required gems...OK Checking for JRuby binary...OK Checking for required gems in JRuby...OK Creating Rails project...OK Updating config/environment.rb...OK Activating caterpillar...OK Configuring warbler...OK 13
  • 14.
    Montando um projeto •Os portlets são mapeamentos no config/routes.rb 14
  • 15.
    Montando um projeto •Podemos utilizar os wildcards :controller e :action para que o portlet possa acessar outros controladores e actions • Caso a action não seja informada, o método index será chamado 15
  • 16.
    Montando um projeto A “porta de entrada” do portlet será o controller e action definidos no config/routes.rb 16
  • 17.
    Montando um projeto •Configurando os portlets - config/portlets.rb 17
  • 18.
    Montando um projeto •No config/portlets.rb podemos configurar cada portlet (ser for necessário) 18
  • 19.
    Montando um projeto •Ainda contamos com as seguintes opções para cada um: 19
  • 20.
    Montando um projeto •Em config/warble.rb configuramos características do empacotamento e do funcionamento em produção 20
  • 21.
    Montando um projeto •No config/warble.rb devemos informar as gems nativas do Java, para que o warbler faça o tratamento correto no empacotamento 21
  • 22.
    Montando um projeto •Ainda podemos definir o pool de runtimes do JRuby • Caso nenhum valor seja informado o pool irá crescer de acordo com a necessidade 22
  • 23.
    Deploy • Primeiro devemosgerar os xmls de configuração do portlet - caterpillar makexml Using Liferay schema build 5201, version 5.2.1 Caterpillar 1.3.0 configured for Liferay version 5.2.1 at /opt/liferay/tomcat !! no route for portlet_test_bench * -> tmp/portlet-ext.xml * -> tmp/liferay-portlet-ext.xml * -> tmp/liferay-display.xml 23
  • 24.
    Deploy • Não sepreocupe com a mensagem - !! no route for portlet_test_bench • Essa rota é utilizada apenas para teste • Os arquivos criados na pasta tmp foram: - portlet-ext.xml - liferay-portlet-ext.xml - liferay-display.xml 24
  • 25.
    Deploy • Os arquivosdeverão ser colocados em ../liferay/tomcat/webapps/ROOT/WEB-INF • Utilize o comando - caterpillar deploy:xml * deploying XML files to /opt/liferay/tomcat/webapps/ ROOT/WEB-INF * tmp/portlet-ext.xml * tmp/liferay-portlet-ext.xml * tmp/liferay-display.xml 25
  • 26.
    Deploy • O arquivoliferay-display.xml possui as categorias dos portlets presentes no liferay + as categorias do seu portlet • Esta edição pode ser feita de forma manual 26
  • 27.
    Deploy • Os arquivosportlet-ext.xml e liferay-portlet-ext.xml configuram o seu portlet com o Rails-portlet • Caso você tenha outros portlets em Rails mantenha a configuração de todos eles nesses arquivos 27
  • 28.
    Deploy • Resumindo ageração e o deploy dos XMLs - caterpillar makexml - caterpillar deploy:xml 28
  • 29.
    Deploy • Para geraro .war utilize - caterpillar warble * Building WAR using Warbler 1.0.1 on JRuby at /opt/jruby/bin/jruby * jar cf meu_portlet.war -C tmp/war . * Warbler finished successfully 29
  • 30.
    Deploy • O arquivo.war deverá ser gerado na raiz do projeto • Coloque o arquivo em /liferay/deploy - caterpillar deploy:war 30
  • 31.
    Deploy • Resumindo ageração e o deploy do .war - caterpillar warble - caterpilar deploy:war 31
  • 32.
    Deploy • Podemos resumir todo o deploy (xmls + .war) em um comando - caterpillar deploy [tulios] ~/Projetos/rails/teste caterpillar deploy Caterpillar 1.3.0 configured for Liferay version 5.2.3 at /opt/liferay/tomcat !! no route for portlet_test_bench * -> tmp/portlet-ext.xml * -> tmp/liferay-portlet-ext.xml * -> tmp/liferay-display.xml * Building WAR using Warbler 1.0.1 on JRuby at /Applications/jruby-1.4.0/bin/jruby jar cf teste.war -C tmp/war . * Warbler finished successfully * deploying XML files to /opt/liferay/tomcat/webapps/ROOT/WEB-INF * tmp/portlet-ext.xml * tmp/liferay-portlet-ext.xml * tmp/liferay-display.xml * ..removing previous installs.. * deploying the WAR package to /opt/liferay/deploy/teste.war 32
  • 33.
    Extras - FileDownload • Resource Portlet - Faça um método de controller que envie um arquivo 33
  • 34.
    Extras - FileDownload • Inclua o módulo Liferay no seu application_helper.rb • Criando a URL para o download 34
  • 35.
    Extras - Preferências •Habilite o modo de edição - instanceable true = preferências para cada instância de portlet - instanceable false = preferências para qualquer “instância” do portlet 35
  • 36.
    Extras - Preferências •No controller mapeado como “porta de entrada” do portlet crie um método preferences 36
  • 37.
    Extras - Preferências •O Rails-portlet irá fornecer um hash com as preferências salvas no Liferay • Para isso inclua o módulo PortletSupport para ter acesso ao método get_liferay_preferences 37
  • 38.
    Extras - Preferências •Uma boa abordagem seria: 38
  • 39.
    Extras - Preferências •Dessa forma teremos acesso as preferências em cada método de action • Atenção! • Em modo de edição o único método chamado será o preferences, tanto para post quanto para get 39
  • 40.
    Extras - Preferências •Lembre-se! • As preferências ficam salvas no Liferay e não na aplicação, por isso a necessidade de recupera- las a cada requisição 40
  • 41.
    Extras - Preferências •Um exemplo de form para o modo de edição 41
  • 42.
    Extras - Preferências •Somente os parâmetros com o sufixo _preference serão salvos no Liferay • O método preferences será chamado novamente após a operação 42
  • 43.
    Mais • Para maisinformações - http://github.com/tulios/caterpillar - http://github.com/tulios/html2jsr286 • Esse é o rails-portlet =] 43
  • 44.
  • 45.