Posts filed under ‘Jboss Seam’

jbpm + Seam 3 + JBoss AS 7 => Yes, Solved!

Hi, all!!

Some of you emailed me saying that it was impossible to have jbpm + Seam 3 + JBoss AS 7 up and running. And yes, I have been trying to deploy an application with this death combo and have been experienced some problems.
First of all, I entered #seam-dev IRC chat, and found out that I should use version 3.0.1-SNAPSHOT for Seam modules (in case, I had to adopt this version for persistence, config and faces module). 3.0.1-SNAPSHOT really solved lots of problems, BUT I still got some weird persistence problems when I deployed the application. Obviously I thought they were related to persistence module, but no, it was Security module that is unstable until the release of this post. So, I prefer to remove Security module for while, I did not have time to see how could I hack it. Well, everything should work by now, but… No. I started having weird problems with faces-config.xml – JBoss log accused some exceptions telling me something like that:
18:06:56,635 INFO  [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-5) Unsanitized stacktrace from failed start…: java.lang.UnsupportedOperationException
     at javax.faces.application.Application.getResourceHandler(Application.java:287) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
     at javax.faces.application.ApplicationWrapper.getResourceHandler(ApplicationWrapper.java:506) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
     at org.jboss.seam.faces.environment.SeamApplicationWrapper$Proxy$_$$_WeldClientProxy.getResourceHandler(SeamApplicationWrapper$Proxy$_$$_WeldClientProxy.java) [seam-faces-3.1.0-20110720.041339-24.jar:]
     at com.sun.faces.config.processor.ApplicationConfigProcessor.setResourceHandler(ApplicationConfigProcessor.java:752) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.ApplicationConfigProcessor.process(ApplicationConfigProcessor.java:310) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.AbstractConfigProcessor.invokeNext(AbstractConfigProcessor.java:114) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.LifecycleConfigProcessor.process(LifecycleConfigProcessor.java:116) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.AbstractConfigProcessor.invokeNext(AbstractConfigProcessor.java:114) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.FactoryConfigProcessor.process(FactoryConfigProcessor.java:216) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:339) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:226) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3368) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
     at org.apache.catalina.core.StandardContext.start(StandardContext.java:3821) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
     at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:70) [jboss-as-web-7.0.0.Final.jar:7.0.0.Final]
     at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1765)
     at org.jboss.msc.service.ServiceControllerImpl$ClearTCCLTask.run(ServiceControllerImpl.java:2291)
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_26]
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_26]
     at java.lang.Thread.run(Thread.java:680) [:1.6.0_26]
18:06:56,637 SEVERE [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-5) Critical error during deployment: : com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED! null
     at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:358) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:226) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3368) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
     at org.apache.catalina.core.StandardContext.start(StandardContext.java:3821) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
     at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:70) [jboss-as-web-7.0.0.Final.jar:7.0.0.Final]
     at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1765)
     at org.jboss.msc.service.ServiceControllerImpl$ClearTCCLTask.run(ServiceControllerImpl.java:2291)
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_26]
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_26]
     at java.lang.Thread.run(Thread.java:680) [:1.6.0_26]
Caused by: java.lang.UnsupportedOperationException
     at javax.faces.application.Application.getResourceHandler(Application.java:287) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
     at javax.faces.application.ApplicationWrapper.getResourceHandler(ApplicationWrapper.java:506) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
     at org.jboss.seam.faces.environment.SeamApplicationWrapper$Proxy$_$$_WeldClientProxy.getResourceHandler(SeamApplicationWrapper$Proxy$_$$_WeldClientProxy.java) [seam-faces-3.1.0-20110720.041339-24.jar:]
     at com.sun.faces.config.processor.ApplicationConfigProcessor.setResourceHandler(ApplicationConfigProcessor.java:752) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.ApplicationConfigProcessor.process(ApplicationConfigProcessor.java:310) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.AbstractConfigProcessor.invokeNext(AbstractConfigProcessor.java:114) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.LifecycleConfigProcessor.process(LifecycleConfigProcessor.java:116) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.AbstractConfigProcessor.invokeNext(AbstractConfigProcessor.java:114) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.FactoryConfigProcessor.process(FactoryConfigProcessor.java:216) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:339) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     … 9 more
