Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
| Ambos lados da revisão anterior Revisão anterior Próxima revisão | Revisão anterior | ||
| pres:gerti:servico_de_desenvolvimento_de_sistemas_de_informacao:projetos:sophos [09/04/2018 19:13] – [Breve descrição do projeto] bholiveira | pres:gerti:servico_de_desenvolvimento_de_sistemas_de_informacao:projetos:sophos [16/04/2018 16:29] (atual) – bholiveira | ||
|---|---|---|---|
| Linha 30: | Linha 30: | ||
| **Ambiente de homologação: | **Ambiente de homologação: | ||
| + | **Repositório: | ||
| **Usuários: | **Usuários: | ||
| Linha 51: | Linha 52: | ||
| ^ Dados da demanda | ^ Dados da demanda | ||
| ^Área de Negócio^Responsável^Data da solicitação|- | ^Área de Negócio^Responsável^Data da solicitação|- | ||
| - | |GER-TI|Marcelo Augusto- Gerente de TI|06/ | + | |ILB|MAXVÂNIA DA SILVA COSTA|25/01/2018| |
| - | |GER-TI|Licardino Siqueira - Chefe de Sistemas|06/07/2017| | + | |GER-TI|JAQUELINE GONÇALVES DO NASCIMENTO- Diretora do ILB|25/01/2018| |
| - | |GER-TI|Arlindo Cavalcante | + | |
| ^ Dono do processo | ^ Dono do processo | ||
| ^Área de Negócio^Responsável^Data da definição|- | ^Área de Negócio^Responsável^Data da definição|- | ||
| - | |GER-TI|Marcelo | + | |GER-TI|AQUELINE GONÇALVES DO NASCIMENTO- Diretora do ILB|25/01/2018| |
| ^Gerente de Projeto - Área de TI ^ | ^Gerente de Projeto - Área de TI ^ | ||
| ^Responsável|- | ^Responsável|- | ||
| - | |Fase 1 - <DEFINIR GP>| | + | |Fase 1 - Bruno Henrique de Oliveira Peixoto| |
| + | ==== README elaborado pelo TCM-GO ==== | ||
| + | <code> | ||
| + | |||
| + | README | ||
| + | Este README esclarece, de forma sucinta, as tecnologias, | ||
| + | |||
| + | O Sophos em ambiente de produção do TCM-GO pode ser visitado em: www.tcm.go.gov.br/ | ||
| + | |||
| + | 1) Tecnologia | ||
| + | |||
| + | Java 7, Spring, Java Server Faces (JSF)/ | ||
| + | |||
| + | 2) Arquietura | ||
| + | |||
| + | A Arquitetura do Sophos é composta, na visão macro, pelos projetos Sophos e TCMEstruturaWeb. O primeiro possui o código-fonte relativo ao Sophos propriamente dito, cujo escopo é a gestão educacional em ambiente corporativo. O TCMEstruturaWeb, | ||
| + | |||
| + | 2.1. Sophos | ||
| + | |||
| + | O propósito e relações dos pacotes dos Sophos são explicados sucintamente a seguir. Detalhes das dependências deste projeto podem ser conferidos em seu respectivo pom.xml. | ||
| + | |||
| + | 2.1.1. br.gov.go.tcm.sophos.ajudante | ||
| + | |||
| + | Este pacote possui classes utilitárias para todo o projeto. Possuem propósitos diversos tais como tratamento de imagens, e-mails, relatórios, | ||
| + | |||
| + | 2.1.2. br.gov.go.tcm.sophos.controladores | ||
| + | |||
| + | Neste pacote estão os controllers do modelo MVC. | ||
| + | |||
| + | 2.1.3. br.gov.go.tcm.sophos.controladores.base | ||
| + | |||
| + | Neste pacote estão presentes classes abstratas que os controles do projeto estendem. Essas classes abstratas possuem dados e comportamentos comuns a todos controllers. | ||
| + | |||
| + | 2.1.4. br.gov.go.tcm.sophos.conversor | ||
| + | |||
| + | Neste pacote estão implementados converters utilizados pelo JSF nas páginas XHTML do projeto. | ||
| + | |||
| + | 2.1.5. br.gov.go.tcm.sophos.entidade | ||
| + | |||
| + | Aqui estão presentes as classes que mapeiam, via JPA/ | ||
| + | |||
| + | 2.1.6. br.gov.go.tcm.sophos.entidade.base | ||
| + | |||
| + | Neste pacote estão presentes classes que uma ou mais entidades do projeto estendem. Essas classes possuem dados e comportamentos comuns a todas entidades. | ||
| + | |||
| + | 2.1.7. br.gov.go.tcm.sophos.entidade.dto | ||
| + | |||
| + | Neste pacote estão as classes DTO (Data Transfer Object) do projeto. Estas classes também representam classes do Model dentro da arquitetura MVC. | ||
| + | |||
| + | 2.1.8. br.gov.go.tcm.sophos.entidade.enumeracao | ||
| + | |||
| + | Aqui estão presentes Enums utilizados ao longo do projeto. | ||
| + | |||
| + | 2.1.9. br.gov.go.tcm.sophos.excecoes | ||
| + | |||
| + | Este pacote possui apenas uma classe pertencente a estrutura de validação e lançamento de exceções no projeto. | ||
| + | |||
| + | 2.1.10. br.gov.go.tcm.sophos.filter | ||
| + | |||
| + | Este pacote possui apenas uma classe pertencente a estrutura de filtragem de requisições quando da execução do projeto. | ||
| + | |||
| + | 2.1.11. br.gov.go.tcm.sophos.lazy | ||
| + | |||
| + | Este é um pacote muito importante para a escalabilidade e desempenho do Sophos. Possui implementações de carregamento e listagens de itens em datagrids de forma paginada. Quando comportamentos específicos (filtragens, | ||
| + | |||
| + | 2.1.12. br.gov.go.tcm.sophos.lazy.base | ||
| + | |||
| + | Neste pacote estão presentes classes que as classes Lazy extendem para realizar a paginação de elementos na View. Essas classes possuem dados e comportamentos comuns a todas essas classes lazy tais como os atributos List< | ||
| + | |||
| + | 2.1.13. br.gov.go.tcm.sophos.listener | ||
| + | |||
| + | Este pacote possui apenas uma classe pertencente a estrutura de regitro de logs do sistema. | ||
| + | |||
| + | 2.1.14. br.gov.go.tcm.sophos.mensagem | ||
| + | |||
| + | Este pacote possui apenas um arquivo .properties que possuem mensagens que podem programaticamnte, | ||
| + | |||
| + | 2.1.15. br.gov.go.tcm.sophos.negocio | ||
| + | |||
| + | Este pacote possui classes de negócio do projeto largamente utilizadas pelos controladores. As classes de negócio são responsáveis por lidar com regras de negócio e invocar os DAOs (Data Acces Object) nas tarefas que envolvam persistência de dados (inserir, atualizar, remover e obter). Em regra os controladores não devem acessar os DAOs diretamente, | ||
| + | |||
| + | 2.1.16. br.gov.go.tcm.sophos.negocio.base | ||
| + | |||
| + | Neste pacote está a classe de negócio base estendida por todas classes de negócio, portanto detentora de atributos e comportamentos comuns a todas elas. | ||
| + | |||
| + | 2.1.17. br.gov.go.tcm.sophos.persistencia | ||
| + | |||
| + | Neste pacote estão presentes as interfaces dos DAOs do projeto. Portanto, são classes que apresentam apenas os contratos que devem ser obervados pelos DAOs. | ||
| + | |||
| + | 2.1.18. br.gov.go.tcm.sophos.persistencia.base | ||
| + | |||
| + | Neste pacote está a interface de DAO base estendida por todas interfaces DAOs, portanto detentora de atributos comuns a todas elas. | ||
| + | |||
| + | 2.1.19. br.gov.go.tcm.sophos.persistencia.impl | ||
| + | |||
| + | Aqui estão presentes as implmentações das interfaces DAOs. Portanto, apresentam, de fato, métodos para persistência de dados, especialmente consultas JPQL para acesso mais aprimorado à dados quando necessário. | ||
| + | |||
| + | 2.1.20. br.gov.go.tcm.sophos.persistencia.impl.base | ||
| + | |||
| + | Este pacote possui o DAO genérico utilizado por todas classes DAO de implementação (pacote da seção anterior). A obtenção do SessionFactory e métodos genéricos para busca, inserção, edição e remoção de dados estão implementados nesta classe. | ||
| + | |||
| + | 2.1.21. br.gov.go.tcm.sophos.rh | ||
| + | |||
| + | Este pacote agrega classes para integração com banco de dados de RH externo ao Sophos. | ||
| + | |||
| + | 2.2. TCMEstruturaWeb | ||
| + | |||
| + | Este projeto é a base para execução do Sophos e está assentado principalmente no framework Spring. Muitas das classes do projeto Sophos implementam interfaces, estendem ou utilizam classes deste projeto. Através da JPA algumas tabelas em bancos de dados também são criadas (caso ainda não existam) a partir de entidades deste projeto. Citamos a entidade Orgao.java e Municipio.java (package br.gov.go.tcm.estrutura.entidade.orcafi). O TCMEstruturaWeb depositado neste repositório não possui todas classes do projeto original utilizado pelo TCM-GO, incluindo apenas aquelas estritamente necessárias à execução do Sophos. Detalhes das dependências deste projeto podem ser conferidos em seu respectivo pom.xml. | ||
| + | |||
| + | Neste documento não nos desdobraremos na explicação de todos pacotes deste projeto. | ||
| + | |||
| + | 3) Configuração e Execução | ||
| + | |||
| + | 3.1. Banco de Dados | ||
| + | |||
| + | Os detalhes de acesso a banco de dados no Sophos são configurados nos arquivos contextoPersistencia.xml do projeto Sophos. No projeto temos três deles em locais distintos: | ||
| + | |||
| + | a)/ | ||
| + | |||
| + | b)/ | ||
| + | |||
| + | c)/ | ||
| + | |||
| + | Sugerimos a configuração de todos estes arquivos. Neles são configurados todos os bancos de dados acessados pelo Sophos. A propriedade id dos beans ali presentes são os nomes das Sessions Factories/ | ||
| + | |||
| + | A seguir os trechos que devem ser configurados para cada banco de dados a ser utilizado: | ||
| + | |||
| + | <bean id=" | ||
| + | destroy-method=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | <prop key=" | ||
| + | <prop key=" | ||
| + | <prop key=" | ||
| + | <prop key=" | ||
| + | <prop key=" | ||
| + | <prop key=" | ||
| + | <prop key=" | ||
| + | <prop key=" | ||
| + | <prop key=" | ||
| + | <prop key=" | ||
| + | <prop key=" | ||
| + | <prop key=" | ||
| + | <prop key=" | ||
| + | <prop key=" | ||
| + | <prop key=" | ||
| + | <prop key=" | ||
| + | <prop key=" | ||
| + | <prop key=" | ||
| + | <prop key=" | ||
| + | <prop key=" | ||
| + | <prop key=" | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | A seguir um exemplo de utilização destas configurações nas classes DAO de implementação: | ||
| + | |||
| + | @Autowired | ||
| + | public RHPessoaDAOImpl(@Qualifier(" | ||
| + | final HibernateTemplate hibernateTemplate) { | ||
| + | |||
| + | this.setHibernateTemplate(hibernateTemplate); | ||
| + | |||
| + | this.setSessionFactory(factory); | ||
| + | |||
| + | } | ||
| + | Na pasta docs do repositório do projeto encontra-se exemplos de arquivos contextoPersistencia.xml para banco de dados PostgreSQL e SQL Server. Nesta pasta também estão presentes scripts para dumps dos banco de dados estrutura e sophos. Por padrão o Sophos presente no repositório está configurado para PostgreSQL. | ||
| + | |||
| + | 3.2. Configurações Gerais | ||
| + | |||
| + | Configurações gerais também são configuradas nos arquivos contextoGeral.xml e contextoConfiguracao.xml. | ||
| + | |||
| + | No primeiro configura-se, | ||
| + | |||
| + | Estes arquivos, semelhantemente aos arquivos de configuração de persistência, | ||
| + | |||
| + | a)/ | ||
| + | |||
| + | b)/ | ||
| + | |||
| + | c)/ | ||
| + | |||
| + | 3.3. Buiid dos Projetos | ||
| + | |||
| + | Para gerar uma build do projeto deve-se fazer a importação do projeto no Eclipse (ou outra IDE favorita) e realizar Maven Clean (No Eclipse: Run As - Maven Clean) e Maven Install (No Eclipse: Run As - Maven Install) no TCMServicosWeb e, logo em seguida, no Sophos. A ordem é necessária dada a dependência do segundo para o primeiro. | ||
| + | |||
| + | É uma premissa para o build com sucesso a configuração dos projetos para rodar com o JDK 7. | ||
| + | |||
| + | 3.4. Execução do Sophos | ||
| + | |||
| + | A execução do Sophos pode ser realizada no servidor Web Java de sua preferência, | ||
| + | |||
| + | 3.5. Carga de dados inicial do Sophos | ||
| + | |||
| + | Os scripts de dump dos bancos de dados estrutura e sophos presente na pasta docs do repositório do Sophos permite a criação da estrutura de tabelas necessárias, | ||
| + | |||
| + | A carga de dados de usuários internos (membros e servidores) deve ser realizada na tabela Usuario do banco de dados estrutura. Apontamentos para estes registros devem ser realizados no campo usuario_id da tabela usuario do banco de dados sophos. Para estes casos a senha MD5 presente no campo senha da tabela usuario do banco sophos é desconsiderada, | ||
| + | |||
| + | Para usuários internos (membros e servidores) a tabela usuario do banco de dados sophos faz, através do campo codSecao, apontamento para a tabela Secao do banco de dados estrutura. Esta tabela é responsável por armazenar todos os setores internos da instituição. Apontamento semelhante também é realizado da tabela Municipio para a tabela Secao, ambas do banco de dados estrutura. | ||
| + | |||
| + | A carga de dados de usuários externos (jurisdicionados e sociedade) deve ser realizada diretamente na tabela usuario do banco de dados sophos. Para estes casos a senha MD5 presente no campo senha da tabela usuario do banco sophos é considerada e a cidade do usuário externo (jurisdicionados e sociedade) deve ser indicada no campo cidade_id da tabela endereco. Este faz apontamento para a tabela cidade do banco de dados sophos. Ou seja, no caso de servidores externos o banco de dados estrutura não é utilizado para persistência de dados. | ||
| + | |||
| + | Estas distinções, | ||
| + | |||
| + | 3.6. View de dados de Recursos Humanos (RH) | ||
| + | |||
| + | O Sophos faz a leitura de uma view de dados de recursos humanos disponibilizada por empresa terceirizada responsável pela gestão da folha de pagamento no TCMGO. No contexto do TCMGO esta base de dados está sobre o SGBD Oracle e possui a estrutura do arquivo campos_view.png presente na pasta docs/View RH Oracle no repositório do projeto. Para ambientes onde está view não exista, indica-se a criação de view com campos idênticos aos descritos no arquivo campos_view.png, | ||
| + | |||
| + | 3.7. Arquivos de estilos (CSS) | ||
| + | |||
| + | Na pasta " | ||
| + | |||
| + | 3.8. Desafios de Configuração e Execução do Sophos em Ambiente Distinto ao TCM-GO | ||
| + | |||
| + | Apontamos como maiores desafios na configuração e execução do Sophos em ambiente distinto do TCM-GO: | ||
| + | |||
| + | a) Alto grau de acoplamento do Sophos com o TCMServicosWeb, | ||
| + | |||
| + | b) Ajuste para o Sophos utilizar de tabelas de banco de dados centrais e genéricas da instituição de destino. Citamos, neste caso, as tabelas referentes a municípios, | ||
| + | |||
| + | c) Integração com arquitetura de autenticação distinta à praticada pelo TCM-GO, tais como oAuth, LDAP, outras tabelas de BD, etc. O Sophos contido neste repositório possui estrutura para armazenar usuários próprios utilizados na autenticação, | ||
| + | |||
| + | d) Configuração de outras tecnologias e esquemas de bancos de dados. | ||
| + | |||
| + | e) Ajustes para descartar regras de negócio não aplicáveis ou incluir regras de negócios ainda não contempladas dadas as diferenças naturais entre instituições que possam utilizá-lo. | ||
| + | </code> | ||
| Linha 67: | Linha 302: | ||
| ===== Alinhamento Estratégico ===== | ===== Alinhamento Estratégico ===== | ||
| - | O projeto foi idealizado para ser dividido em fases, o que chamaremos aqui de ondas. A ideia de dividir o projeto em fases, se dá por ser um projeto grande composto por vários módulos. A divisão será da seguinte forma: | + | A25.01 - Desenvolver sistema |
| Linha 73: | Linha 308: | ||
| ===== Breve descrição do projeto ===== | ===== Breve descrição do projeto ===== | ||
| - | O projeto cedido pelo TCM-GO está hospedado em https:// | + | O projeto cedido pelo TCM-GO está hospedado em https:// |
| + | |||
| Alguma modificações foram necessárias, | Alguma modificações foram necessárias, | ||
| + | |||
| O projeto original do TCM funciona com banco SQL SERVER, no entanto ao baixar o projeto ele já estava configurado para postgres pois ia ser implantado com esse banco no MP-GO. | O projeto original do TCM funciona com banco SQL SERVER, no entanto ao baixar o projeto ele já estava configurado para postgres pois ia ser implantado com esse banco no MP-GO. | ||
| - | ===== Artefatos | + | ===== Alterações realizadas no projeto original===== |
| + | |||
| + | Algumas personalizações foram necessárias para o sistema funcionar na arquitetura TCE-GO: | ||
| + | acesso.xhtml: | ||
| + | |||
| + | < | ||
| + | # | ||
| + | </ | ||
| + | |||
| + | EventoControlador.java: | ||
| + | < | ||
| + | 495// | ||
| + | 496// | ||
| + | </ | ||
| + | |||
| + | LoginNegocio.java: | ||
| + | < | ||
| + | public Usuario logar(Usuario usuario, String senha) { | ||
| + | |||
| + | usuario.setPerfilList(this.perfilUsuarioDAO.listaPorAtributo(" | ||
| + | |||
| + | if (usuario.getTipoUsuario().equals(TipoUsuario.class.getSimpleName(), | ||
| + | TipoUsuario.USUARIO_INTERNO.getCodigo())) { | ||
| + | |||
| + | this.verificaSenhaUsuarioInterno(senha, | ||
| + | |||
| + | } else if (usuario.getTipoUsuario().equals(TipoUsuario.class.getSimpleName(), | ||
| + | TipoUsuario.USUARIO_EXTERNO.getCodigo())) { | ||
| + | |||
| + | // | ||
| + | this.verificaSenhaLDAP(senha, | ||
| + | |||
| + | //else criado por TCE-GO para forçar autenticação | ||
| + | }else { | ||
| + | this.verificaSenhaLDAP(senha, | ||
| + | |||
| + | } | ||
| + | |||
| + | . | ||
| + | . | ||
| + | . | ||
| + | // | ||
| + | private void verificaSenhaLDAP(String senha, String nomeUsuario) { | ||
| + | </ | ||
| + | |||
| + | RHPessoaDAOImpl: | ||
| + | |||
| + | < | ||
| + | Query query = session.createSQLQuery(" | ||
| + | </ | ||
| + | |||
| + | **Observações: | ||
| + | Devido a algumas dificuldades de se compilar o projeto via eclipse (via maven por linha de comando vai normal), lembrar de por o arquivo do log4j e tcmestrutura-mpgo-1.0.jar dentro da pasta da pasta da aplicação no tomcat. | ||
| + | |||
| + | ==== Banco==== | ||
| + | As tabelas de usuários e pessoas foram populadas por um ETL do pentaho, hospedado no freya. | ||
| + | No dump que veio do projeto do git também vieram faltando uma stored procedure e uma tabela. Ambas devem ficar dentro do banco " | ||
| + | < | ||
| + | drop function IF EXISTS UltimoSequencialGED(); | ||
| + | |||
| + | CREATE FUNCTION UltimoSequencialGED() RETURNS void AS $$ | ||
| + | DECLARE | ||
| + | curtime timestamp := now(); | ||
| + | v_sequencial int; v_ano int; v_mes int; v_dia int; | ||
| + | |||
| + | |||
| + | BEGIN | ||
| + | v_ano := date_part(' | ||
| + | v_mes := date_part(' | ||
| + | v_dia := date_part(' | ||
| + | |||
| + | | ||
| + | FROM | ||
| + | WHERE v_ano = ano AND v_mes = mes AND v_dia = dia; | ||
| + | |||
| + | if (v_sequencial is null) | ||
| + | then | ||
| + | insert into GED_Sequencial(ano, | ||
| + | values (v_ano, v_mes, v_dia, 1); | ||
| + | |||
| + | else | ||
| + | update GED_Sequencial set sequencial = sequencial +1 where v_ano = ano AND v_mes = mes AND v_dia = dia; | ||
| + | |||
| + | end if; | ||
| + | |||
| + | SELECT | ||
| + | cast(Replicate (' | ||
| + | cast(Replicate (' | ||
| + | cast(Replicate (' | ||
| + | FROM GED_Sequencial | ||
| + | WHERE v_ano = ano AND v_mes = mes AND v_dia = dia; | ||
| + | |||
| + | END; | ||
| - | Abaixo está a lista de documentos de cada fase do ciclo de vida deste projeto: | + | $$ LANGUAGE plpgsql;</ |
| + | < | ||
| + | -- Table: public.ged_sequencial | ||
| + | -- DROP TABLE public.ged_sequencial; | ||
| + | CREATE TABLE public.ged_sequencial | ||
| + | ( | ||
| + | ano smallint NOT NULL, | ||
| + | mes smallint NOT NULL, | ||
| + | dia smallint NOT NULL, | ||
| + | sequencial integer NOT NULL, | ||
| + | CONSTRAINT " | ||
| + | ) | ||
| + | WITH ( | ||
| + | OIDS = FALSE | ||
| + | ) | ||
| + | TABLESPACE pg_default; | ||
| + | ALTER TABLE public.ged_sequencial | ||
| + | OWNER to postgres;</ | ||
| ===== Projeto ===== | ===== Projeto ===== | ||