VIII Semana de Extensão

September 10th, 2008 by rafaelliu No comments »

Saiu! Da divulgação oficial:

1 DE OUTUBRO

17h às 18h – Palestra
INTRODUÇÃO AO SELINUX
Área Temática: Tecnologia e Produção
Objetivo: Mostrar ao público uma solução de segurança Open Source. Motivar a preocupação com segurança da informação e despertar interesse em software livre.
Coordenação: Carla Maria Chagas e Cavalcante Koike
Executor: Departamento de Ciências da Computação
Local: Departamento de Ciências da Computação – sala CONF 2
Informações: 3307 2022
Público-Alvo: Universitários da área de Informática.

19h às 20h – Palestra
ENTENDENDO O SOA
Área Temática: Tecnologia e Produção
Objetivo: Dar uma visão ampla do que é SOA: o que ela vem resolver, que meios usa, a disciplina pregada e conceitos. Mostrar sua importância no mercado, como vem crescendo, os grandes players que estão apostando na idéia e as ferramentas.
Coordenação: Carla Maria Chagas e Cavalcante Koike
Executor: Departamento de Ciências da Computação
Local: Departamento de Ciências da Computação – sala CONF 2
Informações: 3307- 2022
Público-Alvo: Estudantes da UnB e público externo iniciante em TI.

Estrutura de um projeto Seam

August 30th, 2008 by rafaelliu 8 comments »

O seam-gen é um gerador de scaffolding muito útil para quem programa em Seam. O seam-gen em si é uma ferramenta CLI, mas o JBoss Tools nos dá uma GUI para facilitar nossa vida. Bom, então o primeiro passo é instalar o plugin do JBoss Tools. É só baixar do site deles e descompactar no diretório do Eclipse, nada de mais.

Você notará que serão adicionadas várias perspectivas, entre elas, a Seam. Vamos selecionar essa perspectiva e criar um novo Seam Project. Com isso já temos um projeto funcional com segurança, apresentação de erros, e conexão com banco de dados. Também é criado um projeto <projeto>-Test para testes. Vamos entender um pouco do que nos foi gerado.

  1. classe usada pelo Seam para autenticaçãoseam-gen-structure
  2. arquivo chave. Indica ao Seam que ele deve procurar nesse diretório por componentes
  3. persistence.xml do JPA
  4. arquivo com algumas propriedados a serem substituidas pelo Ant no components.xml
  5. import.sql do Hibernate
  6. mensagens para internacionalização
  7. arquivo Drools com regras de autorização
  8. datasource gerado para o JBoss
  9. arquivo de configuração do Seam (componentes, integração)
  10. arquivo de configuração WAR do JBoss
  11. arquivo de configuração do Seam (regras de fluxo, segurança, controle de conversação)
  12. similar ao arquivo pages.xml, mas específico para o login.xhtml
  13. arquivo de configuração do plugin Hibernate Console

Vamos ver por alto algumas configurações interessantes. Na parte de segurança temos no components.xml:

<event type="org.jboss.seam.security.notLoggedIn">
<action execute="#{redirect.captureCurrentView}"/>
</event>
<event type="org.jboss.seam.security.loginSuccessful">
<action execute="#{redirect.returnToCapturedView}"/>
</event>

O Seam possui o conceito de eventos. Eventos são mensagens que podem ser capturadas ou lançadas, no estilo broadcast. O Seam em si lança vários eventos e podemos capturar esses eventos através de XML, como no exemplo acima. O trecho acima está invocando métodos do componente built-in #{redirect} quando eventos de segurança forem lançados. Ele especifica que a view id JSF deve ser salva quando o usuário não-logado tentar acessar uma página restrita e que essa view id deve ser restaurada uma vez que ele se autentique.
Um outro trecho especifica que componente é responsável pela autenticação:

<security:identity authenticate-method="#{authenticator.authenticate}"
security-rules="#{securityRules}"
remember-me="true"/>

E no pages.xml dizemos que página deve ser utilizada para login:

<exception class="org.jboss.seam.security.NotLoggedInException">
<redirect view-id="/login.xhtml">
<message>Please log in first</message>
</redirect>
</exception>

Aqui temos um tratamento de exceção bem parecido com o de servlets que definimos no web.xml. O usuário será redirecionado para a página login.xhtml e uma mensagem JSF será adicionada.
Se olharmos no login.pages.xml vemos ainda:

<navigation from-action="#{identity.login}">
<rule if="#{identity.loggedIn}">
<redirect view-id="/home.xhtml"/>
</rule>
</navigation>

O que nos lembra bastante as navigation rules JSF. De fato parecem muito, mas as extendem em funcionalidade, podendo não só enviar o usuário para outra página como também lançar um evento, executar um método para avaliar qual será a próxima página, e algumas coisas mais avançadas.

O objetivo desse post é apenas nos familiarizar mais com o Seam e dar uma visão sobre o scaffold que nos foi gerado de base e que iremos usar para desenvolver nossa aplicação. Ainda vamos falar com mais detalhes de eventos, componentes e configurações.

Parte I: O que é Seam?

August 12th, 2008 by rafaelliu 1 comment »

Como recebo vários hints no post JBoss Seam no Tomcat, resolvi escrever mais sobre Seam. Esse post abre uma série de tutoriais de Seam.

Seam é um framework muito amplo. Pegue alguns dos frameworks mais representativos, ponha algumas práticas de desenvolvimento e misture: assim que vejo o Seam. O Seam em sua plenitude usa os frameworks: EJB3, JSF, Facelets, Hibernate, Hibernate Validations, Richfaces, Ajax4JSF, jBPM, Drools (qualquer associação ao nome JBoss é mera coincidência). É muita coisa. Mas ele não só usa esses frameworks, ele também provê uma integração entre eles, disponibiliza componentes built-in (à la Spring, cujo qual inclusive pode-se integrar) e introduz algumas melhorias sobre eles. Além disso ele apregoa algumas práticas como desenvolvimento orientado a componentes e desencoraja outras, como desenvolvimento em camadas.

Vou deixar de lado o que cada framework faz, pois não entra no mérito do que o Seam tem a oferecer. Dando um enfoque bem prático, o Seam:

  • Reduz plumbing code do JSF. Quem já programou com JSF sabe do que estou falando (Não? FacesContext? faces-config.xml?).
  • Resolve o infame problema do “back button” em JSF. E reload, e bookmarking, e …
  • Facilita o uso de JPA. Tem um código cheio de merges()? Usa uma long-running transaction num page flow?
  • Possibilita page flows usando o jBPM.
  • Permite aplicações multi-windows. E finalmente poder clicar “Abrir em nova janela” nos links!
  • Permite o uso de workspaces. Como no Linux.
  • Faz uso extensivo de anotações. Mas também permiti o uso de XML.
  • Possui uma penca de tags JSF. Uns muito úteis, uns bem exóticos…
  • E muito mais!

Dada essa introdução, vou detalhar nos próximos posts cada um desses itens dizendo como realizamos eles com o uso so Seam. Esse blog não é sobre Seam, então esperem outros posts no meio. Até mais!

referência: http://docs.jboss.com/seam/latest/reference/en-US/html/Book-Preface.html

Contribuam com o projeto Fedora Brasil!

August 4th, 2008 by rafaelliu No comments »

Foi aberta a campanha para comprarmos uma Impressora/Duplicadora de CDs/DVDS, fazendo parte do projeto de embaixadores e representando Brasília vim convocar no blog toda comunidade Fedora, e Open Source em geral, a contribuir. O Rodrigo Padula, Fedora LATAM Ambassadors Administrator, está tomando conta da campanha e o equipamento será usado para distribuição de mídias no Brasil pelo projeto Free Media.

São distribuidos prêmios dependendo da contribuição dada, inclusive para empresas, que também podem contribuir. Contribui com R$ 60,00 (e ganhei uma camiseta Fedora). Contribuam também!