18:06:56,639 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/ui]] (MSC service thread 1-5) Exception sending context initialized event to listener instance of class com.sun.faces.config.ConfigureListener: java.lang.RuntimeException: com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED! null
     at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:294) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3368) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
     at org.apache.catalina.core.StandardContext.start(StandardContext.java:3821) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
     at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:70) [jboss-as-web-7.0.0.Final.jar:7.0.0.Final]
     at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1765)
     at org.jboss.msc.service.ServiceControllerImpl$ClearTCCLTask.run(ServiceControllerImpl.java:2291)
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_26]
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_26]
     at java.lang.Thread.run(Thread.java:680) [:1.6.0_26]
Caused by: com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED! null
     at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:358) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:226) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     … 8 more
Caused by: java.lang.UnsupportedOperationException
     at javax.faces.application.Application.getResourceHandler(Application.java:287) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
     at javax.faces.application.ApplicationWrapper.getResourceHandler(ApplicationWrapper.java:506) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
     at org.jboss.seam.faces.environment.SeamApplicationWrapper$Proxy$_$$_WeldClientProxy.getResourceHandler(SeamApplicationWrapper$Proxy$_$$_WeldClientProxy.java) [seam-faces-3.1.0-20110720.041339-24.jar:]
     at com.sun.faces.config.processor.ApplicationConfigProcessor.setResourceHandler(ApplicationConfigProcessor.java:752) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.ApplicationConfigProcessor.process(ApplicationConfigProcessor.java:310) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.AbstractConfigProcessor.invokeNext(AbstractConfigProcessor.java:114) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.LifecycleConfigProcessor.process(LifecycleConfigProcessor.java:116) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.AbstractConfigProcessor.invokeNext(AbstractConfigProcessor.java:114) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.processor.FactoryConfigProcessor.process(FactoryConfigProcessor.java:216) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:339) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     … 9 more
18:06:56,641 ERROR [org.apache.catalina.core.StandardContext] (MSC service thread 1-5) Error listenerStart
18:06:56,641 ERROR [org.apache.catalina.core.StandardContext] (MSC service thread 1-5) Context [/ui] startup failed due to previous errors
18:06:56,642 SEVERE [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-5) Unexpected exception when attempting to tear down the Mojarra runtime: java.lang.IllegalStateException: Application was not properly initialized at startup, could not find Factory: javax.faces.application.ApplicationFactory
     at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:804) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
     at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:306) [jboss-jsf-api_2.0_spec-1.0.0.Final.jar:1.0.0.Final]
     at com.sun.faces.config.InitFacesContext.getApplication(InitFacesContext.java:108) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at com.sun.faces.config.ConfigureListener.contextDestroyed(ConfigureListener.java:327) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4]
     at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:3465) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
     at org.apache.catalina.core.StandardContext.stop(StandardContext.java:3970) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
     at org.apache.catalina.core.StandardContext.start(StandardContext.java:3888) [jbossweb-7.0.0.CR4.jar:7.0.0.Final]
     at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:70) [jboss-as-web-7.0.0.Final.jar:7.0.0.Final]
     at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1765)
     at org.jboss.msc.service.ServiceControllerImpl$ClearTCCLTask.run(ServiceControllerImpl.java:2291)
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_26]
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_26]
     at java.lang.Thread.run(Thread.java:680) [:1.6.0_26]
