instalando e utilizando o appfuse
TRANSCRIPT
Instalando e Utilizando o AppFuse
Renato Moraes de [email protected]
Sérgio Luiz Ruivace [email protected]
28/2/2007 2Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
AppFuse
• Programas Necessários:
28/2/2007 3Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Configurando Variáveis de Ambiente
• Entre nas propriedades do meu computador e vá para a aba avançado e clique no botão Variáveis de Ambiente.
28/2/2007 4Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Configurando Variáveis de Ambiente
• Deve-se criar 3 VAs:
• ANT_HOME – Diretório ondeesta instalado o ant
• CATALINA_HOME - Diretórioonde esta instalado o TomCat
• JAVA_HOME - Diretório ondeesta instalado o Java
28/2/2007 5Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Configurando Variáveis de Ambiente
• Agora adicione a variável PATH:
• %JAVA_HOME%\bin;%ANT_HOME%\bin;%CATALINA_HOME%\bin
28/2/2007 6Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
AppFuse
• 1)Trocar os arquivos properties.xml, build.properties e colocar o JUnit na
pasta lib do ant
a) O JUnit.jar geralmente é encontrado no eclipse, pois este é um framework de
teste que geralmente vem no plugin do eclipse.
28/2/2007 7Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
AppFuse
b) Colocar na lib do ant.
28/2/2007 8Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
AppFuse
• c)Trocar o ip, senha e login do Banco de Dados!!!!!!
• Pasta-> appfuse\properties.xml
28/2/2007 9Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
AppFuse
• Passos no Prompt do DOS
• 2) Path de onde esta o appfuse e digite “ant new”
28/2/2007 10Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Appfuse
Escolha um nome para sua Base de Dados
Escolha um nome para seu package
Escolha o framework a ser utilizado no nosso caso o Spring
28/2/2007 11Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Appfuse
• 3) Voltar um nível para usar o ant setup (obs: agora a imagem está mostrando
outro projeto que foi criado) Passos no DOS.
28/2/2007 12Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
AppFuse
• 3.1) entrar na pasta do novo projeto (ex. cd portinari)
28/2/2007 13Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
AppFuse
• 3.2) Executar ant setup
28/2/2007 14Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
AppFuse
• 3) Existem duas maneiras de fazer, a primeira forma segue abaixo!
• >ant setup -Djsp.precompile=true;tstart;tlog ->(este cmd constrói a aplicação, testa o tomcat e gera um log!)
• 3.1) A segunda forma de fazer segue abaixo!
• > ant setup ->(constrói a aplicação)
28/2/2007 15Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
AppFuse
• 4) importar para o eclipse a aplicação criada. Buscando do seu path onde foi criado.
28/2/2007 16Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
AppFuse
• Abra o browser e digite: http://localhost:8080/<nome_da_aplicação>.Este é o exemplo puzzlestyle
28/2/2007 17Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Appfuse
• Para configurar o ant no eclipse vá em window/preferencesclique em ant e Runtime.
28/2/2007 18Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Appfuse
• Selecione Ant Home Entires(Default) e aperte o botão add ExternalJars. Selecione os JARs que estão na pasta lib do ant que VOCÊ INSTALOU e escolha open. Confirme e reinicie o eclipse
28/2/2007 19Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Appfuse
• Estrutura de diretórios usando o spring:
• Pacotes build são as classes compiladas.
• Pacotes src são as classes do codigofonte.
• Pacotes test são as classes de teste unitário.
• A pasta extras contem componentes que o appfuse adicionou para facilitar a utilização do mesmo.
• Na pasta lib ficam todas as bibliotecas que serão utilizadas no projeto.
• Na pasta web estão as paginas jsp, alguns arquivos de configuração, scripts entre outros.
28/2/2007 20Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Adicionando um pojo
• Crie uma classe no pacote org.appfuse.model dentro do src/dao, ela deve extender o BaseObject do appfuse.
28/2/2007 21Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Adicionando um pojo
• Construa a classe e mapeie com o XDoclet
28/2/2007 22Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Adicionando um pojo
• Para mais informações sobre configuração via xdoclet entre no site http://xdoclet.sourceforge.net/xdoclet/tags/hibernate-tags.html
• Alguns exemplos:/**
* @hibernate.property column="codigo" not-null="false" length="10"
*/
• Mapeando atributo/coluna
/**
* @hibernate.class table="conta"
*/
• Mapeando classe/tabela
/**
* @hibernate.id column="produto_id" generator-class="increment" unsaved-value="null"
*/
• Mapeando atributo/coluna que incrementa automaticamente
/**
* @hibernate.many-to-one column="fk_agencia_id" not-null="false"
*/
• Mapeando muitos para um
28/2/2007 23Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Adicionando um pojo
• Adicione o build.xml dentro do extras/appgen a tela de visualização do ant no eclipse
28/2/2007 24Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Adicionando um pojo
• Execute o install-detailed
• Em seguida ira aparecer uma tela perguntando se as classes serão criadas a partir de um pojo ou uma tabela, escreva pojo e aperte ok
• Depois aparecerá outra tela perguntando o nome do pojo. Digite o nome e aperte ok
• Aparecerá mais uma tela mas não a trataremos. Logo aperte ok sem digitar nada.
28/2/2007 25Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Adicionando um pojo
• Agora selecione seu projeto e aperte F5, note que irão aparecer algumas classes compostas pelo nome do seu pojo em alguns pacotes como o Dao, o service ...
• Adicione ao applicationContext-hibernate.xml o caminho do pojomais o nome seguido de .hbm.xml
28/2/2007 26Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Adicionando um pojo
• Apague a linha <property name="validator" ref="beanValidator"/> no action-servlet.xml do bean com o nome = “nomeDoPojoFormController”.
• Execute o setup do projeto este irá criar o banco de acordo com o mapeamento.
• Agora é só entrar no site do projeto e conferir as paginas que foram criadas para apresentação dos objetos e cadastro
28/2/2007 27Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Appfuse
• Toda vez que for executado o setup do build do projeto serão apagados todos os valores contidos nas tabelas do banco, porem as colunas e as tabelas não serão apagadas e sim modificadas. Ex: caso seja criada uma tabela com nome pessoa e posteriormente mude para cliente e execute o setup, no banco terá uma tabela pessoa e outra cliente. A tabela pessoa deve ser apagada manualmente.
• O install-detailed do build do appgen sempre cria classes pro Dao, pro service, pra web e as paginas. Caso já existam outras com o mesmo nome, elas serão apagadas e geradas outras de acordo com o padrão do appfuse.
• É recomendável antes de utilizar setup do build do projeto, executar o clean e o undeploy no mesmo build. Caso de um erro imprevisível execute os dois também.
28/2/2007 28Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Appfuse
• Quando for feita alguma alteração na parte web do projeto, pode-se executar o deploy-web. Ele é muito mais rápido que o deploy comum e geralmente não precisa reiniciar o tomcat para visualizar na pagina.
• Caso queira inserir dados que sempre serão carregados no banco(pois todas as vezes que se executa o setup os dados são apagados) pode-se alterar o sample-data.xml na pasta metadata/sql ele é um xml que contem dados básicos ou para teste, inserir os dados é só seguir os que já existirem lá.
• Caso queria inserir os dados existentes no saple-data.xmlsem executar o setup é so executar o db-load
28/2/2007 29Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Appfuse
• A pasta lib contem muitas bibliotecas que foram incorporadas pelo appfuse e podem ser utilizadas no projeto.
• Como a dwr utilizada para implementar ajax nas paginas.
• Junit utilizada para realizar testes no projeto.
• Displaytag uma das tags mais usadas pelo appfuse, esta quando recebe uma lista apresenta tabelas muito versáteis e de fácil utilização nos jsps.
28/2/2007 30Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Appfuse
• O seu projeto é baseado em outras bibliotecas ai existentes (ou seja se elas saírem daí vão fazer um estrago danado!) como hibernate, spring, a propria displaytag...
• Para inserir uma nova biblioteca basta colocá-la nessa pasta e em seguida alterar o arquivo lib.properties
28/2/2007 31Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Appfuse
• A pasta web contem muitas informações que serão muito úteis para o projeto.
• Nela estão todas as paginas inclusive as de erro.
• Esta o mapeamento de paginas e controladores.
• Imagens utilizadas no projeto
• Scripts que o appfuseadotou.
• Decoradores, arquivos .css
• Etc
28/2/2007 32Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Appfuse
• Na pasta common da pasta web, estão jsps que estão inclusos em todas as paginas (comuns a todos) como o cabeçalho, o rodapé e o menu.
• Nesta pasta tambem esta o jsp que inclui todas as taglibsexistentes no projeto. Esse jsp é inserido pelo appfusequando ele gera automaticamente uma pagina. Caso não seja gerado adicione esta tag com o comando no inicio do jsp:<%@ include file="/common/taglibs.jsp"%>
• Com ela pode-se usar a core do Java, a display tag, tags de SQL e de internacionalização e caso queira criar uma tagbasta criar uma classe Java no pacote src/web taglibextendendo tagSupport que ela estará incluída nesse jsp.
28/2/2007 33Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Appfuse
• Na pasta decorators tem apenas o default.jsp. Ele éresponsável por adicionar os scripts e os arquivos .css. Caso queira adicionar mais algum basta colocar nesse jsp.
• Na pasta pages, estão as paginas que serão utilizadas no projeto.
• Com o crescimento do projeto tende a crescer muito essa pasta.
• O padrão utilizado pelo appfuse é xxxList.jsp para apresentar todos os objetos de um certo tipo. E xxxForm.jsppara cadastro de um novo, edição de um já existente, nessa edição que ele pode ser deletado.
28/2/2007 34Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Appfuse
• Na pasta scripts estão os arquivos de javascript. Têm muitos arquivos úteis para a apresentação do projeto.
• Um deles é o calendar.js ele facilita a entrada de dados tipo data, de uma forma bem intuitiva para o usuário. Reduzindo possibilidades de falha na coleta desses dados.
• Outros são o prototype.js e o scriptaculous.js eles tem scripts que facilitam a programação em javascript e alem disso têm ferramentas para a utilização de ajax, como o objeto Ajax.Updater do prototype e o Ajax.Autocompleter do scriptaculous. Essas ferramentas são altamente recomendadas pois agilizam no processo de inserção de dados e dão uma aparência desktop para o projeto.
28/2/2007 35Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Appfuse
• Na pasta styles estão os arquivos .css basicos e uns estilos que podem ser escolhidos.
• Com a alteração de um arquivo desses pode-se mudar completamente a visualização da pagina sem precisar alterar o jsp.
• Na pasta WEB-INF estão basicamente arquivos de configuração.
• No arquivo action-servlet.xml está o mapeamento das paginas e controladores, que é melhor explicado na próxima figura.
28/2/2007 36Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Appfuse
Contem o endereço
nomeProjeto/editProduto.html
No action-servlet o bean produtoFormController está assim:<bean id="produtoFormController" class="org.appfuse.webapp.action.ProdutoFormController" autowire="byName">
<!--<property name="validator" ref="beanValidator"/>-->
<property name="formView" value="produtoForm"/>
<property name="successView" value="redirect:produtos.html"/>
</bean>
No action-servlet este endereço esta mapeado assim:
<prop key="/editProduto.html">produtoFormController</prop>
Classe que controla a pagina
28/2/2007 37Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Appfuse
• O arquivo dwr.xml é onde deve-se declarar as classes para usar Ajax.
• Declarando um objeto Produto, ele poderá ser utilizado em javascrip e seus metodos.
<allow>
<convert converter="bean" match="org.appfuse.model.*" />
<create creator="spring" javascript="DwrManager">
<param name="beanName" value="dwrManager"/>
</create>
</allow>
• Este é um exemplo de objeto adicionado, em javascript poderá ser utilizado o objeto DwrManger e todos os seus metodos como:
DwrManager.incluirFase(idTabela, orc, _resposta);
28/2/2007 38Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Appfuse
• No arquivo menu-config.xml será configurado a disposição do menu, como abas e sub-abas
<Menu name="FileUpload" title="menu.selectFile" description="File Upload" width="100" page="/selectFile.html"
roles="admin,user"/>
• É um menu sem sub intens<Menu name="AdminMenu" title="menu.admin" description="Admin Menu" roles="admin" width="120"
page="/users.html">
<Item name="ViewUsers" title="menu.admin.users" page="/users.html"/>
<Item name="ActiveUsers" title="mainMenu.activeUsers" page="/activeUsers.html"/>
<Item name="ReloadContext" title="menu.admin.reload" page="/reload.html"/>
<Item name="FlushCache" title="menu.flushCache" page="/flushCache.html"/>
<Item name="Clickstream" title="menu.clickstream" page="/clickstreams.jsp"/>
</Menu>
• É um menu com sub-itens
28/2/2007 39Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Appfuse
• Na pasta classes dentro da pasta WEB-INF estão alguns arquivos de configuração e os arquivos ApplicationResources
• Esses são os arquivos utilizados para a internacionalização
• De acordo com a língua escolhida no browser o programa irá escolher um desses arquivos para mostrar.
• Caso não tenha a configuração em uma língua o programa buscará na padrão se não encontrar na padrão o programa buscará em qualquer outra.Ex:
produto.id=Id
Poderia ser
produto.id=Identificador
28/2/2007 40Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
Appfuse
• Hierarquia de chamadas• Dao -> DaoHibernate
• Service(manager) -> ServiceImpl(managerImpl)
INTERFACES(FACEDE) IMPLEMENTAÇÃO
CONTROLLER
Utiliza
Utiliza
28/2/2007 41Renato Sousa e Sérgio Cerqueira © LES/PUC-Rio
AppFuse
• Agradecimentos em especial:
• Rodrigos Paes Phd.
• Bibliografia
• https://appfuse.dev.java.net/
• http://xdoclet.sourceforge.net/xdoclet/tags/hibernate-tags.html