JBoss Seam no Tomcat

July 28th, 2008 by rafaelliu 29 comments »

EDIT: esse post é para o Seam 2. Utilizar o Weld (com Seam 3) no Tomcat ficou bem mais fácil, veja um post mais recente sobre o assunto.

Quem está começando a aprender JBoss Seam pode ter a impressão que ele roda apenas no JBoss AS, o que não é verdade. Devido à maioria da documentação ser provida pelo pessoal do JBoss é claro que tudo é feito tendo-se em mente o AS deles. Mesmo quem sabe ser possível rodar sobre outros ASs, muitas vezes não tem idéia de como fazê-lo.

O Seam em si não é um serviço no JBoss, mas sim um framework, o que possibilita sua utilização em vários ASs. Caso não seja usada nenhuma facilidade EE (ou mesmo algumas que o Seam cobre), é possível fazer o deploy de uma aplicação Seam até mesmo sobre um simples container web como o Tomcat e esse post sobre esse caso.

Sendo o Seam uma biblioteca, dificuldades em fazer deploy em containers se limitam a conflitos e dependências. Mas quem já usou Seam sabe da grande mão na roda que é o seam-gen para geração de scaffold (inclusa no JBoss Tools). O problema é que o scaffold gerado é feito para o JBoss.

Então nossos esforços serão basicamente mudar configurações do JBoss para o Tomcat e passar para o Seam o tratamento de features enterprise. As instruções são para o seguinte ambiente:

  • Eclipse 3.3.2 com JBoss Tools 2.1.1.GA
  • JBoss Seam 2.0.3.CR1
  • Apache Tomcat 6.0.16

Vamos lá:

  1. Já que estamos rodando num container web não temos o controle transacional provido pelo AS, então devemos passá-lo para o Seam.
  2. No persistence.xml alteramos o transaction-type da persistence-unit para RESOURCE_LOCAL e removemos a property hibernate.transaction.manager_lookup_class. Vamos mudar também a linha do data source, para utilizar ENC. Ela deve refletir:

    <non-jta-data-source>java:comp/env/jdbc/meuDatasource</non-jta-data-source>

    Note que aqui perdemos a possibilidade de transações distribuídas.

  3. Vamos definir agora no components.xml que o Seam será responsável pelo controle transcional. Adicionamos a seguinte linha:
  4. <transaction:entity-transaction entity-manager="#{entityManager}"/>

    Onde #{entityManager} é o nome da managed-persistence-context, que é o persistence context que será usado pelo Seam nas conversações. A definição do namespace:

    xmlns:transaction="http://jboss.com/products/seam/transaction"
    xsi:schemaLocation="http://jboss.com/products/seam/transaction http://jboss.com/products/seam/transaction-2.0.xsd"
  5. Para finalizarmos com essa parte de persistência falta apenas criar o próprio datasource. Quem usa o Sysdeo deve ir nas propriedades do Tomcat Project fazer isso, mas quem usa o WTP (usem!) não tem essa opção. Ao invés disso podemos usar o esquema de deploy de contexto do Tomcat. Crie um arquivo context.xml em seu WEB-INF/META-INF contendo seu data source. No meu caso:
  6. <?xml version="1.0" encoding="UTF-8"?>
    <context>
    <resource name="jdbc/meuDatasource" type="javax.sql.DataSource" driverClassName="org.hsqldb.jdbcDriver" url="jdbc:hsqldb:meuBD" username="sa" password="" auth="Container" maxActive="20" maxIdle="5" maxWait="10000"/>
    </context>
  7. Por último temos que adicionar as seguintes bibliotecas que não vêm no Tomcat:
  8. persistence-api.jar
    hibernate.jar
    hibernate-entitymanager.jar
    hibernate-validator.jar
    hibernate-annotations.jar
    dom4j.jar
    jta.jar
    hibernate-commons-annotations.jar
    cglib-nodep.jar
    antlr.jar
    jboss-common-core.jar

    jsf-api.jar
    jsf-impl.jar

    commons-logging-1.1.1.jar
    commons-collections-3.2.1.jar
    javassist.jar

    A maioria delas pode ser achada na pasta lib do Seam. No meu caso criei uma User Libraries e as marquei como dependência para a Web Library, assim organizo meus jars e torno mais fácil a adição desses frameworks em projetos futuros.