18:06:56,646 INFO  [org.jboss.web] (MSC service thread 1-5) registering web context: /ui
18:06:56,647 INFO  [org.jboss.as] (MSC service thread 1-5) JBoss AS 7.0.0.Final “Lightning” started in 22974ms – Started 485 of 544 services (59 services are passive or on-demand)
Wow, really weird. Removing Seam Faces module seems to solve the problem. LOL, obviously I couldn’t remove it. So, there should be some dependency screwing up my project. After 3 days looking for that, I found out what was it. As the title of the post says, this project uses jbpm, and one of jbpm modules is the human-tasks modules, which… Has a seam 2 lib as one of its dependencies. Yep, thats true, so Seam 2 crashes with Seam 3 causing lots of weird exceptions…
So i just removed the Seam 2 dependency adding a <exclusion> block at my pom.xml:

<exclusion>

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

<artifactId>jboss-seam</artifactId>

</exclusion>
 (add this into the jar that depends on jbpm human-task module)
Then, just put Seam faces module back. Everything sould work fine 🙂

July 27, 2011 at 6:36 pm 2 comments

Seam 3 – criando o projeto

Olá, pessoal!

Dando continuidade à série de posts sobre Seam 3, vamos criar um projeto.

[Obs: Esse post presume que você já saiba algo sobre Seam 3. Se você é um absolute beginner, dê uma olhada nesse post, e instale o Maven 3, baixe o Jboss 6 e o Eclipse e configure o path do Jboss] .

Inicialmente, abra o settings.xml do Maven [ele fica na pasta oculta /.m2/settings.xml; se você usa Mac OS estará em /Users/seuUser/.m2/settings.xml. Caso você não tenha um, basta criar com o comando touch settings.xml dentro da pasta .m2 ]. Você precisa adicionar o profile do Jboss public repository. Seu settings.xml deve ficar similar a este:


<settings>

<profiles>

<profile>

<id>jboss-public-repository</id>

<activation>

<property>

<name>jboss-public-repository</name>

<value>!false</value>

</property>

</activation>

<repositories>

<repository>

<id>jboss-public-repository-group</id>

<name>JBoss Public Maven Repository Group</name>

<url>http://repository.jboss.org/nexus/content/groups/public</url>

<releases>

<enabled>true</enabled>

<updatePolicy>never</updatePolicy>

</releases>

<snapshots>

<enabled>false</enabled>

<updatePolicy>never</updatePolicy>

</snapshots>

</repository>

</repositories>

<pluginRepositories>

<pluginRepository>

<id>jboss-public-repository-group</id>

<name>JBoss Public Maven Repository Group</name>

<url>http://repository.jboss.org/nexus/content/groups/public</url>

<releases>

<enabled>true</enabled>

<updatePolicy>never</updatePolicy>

</releases>

<snapshots>

<enabled>false</enabled>

<updatePolicy>never</updatePolicy>

</snapshots>

</pluginRepository>

</pluginRepositories>

</profile>

</profiles>

</settings>

A próxima etapa é criar um novo projeto a partir de um arquétipo Weld. Abra o terminal e rode:

 mvn archetype:generate -DarchetypeArtifactId=jboss-javaee6-webapp -DarchetypeGroupId=org.jboss.weld.archetypes -DarchetypeVersion=1.0.1.CR1 -DarchetypeRepository=central

Mais informações sobre arquétipos Weld aqui.

Preencha os campos com os dados de sua aplicação. Para exemplo, foi criada uma aplicação chamada portalacademico [disponibilizei no Github, você pode acessá-la aqui.]

Agora vem a parte mais delicada – alterar alguma coisas no pom.xml. Como já expliquei em outros posts, o Seam 3 é inteiro feito com Maven. Para usa-lo, você deve adicionar os módulos que deseja em sua aplicação.

Esse post sugere um pom.xml completamente estável. Ele contém diversas dependências, você pode remove-las por sua conta e risco 🙂 Vá no diretório do seu projeto e abra o arquivo pom.xml.  Copie todo o conteúdo desde a tag <repositories> até o final do arquivo (antes da tag </project> ) deste pom.xml, e substitua no seu arquivo local.

