Fiz um guia pra mim mesmo com o passo a passo pra criar um projeto web baseado em Seam 3 e JBoss AS 7 e pensei em compartilhar aqui, pois muita gente apanha (como apanhei) pra fazer esse mix funcionar. Por enquanto esse guia ensina a montar um projeto a partir de um archetype Maven que exibe uma página simples e foi montado pegando "retalhos" pela internet, sendo que alguns que guardei a fonte estão citados no texto. Mais pra frente complementarei o tutorial ensinando a usar o framework para persistência, JSF e beans gerenciados. Também pretendo "formalizar" o tutorial e enviar pro GUJ no formato padrão.
Espero que seja útil. [size=18]Por favor, se este tutorial te ajudar, deixe um comentário. [/size] Se não funcionar, procure no Google usando a descrição da exceção ou o código de erro. 99,9% dos problemas que tive até hoje resolvi buscando por aí (tanto que acho que meu cadastro no GUJ é desse ano e não tenho outro em nenhum fórum). Se estiver arrancando os cabelos, descreva seu problema e coloque suas configurações e ajudarei da melhor maneira possível.
* Tutorial desenvolvido usando Windows 7 64-bits - alguns passos podem precisar ser adaptados para outras versões do S.O.
* Todas as instalações são feitas usando as configurações padrões, exceto quando ressalva em contrário
Tecnologias usadas:
- Netbeans 7 + Seam 3 + JBoss AS 7 + Maven 3 + MySQL 5.5
[size=18]PREPARAÇÃO[/size]
Para este tutorial será utilizada a pasta c:\devel como raiz
- Crie pasta "apps" e coloque todos os downloads nela
- Crie a pasta "projetos", onde serão colocados os arquivos de projeto
-------------------------------------------------------------------------------------------------
[size=18]DOWNLOADS[/size]
- Java EE SDK 6 com JDK 7 - http://www.oracle.com/technetwork/java/javaee/downloads/java-ee-sdk-6u3-jdk-7u1-downloads-523391.html
- NetBeans 7.1.2 com Java EE - http://netbeans.org/downloads/start.html?platform=windows&lang=pt_BR&option=javaee
- JBoss AS 7.1.1 Final - http://download.jboss.org/jbossas/7.1/jboss-as-7.1.1.Final/jboss-as-7.1.1.Final.zip
- Apache Maven 3.0.4 - http://www.apache.org/dyn/closer.cgi/maven/binaries/apache-maven-3.0.4-bin.zip
- MySQL Community Server 5.5.24.1 - http://dev.mysql.com/downloads/installer/5.5.html
-- Requer: .NET Framework 4.0 - http://www.microsoft.com/downloads/details.aspx?FamilyID=0a391abd-25c1-4fc0-919f-b21f31ab88b7&displayLang=pt-br
-- Requer: Visual C++ Redistributable - http://www.microsoft.com/en-us/download/details.aspx?id=5555
-------------------------------------------------------------------------------------------------
[size=18]INSTALAÇÃO DOS APLICATIVOS[/size]
- Instalar Java EE
- Instalar .NET (Executar como administrador)
- Instalar Visual C++ ( OBS.: Mesmo que seu sistema seja 64-bits (x64), deve-se instalar a versão 32-bits (x86))
- Instalar MySQL 5.5 (Perfil Developer)
- Instalar NetBeans 7.1.2 (Sem Glassfish - já instalado pelo Java SDK)
- Descompacte o arquivo "apache-maven-3.0.4-bin.zip" na pasta "Apps"
- Descompacte o arquivo "jboss-as-7.1.1.Final.zip" na pasta "Apps"
- Editar variáveis de ambiente de usuário
-- Iniciar -> Painel de controle -> Sistema e segurança -> Sistema -> Configurações avançadas do sistema -> Botão Variáveis de ambiente
-- Alternativamente: tecla WIN + Pause -> Configurações avançadas do sistema -> Botão Variáveis de ambiente
-- No quadro de cima, variáveis de usuário clique em "Novo" e adicione:
Nome da variável: JAVA_HOME
Valor da variável: C:\Program Files\Java\jdk1.7.0_04
Nome da variável: JBOSS_HOME
Valor da variável: C:\devel\apps\jboss-as-7.1.1.Final (SEM BARRA NO FINAL!)
Nome da variável: MAVEN_HOME
Valor da variável: C:\devel\apps\apache-maven-3.0.4
Nome da variável: Path
Valor da variável: %MAVEN_HOME%\bin;%JAVA_HOME%\bin
-- Testar Maven digitando "mvn ?version" no cmd
-- Testar Java digitando "java ?version" no cmd
-------------------------------------------------------------------------------------------------
[size=18]CONFIGURAÇÃO[/size]
MySQL
- Abrir command line e digitar (alternativamente use o MySQL Workbench para criar as tabelas e sincronizar com o servidor):
-- create database dbtutorial;
-- criar tabela "usuario"
CREATE TABLE IF NOT EXISTS `dbtutorial`.`usuario` ( `idusuario` INT NOT NULL AUTO_INCREMENT , `nome` VARCHAR(80) NULL , `cidade` VARCHAR(50) NULL , PRIMARY KEY (`idusuario`) )ENGINE = InnoDB;
-- Criar dados para consulta
INSERT INTO `dbtutorial`.`usuario` (`idusuario`, `nome`, `cidade`) VALUES (1, 'Jose', 'Sao Paulo');
INSERT INTO `dbtutorial`.`usuario` (`idusuario`, `nome`, `cidade`) VALUES (2, 'Maria', 'Belo Horizonte');
INSERT INTO `dbtutorial`.`usuario` (`idusuario`, `nome`, `cidade`) VALUES (3, 'Joao', 'Brasilia');
INSERT INTO `dbtutorial`.`usuario` (`idusuario`, `nome`, `cidade`) VALUES (4, 'Joana', 'Salvador');
MAVEN
- Configurar o Maven para usar o repositório JBoss
-- Executar "C:\devel\apps\apache-maven-3.0.4\bin\mvn.bat"
-- Copiar arquivo "C:\devel\apps\apache-maven-3.0.4\conf\settings.xml" para a pasta "C:\Users\USERPROFILE\.m2"
-- Substituir todo o arquivo com o conteúdo abaixo:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups>
<pluginGroup>org.jboss.maven.plugins</pluginGroup>
</pluginGroups>
<!-- Caso necessário configurar um proxy, descomente a seção abaixo -->
<!--
<proxies>
<proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<username>user</username>
<password>pass</password>
<host>proxy.com.br</host>
<port>80</port>
<nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy>
</proxies>
-->
<profiles>
<profile>
<id>jboss-public-repository</id>
<repositories>
<repository>
<id>jboss-public-repository-group</id>
<name>JBoss Public Maven Repository Group</name>
<url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url>
<layout>default</layout>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>jboss-public-repository-group</id>
<name>JBoss Public Maven Repository Group</name>
<url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url>
<layout>default</layout>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>jboss-public-repository</activeProfile>
</activeProfiles>
</settings>
- Criar um .bat na pasta C:\devel\projetos\ contendo o comando:
mvn archetype:generate -DinteractiveMode=n -DarchetypeArtifactId=jboss-javaee6-webapp -DarchetypeGroupId=org.jboss.weld.archetypes -DarchetypeVersion=1.0.1.CR2 -DarchetypeRepository=central -DgroupId=br.com.tutorial -DartifactId=tutorial
-- -DgroupId= nome dos packages de código fonte do projeto
-- -DartifactId= nome do projeto Maven
-- -DarchetupeArtifactId= id do artefato a ser utilizado. Lista de artefatos disponíveis:
http://search.maven.org/#search|ga|1|g%3A%22org.jboss.weld.archetypes%22
- Execute o .bat
-------------------------------------------------------------------------------------------------
[size=18]CONSTRUINDO O PROJETO NO NETBEANS[/size]
- Abrir e verificar se é necessário atualizar: Ajuda -> verificar Atualizações
- Instalar e reinicializar o NetBeans
- Abrir o projeto criado pelo Maven: Arquivo -> Abrir projeto...
- Navegar até a pasta "C:\devel\projetos" e abrir o projeto "tutorial" com o ícone do Maven
- Botão direito -> Exibir e resolver problemas -> Construção principal (demora um pouco)
- Botão direito -> Definir Configuração ->
- Botão direito -> Construir com dependências.
-------------------------------------------------------------------------------------------------
[size=18]CONSTRUINDO O PROJETO NO ECLIPSE[/size]
- Abrir IDE
- Marketplace - Maven Integration for Eclipse WTP
- Reinicar Eclipse
- Marketplace - Jboss Tools (Indigo)
- Reinicar Eclipse
- Window -> Preferences -> Server -> Runtime Enviroments -> Add...
-- JBoss Community -> JBoss 7.1 Runtime
-- Mudar Home Directory para C:\devel\apps\jboss-as-7.1.1.Final
- Botão direito no projeto -> Properties -> Java Compiler -> Annotation Processing
-- Marcar "Enable annotation processing", "Apply" e faça o build do projeto
Fonte: http://docs.jboss.org/hibernate/stable/jpamodelgen...ence/en-US/html_single/#d0e319
- File -> Import -> Digitar "Maven" -> Existing Maven Projects
-- Root Directory c:\devel\projeto\tutorial -> Finish
- Botão direito no projeto -> Properties -> Targeted Runtime
-- Selecionar servidor criado, apply, ok
- Run as
- Run on server -> Jboss 7.1 Runtime
- Marcar "Always use this server when running this project" -> Finish
OBS.: O Eclipse dá vários warnings mas infelizmente não tive tempo de mostrar como resolver todos. Procure na Internet, 99,9% dos problemas podem ser encontrados nela.
No futuro irei melhorar essa seção.
-------------------------------------------------------------------------------------------------
EXECUTANDO NO GLASSFISH
Neste momento você pode executar o projeto criado a partir do archetype, no Glassfish. Nos passos seguintes, os arquivos do projeto serão retirados ou modificados para funcionar com o JBoss e não funcionarão no Glassfish.
- Baixar weld bundle
https://repository.jboss.org/nexus/content/repositories/snapshots/org/jboss/weld/weld-osgi-bundle/1.1.0-SNAPSHOT/weld-osgi-bundle-1.1.0-20110726.041819-79.jar
- Colocar na pasta "C:\Users\USERPROFILE\GlassFish_Server\glassfish\modules"
- Apagar "weld-osgi.bundle.jar"
- Renomear arquivo baixado para "weld-osgi-bundle.jar"
- Executar projeto pela IDE
-------------------------------------------------------------------------------------------------
- Para limpar todos os arquivos do projeto modelo criado pelo Maven
-- Apagar os arquivos:
-- Pacotes de código fonte: todos arquivo .java (manter packages)
-- Pacotes de testes/br.com.tutorial.test/MemberRegistrationTest.java
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="primary" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:jboss/datasources/MySqlDS</jta-data-source>
<properties/>
</persistence-unit>
</persistence>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE datasources PUBLIC "-//JBoss//DTD JBOSS JCA Config 1.5//EN"
"http://www.jboss.org/j2ee/dtd/jboss-ds_1_5.dtd">
<datasources>
<local-tx-datasource>
<jndi-name>java:jboss/datasources/MySqlDS</jndi-name>
<use-java-context>true</use-java-context>
<connection-url>jdbc:mysql://localhost:3306/dbtutorial</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>***********SENHA DO BANCO DE DADOS**************</password>
<min-pool-size>5</min-pool-size>
<max-pool-size>20</max-pool-size>
</local-tx-datasource>
</datasources>
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
template="/WEB-INF/templates/default.xhtml">
<ui:define name="content">
<h1>Welcome to Java EE 6!</h1>
<p>You have successfully deployed a Java EE 6 web application.</p>
</ui:define>
</ui:composition>
- Adicionar servidor Glassfish (pro-forma, para driblar o IDE)
-- Ferramentas -> Servidores -> Adicionar servidor -> GlassFish Server 3+
-- Localização da instalação "C:\Users\USERPROFILE\GlassFish_Server" (encontrado automaticamente)
-- Next -> Finalizar
- Limpar e construir o projeto (Shift + F11)
-------------------------------------------------------------------------------------------------
[size=18]EXECUTANDO NO JBOSS[/size]
Configuração
- Adicionar usuário com o script "C:\devel\apps\jboss-as-7.1.1.Final\bin\add-user.bat"
-- No primeiro e no segundo atributo, apenas aperte enter
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="com.mysql">
<resources>
<resource-root path="mysql-connector-java-5.1.13-bin.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
<module name="javax.servlet.api" optional="true"/>
</dependencies>
</module>
FONTES:
https://community.jboss.org/wiki/DataSourceConfigurationinAS7#Installing_the_JDBC_Driver
http://planet.jboss.org/post/jboss_as_7_1_0_final_thunder_released_java_ee_6_full_profile_certified
<datasources>
<datasource jndi-name="java:jboss/datasources/MySqlDS" pool-name="MySqlDS" enabled="true" use-java-context="true">
<connection-url>jdbc:mysql://localhost:3306/dbtutorial</connection-url>
<driver>com.mysql</driver>
<security>
<user-name>root</user-name>
<password>***********SENHA DO BANCO DE DADOS**************</password>
</security>
</datasource>
<drivers>
<driver name="com.mysql" module="com.mysql">
<xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
</driver>
</drivers>
</datasources>
FONTE:
http://docs.jboss.org/ironjacamar/userguide/1.0/en-US/html/deployment.html#deployingds_descriptor
-------------------------------------------------------------------------------------------------
[size=18]FAZENDO O DEPLOY[/size]
Como ainda não encontrei uma maneira de fazer o deploy pelo "Executar" do NetBeans, uso um arquivo .bat que copia o novo WAR para a pasta de deploy e cria um arquivo "tutorial.war.dodeploy" - um arquivo vazio que sinaliza ao JBoss AS que há necessidade de se fazer o deploy do projeto.
- Iniciar container "C:\devel\apps\jboss-as-7.1.1.Final\bin\standalone.bat"
- Console: http://localhost:9990/ (logar com usuario criado anteriormente)
- Página: http://localhost:8080/tutorial/
- Criar um arquivo "redeploy.bat" na pasta "C:\devel\apps\jboss-as-7.1.1.Final\standalone\deployments" com o conteúdo abaixo:
xcopy /U /Y C:\devel\projeto\tutorial\target\tutorial.war C:\devel\apps\jboss-as-7.1.1.Final\standalone\deployments
echo>> tutorial.war.dodeploy
- Executar o "redeploy.bat" e verificar se a aplicação está rodando em http://localhost:8080/tutorial/
OBS.: Ao fazer o redeploy várias exceções são lançadas no console do JBoss AS, relacionadas ao Logger. Como ela não influencia no funcionamento desse projeto básico, não procurei como corrigir.
Nota: Alterei o título pois o foco é a geração do projeto a partir do archetype e or funcionar nas duas IDE's (NetBeans 7.1.2 e Eclipse Indigo)