Assumi que se sabe somo criar um projeto Seam. Deixei a idéia de um tutorial básico de lado, quero ainda falar do uso do JBoss Tools para geração de código e um pouco da integração com o Drools e com o jBPM (muito interessante!!).

Dêem o feedback sobre o que querem ler! Que se houver muita manifestação de interesse faço um post, até se for o caso, sobre o gorado tutorial ou o passo-a-passo para a criação de um projeto Seam.

referência: Edem Morny’s Tech Blog

Ausência

July 24th, 2008 by rafaelliu No comments »

Fiquei ausente por um tempo, mas me explico: viajei de 11 a 21 de julho. A semana anterior a isso foi integralmente dedicada a adiantar o serviço e a semana posterior, a tirar o atraso. Muito trabalho.

Dadas as satisfações, aproveito o post para uma dica: Feed Sifter. Muito interessante e útil para quem assina feed de planets.

E aproveitando mais uma deixa: assinem o planet do Fedora. Esse blog faz parte dele (embora não seja muito ativo).

Semana de Extensão na UnB

July 6th, 2008 by rafaelliu 2 comments »

A Universidade de Brasília anualmente promove um evento chamado Semana de Extensão, que em sua oitava edição esse ano, será realizada de 30 de setembro à 3 de outubro na própria UnB. É basicamente um monte de eventos – palestras, mini cursos, oficinas – em todas as áreas do conhecimento. Para se ter idéia do tamanho, a edição passada teve 272 atividades e um público de 35.893 pessoas. O tema desse ano é Universidade de Democracia. As inscrições para eventos estão abertas até dia 11 de julho.

Todo ano participo como público e já fazia tempo, queria participar como colaborador. Nesse ano me inscrevi para o programa de embaixadores do projeto Fedora e aproveitando o embalo cadastrei o evento Introdução ao SELinux, que pretendo dar usando Fedora.

Enviei ainda outra proposta de palestra com o título Entendendo SOA. Por enquanto enviei apenas as propostas, elas ainda devem ser avaliadas. Assim que tiver a confimação faço um post com mais informações e depois com o material da apresentação. Mas já fica o aviso, todo ano tem coisa interessante na área de TI, quem puder compareça!

Rapidinha: pull vs push MVC

June 24th, 2008 by rafaelliu 1 comment »

O padrão push é o de mais tradição, nele os dados são previamente carregados e disponibilizados para a camada de apresentação. Na prática: por exemplo o Struts com sua Action carregando os dados no request para serem usados na JSP.

No padrão pull a camada de apresentação é quem faz as chamadas aos componentes que irão lhes retornar os dados. Na prática: pro exemplo a página JSF invocando um getter no backing bean.

Resultado: no padrão do Struts muitas vezes os dados são gerados de forma que não podem ser facilmente reutilizados. Por outro lado JSF torna a reutilizacão muito mais clara e direta, através de componentes, no melhor estilo OO. Pessoalmente vejo a relação página-objetos muito mais intuitiva do que página-ação.

Rapidinha: import.sql

June 18th, 2008 by rafaelliu No comments »

Uma facilidade muito desconhecida do Hibernate é o import.sql, que pode ser usado para popular o banco. Basta o hibernate.hbm2ddl.auto estar setado como create ou create-drop que, logo após o banco ser criado, o script será executado.

fonte: http://in.relation.to/9081.lace

Firefox download day

June 15th, 2008 by rafaelliu No comments »

Data confirmada: 17 de junho.

Brasil está com quase 85.000 participantes, mais que quase todos os países europeus, mas muito atrás do Estados Unidos com quase 231.000.

Participe.