Certiqifque-se que manteve as tags de descrição do pom (<modelVersion>, <articatId>, <properties>, etc) intactas, de acordo com o projeto que você gerou.

Lembrete: Na tag <properties>, na propriedade <jboss.home>, cosumo colcoar o local onde se encontra o Jboss AS 6 hard coded. Se o Maven reclamar, fica a dica para você colcoar hard coded também. No meu caso,  <jboss.home>/usr/local/jboss/jboss-6.0.0.Final/</jboss.home> .

Com o pom.xml correto, vá ao terminal e rode, na pasta do projeto:

 mvn clean install jboss:hard-deploy 

No próximo post vou explorar o projeto utilizando o Eclipse 🙂

July 2, 2011 at 3:24 pm 3 comments

Seam 3 – Iniciando!

Olá, pessoal! Muitas pessoas tem me pedido um tutorial full power pró de Seam 3, desde o que precisa ter no ambiente de trabalho até um exemplo de app simples.

Então vamos por etapas. =)

Ambiente de trabalho

A primeira coisa necessária é o Java (claro). De preferência o JDK 6.

Em seguida, é preciso ter o Maven 3 (tal qual descrevi em outro post – o Seam 3 é inteiramente baseado em Maven 3). Baixe o Maven 3 aqui. A instalação vai depender do seu SO, mas basicamente é só descompactar e registrar o mvn no seu PATH.

Por último, você precisa de um servidor JEE 6 (Glassfish 3, JBoss 6 ou 7) ou servlet container que suporte o Weld (Tomcat em sua última versão, por exemplo). Usarei o JBoss 6 e eventualmente o 7 em tudo que fizer aqui. Tip – Jboss 7 starta em 2 segundos. Veja você mesmo:

Jboss 7 - startup

(Dica – configure um JBOSS_HOME no seu PATH)

(Baixe o Jboss 6 ou 7 aqui)

Você também pode querer uma IDE. Eu recomendo  Eclipse Helios. Embora ainda não haja suporte do JBoss Tools para Seam 3, ainda acho que é uma boa IDE para se trabalhar. [Dica pra quem está começando – Baixe o Eclipse Helios for Java EE Developers!]

Assim que você baixar o Eclipse Helios, descompacte-o e abra-o. É preciso instalar o plugin do M2Eclipse (Maven para Eclipse).  Basta ire m Help -> Install new software:

Instalar M2Eclipse

Em seguida, encontre o link do m2eclipse, selecione o checkbox e instale o plugin:

Plugin m2eclipse

Baixando alguns exemplos

Depois de instalar o ambiente de trabalho, é interessante baixar alguns exemplos pra ver o Seam 3 em ação. Para tanto, você precisará ter o git instalado. Se você não manja nada de git, aqui há ótimas referências e tutoriais

Basta dar um

 git clone https://github.com/seam/examples.git 

Isso clonará uma série de exemplos para você.

Exemplos do Github

Comecemos pelo clássico exemplo de booking. Abra um terminal e vá até o diretório ../examples/booking.

Em seguida, digite

 mvn package jboss:hard-deploy 

Espere infinitamente o Maven baixar as dependências para você e dar deploy da app no servidor. Depois, inicie o JBoss AS (rode o ./run.sh na pasta bin do sei JBOSS_HOME), e acesse:

http://localhost:8080/seam-booking

Você deve ver algo como

Seam Booking

Coisas que podem dar errado:

  1. NÃO abra o projeto pelo eclipse e tente rodar por lá. Possivelmente vai dar merda.
  2. Se seu JBOSS_HOME falhar, no POM coloque hard-coded apenas para você ver algum resultado:

<properties>

<webapp.directory>src/main/webapp</webapp.directory>

<jboss.home>/usr/local/jboss/jboss-6.0.0.Final/</jboss.home>

<jboss.domain>default</jboss.domain>

</properties>

No próximo post, vamos criar um projeto do zero 😀

