DES:vRaptorExtJs

De Wiki Unioeste NTI
Ir para: navegação, pesquisa

VoltarVoltar a Página Inicial - Menu Sistemas



Tabela de conteúdo

Introdução

Este documento descreve os padrões de desenvolvimento dos sistemas da UNIOESTE que utilizam a tecnologia vRaptor+ExtJS

Pequeno histórico

Em janeiro de 2010 iniciaram os estudos e desenvolvimento de sistemas na Unioeste em um padrão unificado, escrevendo aplicações web na plataforma java.

  • Para a construção do "server side", iniciou-se uma pequena base de código compartilhado chamada "sharedev", esta fazendo uso do vRaptor. O vRaptor iniciou na versão 3.1.2 e subiu algumas vezes de versão nos projetos, ficando muito tempo na versão 3.4.1, e em janeiro de 2016, foi atualizado para a versão 3.5.5.
  • Para a construção do "client side" (interface) foram construídos alguns componentes que fazem uso do ExtJS, esses componentes também sendo compartilhados pelos sistemas. As primeiras versões utilizavam ExtJS versão 3.3.1, sendo depois atualizada em alguns sistemas para 3.4, depois para versão 4, e atualmente para a versão 4.2.1, a qual também tem um código de componentes compartilhado no padrão mvc.
  • Para os relatórios foi utilizado o Jasper Reports (desenhando os layouts com o iReport), utilizando a ideia de cadastrar os relatórios e seus filtros em banco. O JasperReports iniciou com a versão 3.7.2 e depois foi atualizado para a versão 4.1.2, a qual não foi mais atualizada pois é necessário recompilar todos relatórios já existentes para funcionarem na nova versão. Teste

    Documentação Externa

    ExtJS

    vRaptor

    Guia para Estudo

    Sistemas que utilizam esta Tecnologia

    Sistema		ExtJs		SVN		Responsáveis		Status
    Academus	4.2 MVC		academus	Tiago/Marcelo		Producao/Desenvolvimento
    Almox		3		almox		Tiago/Elton		Producao
    AvaliacaoIns...	-		-		-			Producao			???
    Login		4.2		login		Márcio			Producao
    Minos           4.2 MVC         minos_mvc	Márcio			Producao
    Osiris		4.2 MVC		osiris		Tiago			Producao
    PIAD		4.2 MVC		piad		Tiago			Desenvolvimento
    pwmunioeste	4.2 MVC		pwmunioeste	Márcio			Producao
    Relatum		-		relatum		Tiago			Producao
    SGC		3		sgc		Tiago			Producao
    SGCCR		4.2 MVC		sgccr_mvc	Tiago			Producao
    SGCV		3		sgcv		Tiago			Producao
    SGEV		4.2 MVC		sgev		Débora		        Desenvolvimento
    SGOC		-		-		-			Producao			???
    SGPDE		4.2 MVC		sgpde_mvc	Márcio			Producao
    SGPic		4.2 MVC        	sgpibic		Lucas/Gean/Guilherme	Producao/Desenvolvimento
    SGPPLS		4.2 MVC		sgppls_mvc	Alessandro		Producao
    SGRD		4.2 MVC		sgrd_mvc	Alessandro		Producao
    SGRF		4.2 MVC		sgrf		Márcio			Producao			???
    Stricto		3		stricto		Lucas/Juliano		Producao/Desenvolvimento	Migrando p/ 4.2 MVC
    
    Desenvolvimento Parado/Extinto:
    Pontus-Web	3		pontus_vraptor	Elton			Parado
    SGA		3		sga_vraptor	Tiago			Extinto
    SGE		3		sge_vraptor	Tiago			Extinto
    SGEM		4.1		sgem		Márcio			Parado
    SGLCC		4.2 MVC		sglcc_mvc	Márcio			Parado
    SGPE		4.1		sgpe		Márcio			Parado
    SGT		3		sgt		Márcio			Extinto
    

    Árvore de diretorios de um projeto vRaptor+ExtJs

    • build
    • conf
    • dist
    • nbproject
    • setup
    • src
      • baseconfig.properties - Arquivo de Configurações Gerais (Conexão com Banco,diretórios,etc)
      • br
        • unioeste
          • projeto
            • controller - Controladores de acesso da visão
            • dao - Objetos de acesso aos dados
            • modelo - Modelos das Entidades do Banco de Dados
            • sessions
              • CriadorDeSessionFactoryConfiguracoes.java - Arquivo de Configurações do Hibernate
          • sharedev - Classes Java compartilhadas entre todos projetos
    • web
      • META-INF
        • MANIFEST.MF
        • context.xml - Configuração do contexto (diretório principal)
      • WEB-INF
        • jsp
          • index
            • genericJson.jsp - Página especial que retorna respostas em formato Json
            • index.jsp - Página inicial que requisita os arquivos JavaScript do projeto
            • index2.jsp - Página especial mostrada quando a conexão é fechada, ou o login não foi possível
        • lib - Bibliotecas (jars) compartilhados entre todos os projetos
        • relatorios - Contem os relatórios na fase de Desenvolvimento (diretório e subdiretórios gerados automaticamente)
        • messages.properties
        • web.xml - Configurações do servidor de aplicação
      • ext - Arquivos da Biblioteca ExtJs
      • icons - Ícones
      • images - Imagens
      • js
        • frmCadastro
        • frmGeral
        • frmPesquisa
        • uteis - Arquivos JavaScript compartilhados entre todos os projetos
        • frmPrincipal.js - Configurações de Construção do menu do sistema e requisições iniciais


    Legenda:

    • diretorio - Diretório de arquivos compartilhados por todos os projetos por meio do SVN.
    • arquivo.extensao - Arquivo de configuração. Importante para o funcionamento do sistema.
    • diretorio - Diretório que contem os principais arquivos da aplicação.
    • arquivo.extensao - Arquivo do projeto
    • diretorio - Diretorio do projeto


    Bibliotecas Java

    Nome Descrição Pacotes Dependências/Relacionadas
    vraptor Framework MVC vraptor
    jasper Geração de relatórios jasperreports,itext,commons-digester,groovy-all,fntArial
    hibernate Framework de Persistência de Dados hibernate,ejb3-persistence,hibernate-annotations,hibernate-validator¹
    flexson Serialização de objetos java para json flexjson
    jtds Conexão com o banco de dados jtds
    mail Envio de emails mail
    gsp Parser de sql gsp
    commons-io Utilidades para streams e arquivos commons-io

    1 - Usado em pouquíssimos lugares, poderia remover

    Atualização do Projeto

    Quando for atualizar o projeto, alguns arquivos locais não compartilhados talvez precisem ser atualizados. Estes arquivos precisam estar atualizados e conforme os padrões para que o sistema interaja corretamente. Estes arquivos são em geral configurações que são diferentes para cada projeto, mas dentro de um padrão. Os arquivos são modificados ocasionalmente/raramente.

    • index.jsp (novos arquivos JS compartilhados; atualização de forma de login) - ocasionalmente
    • CriadorDeSessionFactoryConfiguracoes.java (novos beans compartilhados; atualização de forma de login) - ocasionalmente
    • frmPrincipal.js (atualização da viewport principal ou na forma de login) - ocasionalmente
    • bibliotecas do projeto (novas bibliotecas compartilhadas) - ocasionalmente
    • basesconfig.properties (modificação das configurações gerais: conexão com banco, diretórios, etc) - ocasionalmente
    • index2.jsp (modificação na página de logout ou página de sessão expirada/erro) - raramente
    • genericJson.jsp (modificação na forma de responder objetos JSON) - raramente
    • web.xml (modificação das configurações do servidor de aplicação) - raramente

    Informações atualizadas: como criar novo projeto

    Passo-a-passo para criar um sistema

  • criar sistema, padrão e transações no CCM
  • criar projeto no gitlab (copiando do sistema SIF, que é o com a tecnologia mais atual). A descrição de como fazer isso, está no wiki do Git.
  • criar arquivo properties em /usr/local/sistemas/config no servidor com banco do sistema
  • escolher uma imagem para o sistema e colocar em cdn.unioeste.br/images/systems/
  • fazer deploy pelo deployer, dizendo qual é o grupo em que ficará

    Tecnologias do Projeto mais atual

    Os sistemas mais atualizados são o Relatum e o SIF.
    Estes sistemas estão utilizam o Maven como gerenciador de dependências, com uma dependência direta apenas, que é a biblioteca "sharedev-vraptor4", baseado no framework vRaptor 4. Esta biblioteca contém funções gerais de autenticação, controle de auditoria e transações, logs, conexão com banco de dados, e outras funções comuns a todos os sistemas.
    A interface é feita utilizando-se do framework ExtJs 6 (versão 6.2). A biblioteca de classes comuns está no projeto "sharedev-ext6" e é incluída no projeto por meio de um submódulo do git. A biblioteca contem a viewport padrão com menus básicos de usuário, funcionalidade de CRUD (grids e janelas de edição simples) e outras extensões do ExtJs para funcionalidades úteis.

    Servidores

    Servidores Java

    • 200.201.88.170 midas
    • 200.201.88.171 java1
    • 200.201.88.172 java2
    • 200.201.88.174 master
    • 200.201.88.175 java5 (slave)
    • 200.201.88.182 java6
    • 200.201.88.183 java7
    • 200.201.88.184 java8

    -No 170 há uma instância do Tomcat 8.*; Nos demais há duas instâncias do Wildfly 8.* em cada máquina, trabalhando em cluster.

    • 170 rodam aplicações tomcat;
    • 171,172,183,184 rodam aplicações wildfly (login, academus, etc);
    • 174,175,182 rodam relatórios no wildfly;

    Padronizações vRaptor

    Nomes de Métodos dos Controladores

    Os nomes de métodos devem seguir um padrão para serem identificados pelo controle de transações e de acesso.

    • Métodos que farão escrita no banco de dados, devem iniciar por: adiciona, atualiza ou remove. Exemplos:
      • adiciona
      • atualiza
      • atualizaEstadosEMunicipios
      • removeTodosMunicipios
    • Outros métodos, de leitura, devem iniciar preferencialmente por nomes como: lista, verifica, carrega. Exemplos:
      • verifica
      • lista
      • listaTudo
      • listaPorEstado
      • listaTudoPorEstado
      • carregaDadosPrincipais


    Padronizações ExtJS

    Tamanhos das Janelas

    Para a exibição correta das janelas (considerando resolução 1024x768), os tamanhos devem estar entre:

    • Largura: Mínimo de 500 e Máximo de 700
    • Altura: Mínimo de 100 e Máximo de 500

    Componentes

    Campos Básicos

    Campo Tipo Uso Prefixo padrão
    Ext.form.TextField char,varchar Strings menores tf
    Ext.form.DateField datetime Campo de data com calendário para escolha df
    Ext.form.TextArea text,char,varchar Strings maiores ta
    Ext.form.NumberField decimal, int Números inteiros ou decimais (com/sem separação de casas) nf
    Ext.form.CheckBox bool - Boleanos (Sim/Não) pode ser usado também com char (Ex: 'T','F') desde que seja feito um campo boolean transient no modelo da entidade ck
    Ext.form.Radio int,char,varchar Strings ou números de identificação (poucas opções para ser uma nova tabela) rd
    Ext.form.MoneyField money Dinheiro no formato 50.000,00 mf
    Ext.form.HtmlEditor text,char,varchar Editor de Código HTML he
    Ext.form.SliderField int,decimal Números inteiros ou decimais entre um intervalo sf
    Ext.form.Label text textos lb

    Campos Avançados

    Campo Tipo Uso Prefixo padrão
    Ext.form.ComboBox campo FK (int,char,varchar) com uma descrição (char,varchar) Usado para poucos registros cb
    UxBscGenerico campo FK (int,char,varchar) com uma descrição (char,varchar) Usado para vários registros bsc
    Ext.form.TextFieldRemoteVal int,char,varchar Campo que faz a validação remotamente tfr
    Ext.ux.form.FileUploadField image,blob Upload de arquivo único fup
    AwesomeUploader image,blob Upload de vários arquivos aup

    Campos Especiais

    Campo Tipo Uso Prefixo padrão
    Ext.form.DisplayField int,char,varchar Campo não submetido e não validado dsf
    Ext.form.Hidden int,char,varchar,datetime,money,decimal,text Campo escondido de qualquer tipo que será submetido hf

    Outros Componentes

    Campo Tipo Uso Prefixo padrão
    UxCdsGenerico x Janela de cadastro genérica x
    UxPsqGenerico x Janela de pesquisa genérica x
    UxGrdDuplo x Painel com grid duplo (filtrados/selecionados) x

    Nomenclatura

    • Campos de tela: Utilizar o padrão de prefixo correspondente ao campo que se está utilizando concatenado ao nome do campo no model. Exemplo: objeto Ext.form.TextField para edição de um campo pssFscNome: deve-se colocar o prefixo ft concatenado ao nome do campo pssFscNome, resultando no nome ftPssFscNome

    Funcionamento do Controle de Acesso/Transações

    vRaptor

    Para que um controlador tenha seus métodos verificados pelo controle de acesso, a classe deve ter a seguinte anotação:

    ...
    @Resource
    @TrnName(value = "CodigoDaTransacaoDoControleDeAcesso")
    public class NomeDaEntidadeController {
    ...
    

    ExtJs

    Para que uma Tela/Transação apareça no menu do sistema e seja verificada pelo controle de acesso, é necessário que o parâmetro id do item de menu seja igual ao código da transação cadastrada no controle de transações.

    ...
    var nomeDaVariavel_ItemDeMenu = new Application.SubMenuTreeNode({
        text:'Nome do Item de Menu',
        id: 'CodigoDaTransacaoDoControleDeAcesso',
        listeners: {
            click: function(){
                appViewPort.addWindow(fQueRetornaAJanelaCorrespondenteAoItemDeMenu());
            }
        }
    });
    ...
    

    Servidores Tomcat

    Nossa estrutura consiste de:

    • Um servidor para as aplicações (200.201.88.170), rodando com Linux Ubuntu e Tomcat 7
    • Dois servidores para os relatórios, em cluster (200.201.88.171 e 200.201.88.172), rodando com Linux Ubuntu e Tomcat 7
    • O cluster é implementado com o HAProxy
    • Nos servidores em cluster, a pasta de deploy é compartilhada (o 171 é a matriz); dessa forma, o deploy feito em um servidor automaticamente é feito no outro também
    • A pasta de configuração dos sistemas é um link simbólico para o servidor 170, ou seja, essa pasta fica compartilhada entre todos os 3 servidores

    Links para configuração do JDK da Oracle:
    http://www.magentodeveloperleedsuk.co.uk/installing-oracle-java-jdk-7-on-ubuntu-12-04-step-by-step/
    Após instalar a nova JDK, remover a OpenJDK: sudo apt-get remove --purge openjdk-*
    https://issues.apache.org/jira/browse/CASSANDRA-4275

    Alterações para execução do projeto no JBoss 7

    Para implantar o projeto no JBoss 7 é necessário ajustar o sistema para que o VRaptor faça um scan estático das classes. Isso significa que o VRaptor fará o mapeamento das classes anotadas antes da primeira subida do projeto. Isso deixa a subida mais lenta, mas posteriormente o sistema executa mais rapidamente, pois o scan não precisará mais ser feito.
    Para que o scan estático funcione, é necessário incluir o seguinte trecho no arquivo nbbuil.xml do projeto no Netbeans (o arquivo pode ser localizado acessando a aba "Arquivos"):

    ...
        <target name="-post-compile">
            <path id="build.classpath">
                <fileset dir="build/web/WEB-INF/lib" includes="*.jar" />
            </path>
    
            <java classpathref="build.classpath" classname="br.com.caelum.vraptor.scan.VRaptorStaticScanning" fork="true">
                <arg value="build/web/WEB-INF/web.xml" />
                <classpath refid="build.classpath" />
                <classpath path="build/web/WEB-INF/classes" />
            </java>
        </target>
    ...
    


    Monitoramento do JBoss 7 utilizando o "Applications Manager 10", da empresa ManageEngine

    To monitor JBoss, the http-invoker.sar should be deployed in the JBoss Server. The application (http-invoker.sar) is by default deployed in the JBoss server.

    If the http port of the JBoss server is changed then the port number in the attribute InvokerURLSuffix should also be modified in jboss-3.2.0/server/default/deploy/http-invoker.sar/META-INF/jboss-service.xml file.More Info>>

    To monitor JBoss 5.0.0 version and above jbossagent.sar should be deployed in JBoss server. To deploy follow the steps below Copy jbossagent.sar from location <Applications Manager home>/working/resources and paste under <JBOSS_HOME>/server/default/deploy.If you are running JBoss in different domain like all then deployment target folder would be <JBOSS_HOME>/server/all/deploy


    Ferramentas para Desenvolvimento

    Úteis

    Desenvolvimento

    Configurar proxy no maven

    • No projeto maven desejado, clique com o botão direito no item "Arquivos do Projeto"
    • Escolha "criar settings.xml"
    • Edite este arquivo e inclua o trecho abaixo, mudando o usuário e senha para o seu
    <proxies>
       <proxy>
          <id>proxy-unioeste</id>
          <active>true</active>
          <protocol>http</protocol>
          <username>nome.sobrenome</username>
          <password>SuaSenha</password>
          <host>proxy.unioeste.br</host>
          <port>8080</port>
          <nonProxyHosts>*.unioeste.br</nonProxyHosts>
        </proxy>
    </proxies>
    
    • Após realizar esta configuração, clique com o botão direito no item "Dependências" e escolha "Fazer download de dependências..."
    • Serão baixadas todas as bibliotecas de que o projeto depende


    Configurar Simulação de Usuário (Somente Leitura) com Filtro Personalizado

    • Adicione a transação "cSimulaUsuarioL" ao padrão que irá simular outros usuários
    • Verifique as Prioridades dos Padrões: quanto menor o número, maior a prioridade e mais irá simular (ex: padrão 0 simula todos, padrão 3 somente simula 4,5,6,etc)
    • Adicione uma SQL de filtro na tabela PdrTrnAvancado (pelo CCM ou da maneira ABAIXO), que deve retornar todos usuários (PssFsc_Codigo) utilizando o filtro @PssFsc_Codigo que será injetado do usuário logado.
    insert into PdrTrnAvancado (Trn_Codigo,Pdr_Codigo,TrnTbl_NmTabela, TrnTblCmp_NmCampo, PdrTrnAvn_Filtro, TrnPrmAcs_Tipo, PdrTrnAvn_Comando) 
    values ('cSimulaUsuariol','PadraoMaiorQueQuerSimular','Geral','PadraoMenorASerSimulado','select PssFsc_Codigo from PssFisica where PssFsc_Codigo = @PssFsc_Codigo', 'G', )
    
    • Será usada a seguinte funcao para busca dos padroes possíveis:
    exec spRtrVlrUnicoComResultSet 'Geral','PadraoMenorASerSimulado','PadraoMaiorQueQuerSimular','cSimulaUsuarioL'
    
    PadraoMenorASerSimulado: padrão que se deseja simular
    PadraoMaiorQueQuerSimular: padrão da pessoa que está querendo simular

    Problema para construir aplicação após fazer download das bibliotecas definidas no maven do projeto

    • Ao dar build no projeto, mostra o seguinte erro: Caused by: java.lang.IllegalArgumentException: java.util.zip.ZipException: error in opening zip file
    • Esse erro indica que algum dos arquivos .jar que fazem parte do projeto está corrompido
    • Para descobrir qual é o arquivo, acesse a pasta de repositório do netbeans (p. ex., C:\Users\marcio.veronez\.m2\repository) e procure por todos os arquivos .jar
    • Selecione todos os arquivos, clique com o botão direito, escolhe o item "7-Zip" (deve ter o 7-Zip instalado) e então a opção "Testar arquivo compactado"
    • O 7-Zip irá testar todos os arquivos e informará qual é o arquivo corrompido
    • Procure na internet uma versão correta do .jar corrompido e substitua o arquivo na pasta do repositório

    Procedimentos para que o Maven funcione nas aplicações da Unioeste usando o Netbeans 21 (Java 21) (11/03/2024)

    • Alterar as configurações do Maven do Netbeans para que utilize a jdk 8 do Java: ir no menu Tools -> Options. Na tela que abre, ir na aba Java e depois a aba Maven. Alterar a propriedade Default JDK para JDK 1.8
    • No arquivo pom.xml do projeto, alterar o caminho do repositório da Unioeste para https (pois a versão 21 do Netbeans não suporta http):
        <repositories>
            <!--other repositories if any -->
            <repository>
                <id>project.local</id>
                <name>project</name>
                <url>https://netsr-vers01.unioeste.br/maven/</url>
            </repository>
        </repositories>
    
    • Criar um arquivo settings.xml na pasta Project Files (mesmo local aonde fica o pom.xml) e então colar a seguinte configuração dentro da tag settings, para que o Maven busque o repositório no caminho http:
        <mirrors>
            <mirror>
                <id>project.local</id>
                <mirrorOf>project.local</mirrorOf> <!-- Must match repository id. -->
                <name>Dummy mirror to unblock the team repo server</name>
                <url>http://netsr-vers01.unioeste.br/maven/</url>
            </mirror>
        </mirrors>
    

    VoltarVoltar a Página Inicial - Menu Sistemas

  • Ferramentas pessoais
    Espaços nominais
    Variantes
    Ações
    Navegação
    Ferramentas