Archive for July, 2008

JBoss Seam no Tomcat

July 28th, 2008

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

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

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!