Archive for November, 2010

Post relâmpago – solucionando problemas nada óbvios com Jboss e Eclipse

Esse post super breve serve para contar algumas experiências ruins que tive nessa última semana com o Jboss AS 5.1 e a solução para os problemas que me aconteceram. Pode ser que seja o mesmo problema de alguém. As soluções para os dois casos abaixo são ridículas, mas acreditem, gastei horas com as mesmas!

Caso 1 – Jboss entrando em deploy infinitamente!

Pois é, se você tem alguma aplicação exploded no seu Jboss e mais, se essa app contiver xmls de JSF (faces-config), Spring, Seam (pages.xml) no WAR, então é provável que se você usa o jboss 5.1 já lhe aconteceu o bug bizarro do deploy infinito. Extremamente desagradável e irritante, sem contar que se você estiver em um PC ele vira uma carroça. Pois bem, depois de algumas olhadas no Google, vi umas soluções porcas, do tipo mexer no tempo que o Jboss verifica alterações e coisas do gênero.

Pois bem, não se trata de nada disso. O Jboss, em seu auge de loucura, não sei por que diabos cria, na pasta WEB-INF do seu projeto WAR (naquele mesmo local onde estão os xmls de configuração de algum framework) uns arquivos bizarros com extensões mais estranahas ainda. Por exemplo, ele cria um faces-config.xml.spadia, e uns outros arquivos com extensões loucas. A questão é que o Server pira se tiver qualquer coisa com essas extensões que não são apenas .xml  na pasta do projeto exploded. Ou seja, basta deletar da pasta exploded E da pasta do seu projeto (não sei como, mas se você usa sincronizadores tipo FileSync, esses arquivos de extensão estranha vão parar na pasta do seu projeto também. É só isso. Delete esses arquivos e reinicie o Server. Tiro e queda =)

Caso 2 – Workspace do Eclipse enlouquece totalmente com uma tal de SAXParserException e não permite que eu mexa no meu projeto que usa Maven.

Pois é, essa aí me custou muitas horas torrando os neurônios. Vou resumir o que aconteceu, talvez você já tenha passado por um aperto desses.

Estava eu dando clean install em uma aplicação que usa Maven e EJbs com Jboss Seam, quando o Eclipse trava e tive que crashá-lo na força bruta. Normal acontecer isso, especialmente se você usa PC com Windows. Quando reabri o Eclipse, se eu clicasse em qualquer item ou em qualquer módulo do projeto aparecia essa janelinha de erro de SAXParserException e eu não conseguia fazer absolutamente nada no projeto! Até tentei criar uma nova workspace e dar um Import no projeto, mas de nada adiantou, continuou com essa Exception e nada do meu projeto abrir; bateu aquele desespero e aquele peso na consciência de “ó, não, por que não dei commit pro repositório antes disso acontecer??”

Depois de muitas horas perdidas procurando a solução, finalmente encontrei. De alguma forma, meu application.xml estava em branco. Já vi casos em que ele estava incompleto, e ocasionou o mesmo erro. Esse fato gerava esse erro. O mais estranho disso foi que mesmo com o auto-build desligado, o Eclipse permanecia instável. Fui manualmente, através dos diretórios, até a pasta do application.xml e reescrevi o mesmo (num editor de texto comum, porque o Eclipse de fato se recusava a abrir qualquer arquivo do meu projeto!). Após isso dei um refresh na workspace e tudo voltou a funcionar! #win

Espero que esse post tenha sido útil para ajudá-lo caso já tenha passado por um aperto similar!

Advertisements

November 6, 2010 at 5:22 am 1 comment

Comparativo entre arquétipos Maven usando Jboss Seam

Escolhendo o melhor arquétipo Maven para usar com Seam

Enquanto o Seam 3 final não é lançado, uma das melhores formas de construir projetos utilizando Jboss Seam e Maven é através de arquétipos já existentes. Esse artigo lista três arquétipos que considero excelentes e as principais diferenças entre os três.