Mais informções no site do Seam 3!

May 21, 2011 at 8:11 pm 4 comments

Seam 3 – Final – Released!!

Olá, galera! Desculpem a ausência!

Boas novas! Seam 3 – Final – foi lançado!!!

Para usá-lo em sue projeto, basta adicionar ao seu projeto Mavenizado:

<properties>
   <seam.version>3.0.0.Final</seam.version>
</properties>

Repare – diga ao Maven que você quer a versão 3.0.0.Final =)

Após isso, hora de adquirir o BOM (Bill of Materials)

<dependencyManagement>
   <dependencies>
      <dependency>
         <groupId>org.jboss.seam</groupId>
         <artifactId>seam-bom</artifactId>
         <version>${seam.version}</version>
         <type>pom</type>
         <scope>import</scope>
      </dependency>
   </dependencies>
</dependencyManagement>

Por ultimo, insira os módulos que você precisa, por exemplo:

<dependency>
   <groupId>org.jboss.seam.catch</groupId>
   <artifactId>seam-catch</artifactId>
</dependency>

Mais informações aqui -> http://in.relation.to/Bloggers/Seam300FinalReleased

April 1, 2011 at 3:05 am 7 comments

Seam 3 – Vem com tudo! =)

Olá! Fiquei uns tempos ausente, mas já estou de volta à ativa! =)

Bom, como vocês já devem ter ouvido/lido, o Seam 3 está bastante promissor e com algumas inovações agressivas.

Diferente do Seam 2, o Seam 3 tem uma arquitetura modular. Dêem uma olhada aqui. Para compreender melhor essa nova abordagem é necessário ter alguns conceitos básicos sobre CDI (proveniente da especificação do JEE6, lançado no ano passado).

CDI em 1 parágrafo

Bem por alto, CDI (Context and Dependency Injection) é a antiga especificação de WebBeans. Para quem não conhece os WebBeans, o CDI basicamente, como o nome já diz, sabe injetar (type safe) componentes em diversas tecnologias, e basicamente trata tudo como Managed beans. Só isso =). Anotando o bean com @Named é possível manipulá-lo por EL (Expression language) – há outras anotações também. CDI faz muitas outras coisas, se você quiser mais informações, pode consultar as edições 84 e 85 da Revista Java Magazine ou a edição 40 da antiga revista Mundo Java (agora chamada de MundoJ). Pra quem não assina revistas, aí vão alguns links:

  • Uma introdução um pouco pesada, mas bem completa
  • Um podcast com conteúdo similar ao link acima pra quem tem preguiça de ler
  • Um artigo excelente, mais denso, possui 5 partes, mas só a primeira parte já dá uma boa noção. Esse é o que mais gosto.

Bom, chega de blá blá blá de CDI e vamos ao Seam 3. Você de fato precisava entender o básico disso. Até porque o papai do Seam, Gavin King, é o líder da especificação de CDI (uau!).

Quem usava Seam 2 deve se lembrar que ele possuía umas 3565454564 funcionalidades. Mail, Autenticação, etc, etc. Tantas que às vezes você esquecia que já estava pronto e saía reinventando a roda às cegas, até descobrir que já existia uma superclass que fazia tudo por você, ou algo assim. Pois é, seus problemas devem acabar com a modularização. Cada módulo é independente, ou seja, dá pra usar o Seam sem precisar de todos os módulos. (se você está com preguiça de voltar e pegar o link da figura dos módulos, aqui vai novamente).

Módulos

Módulos… Modules… Essas coisas te lembram alguma coisa? Tipo…. MAVEN? Pois é, o Seam 3 é inteiro construído em cima de Maven. Maven 3! Prestem atenção nisso! Nada de Maven 2.x aqui. Lembra dos POMs do Maven? O pessoal do Seam 3 introduziu o termo BOM (não porque ele seja BOM, mas sim porque é acrônimo de Bill of Materials). É um princípio DRY que tenta facilitar as dependências na hora de construir os módulos do POM, basicamente.

Ok, mas qual a vantagem desses módulos? Bom, MUITAS! Primeiro, o Seam 2 era um jar pesado, hem? 113MB! Agora compare, cada módulo possui entre 2 e 12mb, aproximadamente! Bem mais leve, com muito mais simplicidade!

Bom… Vamos aos módulos. A lista está aqui; é longa; respire fundo e leia! Assumindo a preguiça de ler, fiz um breve (REALMENTE breve) resumo do que é cada uma delas.

  • Seam Solder – Uma api basicona pra CDI
  • Seam Catch – Api para tratar exceções. Não testei isso ainda, mas olhem: http://seamframework.org/Seam3/CatchModule – Promete tratar as Exceptions geradas em eventos manipulador por CDI.
  • Seam Config – Configura beans CDI via XML. Tipo um faces-config modificado.
  • Seam Faces – Vejam a descrição: “In many cases, the functionality provided by this module are prototypes for future versions of the JSF or CDI specifications.” Parece que não faz nada, mas isso faz muito! Dá pra debugar saída de JSF e muitas outras bizarrices de um jeito relativamente fácil. Tem MUITO mais coisas darks nesse cara aí, fiquem ligados nele.
  • Seam International – Módulo de i18n e Locales.
  • Seam JMS – Esse aí é dos bons também! Injeção do JMS e eventos. Pretendo fazer um post bem especial só desse módulo, porque se eu começar a falar dele aqui, vocês não terão paciência pra ir até o fim do post.
  • Seam Persistence – Módulo de nome sugestivo – persistência. Mas merece atenção a alguns detalhes de EJB.
  • Seam Remoting – Lembra do Conversation Scope? Server-side methods? Estão aí nesse cara.
  • Seam REST – Esse aí é o meu favorito! Nome esclarecedor, módulo REST do Seam. Post especial pra ele nos próximos dias!
  • Seam Security – Nome sugestivo – módulo de Security, bem similar às funções do Seam 2, mas dessa vez autenticação e autorização são combinados com CDI.
  • Seam Servlet – Descrição muito extensa, vale a pena ler o resumo daqui – http://seamframework.org/Seam3/ServletModule.
  • Seam Wicket – Permite integração com o Wicket. Não testei isso ainda, porque conheço muito pouco do Wicket. Mas quem sabe se sobrar um tempo eu testo =D

Curtiu? Post longo, mas cheio de novidades! Espero que tenha sido possível “quebrar o gelo” daqueles que nunca tinham palpado nada sobre Seam 3!

Quer testar o Seam 3? Baixe o Maven 3 e o Jboss 6; depois é só começar a brincar com os módulos – http://seamframework.org/Seam3/DistributionDownloads

Nas próximas semanas vou ver se solto posts explicando cada módulo mais detalhadamente, ou pelo menos os principais.

É isso, aguardo feedbacks!


February 22, 2011 at 4:29 am 12 comments

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

Tutorial – JBoss Seam + Jboss AS + Maven + EJB + Eclipse + Jboss Tools

Olá pessoal! Post de inauguração do blog! E pra começar bem, ele traz um tutorial que explica com alguns detalhes com configurar uma aplicação com JBoss Seam + Jboss AS 5 + Maven + EJB 3 + Eclipse Galileo + Jboss Tools + Hot Deploy. Isso é algo que não é muito trivial de se fazer. Graças a um arquétipo de Maven já pré-estruturado o processo se agiliza muito =) O tutorial ficou um pouco extenso, e reúne muitas informações úteis encontradas em diversos sites. Ele se encontra na minha conta do SlideShare e pode ser baixado aqui.

=)

October 9, 2010 at 8:20 pm 1 comment


Calendar

May 2017
M T W T F S S
« Mar    
1234567
891011121314
15161718192021
22232425262728
293031  

Posts by Month

Posts by Category