1 . Arquétipo contendo um WAR simples para ser hotdployed no Jboss AS (De preferência o Jboss AS  5.1) – Use esse arquétipo aqui – http://code.google.com/p/ctpjava/wiki/JBossSeamMavenArchetype

Simples mas agressivo, esse arquétipo é um dos mais completos que já vi. Especialmente pra quem curte e pratica TDD, ele já vem com uma infra de testes muito boa! Deem uma olhada no POM pra ver o que ele contém em suas dependências:

<dependency>

<groupId>org.jboss.seam.embedded</groupId>

<artifactId>hibernate-all</artifactId>

<version>${jboss.embedded.version}</version>

<scope>provided</scope>

</dependency></pre>
<!-- *************** Test Dependencies *************** -->

<dependency>

<groupId>org.testng</groupId>

<artifactId>testng</artifactId>

<version>5.8</version>

<classifier>jdk15</classifier>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.jboss.seam.embedded</groupId>

<artifactId>jboss-embedded-all</artifactId>

<version>${jboss.embedded.version}</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.jboss.seam.embedded</groupId>

<artifactId>jboss-embedded-api</artifactId>

<version>${jboss.embedded.version}</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.jboss.seam.embedded</groupId>

<artifactId>thirdparty-all</artifactId>

<version>${jboss.embedded.version}</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>javax.faces</groupId>

<artifactId>jsf-api</artifactId>

<version>${javax.faces.version}</version>

<scope>provided</scope>

</dependency>

<dependency>

<groupId>javax.faces</groupId>

<artifactId>jsf-impl</artifactId>

<version>${javax.faces.version}</version>

<scope>provided</scope>

</dependency>

<dependency>

<groupId>javax.el</groupId>

<artifactId>el-api</artifactId>

<version>1.2</version>

<scope>provided</scope>

</dependency>

Ele já vem com o testeng (para testes de integração, especialmente) e é possível mockar o Seam de uma forma muito simples para realizar testes unitários!

Fora isso ele já vem com toda a estrutura pronta para hotdeploy, de forma que basta baixar o projeto e dar um mvn:package que a pastinha do projeto já aparece no diretório de deloy do jboss! =)

O projeto em si é extremamente bem feito, com um arquivo de properties para configuração de banco e testes. A configuração dos aspectos do Jboss se encontram no POM do arquivo principal. Bem simples:

<properties></pre>

<java.source.version>1.5</java.source.version>

<jboss.seam.version>2.2.0.GA</jboss.seam.version>

<jboss.richfaces.version>3.3.2.SR1</jboss.richfaces.version>

<jboss.jbpm-jpdl.version>3.2.3</jboss.jbpm-jpdl.version>

<jboss.embedded.version>beta3.SP9</jboss.embedded.version>

<drools.version>5.0.1</drools.version>

<javax.faces.version>1.2_12</javax.faces.version>

<icefaces.version>1.8.1</icefaces.version>

<hotdeploy.version>0.3.3</hotdeploy.version>

<cli.version>0.7</cli.version>

<jboss.server>default</jboss.server>

<jboss.server.directory>F:\Eclipse\jboss-5.1.0.GA\jboss-5.1.0.GA</jboss.server.directory>

<jboss.servers.directory>${jboss.server.directory}/server</jboss.servers.directory>

<jboss.deploy.directory>${jboss.servers.directory}/${jboss.server}/deploy</jboss.deploy.directory>

</properties>

Atenção – só consegui baixar o projeto utilizando Maven 3. Utilizando algum Maven 2.x não rolou de forma alguma.

Único ponto falho que observei no projeto é que ele poderia já vir com  FIleSync…. O hotdeploy é perfeito com o FIleSync, apesar de muitas pessoas reclamarem dele.

Os criadores do arquétipo até fizeram um vídeo explicativo: http://www.youtube.com/watch?v=Zpn-teo1l3E

Vale a pena conferir! =)

Bom, agora vamos partir pra alguma coisa mais pesada – Arquétipos de EAR, e não só com WAR. Conheço dois bons arquétipos de EAR:

2. Arquétipo de referência – RI – http://www.glxn.net/seam-maven-refimpl/doc/tutorial/01-gettingstarted.html – de cara é simples e muito eficiente.

Possui ferramentas de testes e usa o OpenEJB. Não cheguei a colocar nenhum projeto em prática com esse arquétipo, apenas baixei para ter uma idéia.  A parte chata dele é que de fato, tal qual sugere o tutorial, você vai ter que puxar o arquétipo com o Tortoise do repositório. Mas no geral é um arquétipo muito bem estruturado e limpo.

3. Arquétipo do Akquinet – http://blog.akquinet.de/2009/09/14/getting-started-with-jboss-seam-and-maven-in-10-seconds/ – esse  é pra agredir mesmo! Na minha opinião, em questão de estrutura é o mais completo, porém o menos organizado. O que chama atenção nele é o módulo de entidades. De fato,  se você já passou pela experiência de tentar criar seu próprio arquétipo Maven para Seam, deve ter sofrido com o módulo de entidades se caso ele estivesse no mesmo projeto. Incrivelmente, o projeto do Akquinet TEM UM MÓDULO DE ENTIDADES!!! E FUNCIONA =D

Procure nos catálogos do seu Eclipse o arquétipo do akquinet. Costuma ter. Caso não tenha, basta puxá-lo digitando

mvn archetype:generate -DarchetypeGroupId=de.akquinet.jbosscc         -DarchetypeArtifactId=jbosscc-seam-archetype -DarchetypeVersion=1.2         -DarchetypeCatalog=http://seam-archetype.sourceforge.net/jbosscc-seam-archetype/1.2/archetype-catalog.xml

Como os outros arquétipos, ele oferece um bom suporte a testes:

<dependency></pre>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.8.1</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.easymock</groupId>

<artifactId>easymock</artifactId>

<version>2.5.2</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.easymock</groupId>

<artifactId>easymockclassextension</artifactId>

<version>2.5.2</version>

<scope>test</scope>

</dependency>

Se bem que faltou algo mais aprimorado aí…. Como o tsteNG e o OpenEJB que não estão presentes…

Outra bomba nesse projeto é a ausência de uma estruturação para hotdeploy…. É preciso configurar o projeto war no braço pra conseguir… Meu post anterior possui um tutorial que ensina a fazer isso e ensina também a usar o FileSync com esse arquétipo. Ele também poderia conter mais arquivos de properties para facilitar algumas configurações.

Mas tirando essas questões, é um projeto bem completo, atent para configurações de cachê de segundo nível, Drools, Bootstrapper de EJBs e por aí vai. Recomendo fortemente!

Uma dica para os projetos EAR que ainda não testei (mas pretendo) –  Colocar o Arquillian em um desses projetos! Ainda não conhece o Arquillian??? http://www.jboss.org/arquillian

O Arquillian na minha opinião foi um insight muito grande e é bastante promissor (pelo menos no meu ponto de vista). Seria ótimo vê-lo rodando com um desses arquétipos, mesmo que ele ainda esteja em sua versão alpha. O que acham? =)

Para aqueles que desejam construir um arquétipo do zero, a pedida é usar o Jboss Tools para dar uma mãozinha…. Vejam essa publicação: http://docs.redhat.com/docs/en-US/JBoss_Developer_Studio/4.0/html/Seam_Developer_Tools_Reference_Guide/mavenized_seam.html – A versão 3.5.1 para Eclipse Galileo e 3.5.2 para Eclipse Helios já fornecem suporte para uma integração nativa na hora de criar um projeto com Seam. Basta seguir os passos desse tutorial =)

E para quem quiser mais informações, aí vai algumas leituras que considero úteis:

É isso, pessoal, espero que aprendam algo! Até a próxima!

November 1, 2010 at 2:49 am 5 comments


Calendar

November 2010
M T W T F S S
« Oct   Dec »
1234567
891011121314
15161718192021
22232425262728
2930  

Posts by Month

Posts by Category