• Nenhum resultado encontrado

Arquitetura dos Sistemas Institucionais. Arlindo Rodrigues / Raphael Medeiros Arquitetura

N/A
N/A
Protected

Academic year: 2021

Share "Arquitetura dos Sistemas Institucionais. Arlindo Rodrigues / Raphael Medeiros Arquitetura"

Copied!
77
0
0

Texto

(1)

Arlindo Rodrigues / Raphael Medeiros Arquitetura

Arquitetura dos

Sistemas Institucionais

(2)

Agenda

● Introdução

● Divisão em Camadas

○ Camada de Acesso a Dados ○ Camada de Domínio/Negócio ○ Camada de Aplicação

○ Camada de Apresentação

● Integração entre Sistemas

● Segurança e Auditoria

(3)

Cronograma

● Visão Geral da Arquitetura

● Camada de persistência

● Camada de Domínio/Negócio e Aplicação

● Integração Entre Sistemas

(4)
(5)
(6)

Introdução

● Metas ○ Interoperabilidade ○ Segurança ○ Escalabilidade ○ Alta Disponibilidade ○ Abstrair complexidade

(7)

Tecnologias Utilizadas

● Java 6 ● Hibernate 3.2.5 ● JavaServer Faces 1.2 ● RichFaces 3.3.3 ● Struts 1.2 ● EJB 2.1 ● Spring 3.2.1 ● JBoss 5.1.0

(8)
(9)

Métricas de código*

(10)

Métricas de Banco de Dados *

(11)
(12)
(13)

Definição

● Acesso a dados: realiza a persistência e

recuperação de dados.

● DAOs, Hibernate, JDBC, JDBCTemplate,

(14)
(15)

Banco de Dados

ADMINISTRATIVO: base de dados para armazenar dados

relacionados aos sistemas administrativos e de recursos humanos.

ACADÊMICO: base de dados para armazenar dados

relacionados ao sistema acadêmico.

SISTEMAS COMUM: base de dados com informações

comuns a todos os sistemas, como por exemplo, a base de dados para autenticação de usuários, cadastro de

permissões, entre outras.

BASE ARQUIVOS: base de dados para armazenamento de

arquivos.

SISTEMAS LOG: base de dados para armazenamento de

(16)

Banco de Dados

● PostgreSQL, versão 9.5

○ Utiliza Pool de Conexões

○ Gerenciado pelo servidor de aplicações ■ Utiliza o protocolo X/Open XA

● Permite que os vários banco de dados sejam acessados dentro de uma mesma transação

● Transações distribuídas ● Two-Phase Commit ● Prepared Transaction

● Utiliza o framework Hibernate para realização

de mapeamento objeto relacional.

● Padrão de Projetos DAO (Data Access Object)

(17)

Banco de Dados

Configuração de DataSources

(18)
(19)

Banco de Dados

Datasources ○ jdbc/ComumDB ○ jdbc/SIPACDB ○ jdbc/SIGRHDB ○ jdbc/SIGAADB ○ jdbc/SIGEDDB ○ jdbc/SIGPPDB ○ jdbc/SIGAdmin ○ jdbc/ArquivosDB ○ Jdbc/LogOperacaoDB

(20)
(21)

Hibernate

● Framework para mapeamento objeto-relacional;

● Facilita a utilização de bancos de dados relacionais em sistemas orientados a objetos;

● Mapeia tabelas de bancos de dados em classes, linhas de uma tabela em objetos e colunas em atributos;

● Versão 3.2.5;

● Mapeamentos em:

○ Arquivos XML (Arquitetura e SIPAC)

(22)
(23)
(24)

Configuração do Hibernate

● Arquivo .cfg.xml

○ Comum: comum.cfg.xml ○ SIPAC: sipac.cfg.xml

(25)
(26)

Geração de Chave Primária

SequenceStyleGenerator

○ Solução híbrida para geração de chave primária. Quando o banco suportar sequence, utiliza sequence, quando

não suportar, usa uma tabela com o mesmo nome da sequence para simular seu comportamento;

○ Poucas mudanças em relação à estratégia original; ○ Sem problemas com travamentos. Cada sequence é

simulada por uma tabela diferente; ○ Foi considerada a solução ideal;

(27)

Geração de Chave Primária

Nova Configuração: @Id @GeneratedValue(generator="seqGenerator") @GenericGenerator(name="seqGenerator", strategy="br.ufrn.arq.dao.SequenceStyleGenerator", parameters={ @Parameter(name="sequence_name", value="schema.seq_name") })

(28)
(29)

DAO’s

● Desvincula dos usuários da arquitetura a

dependência do framework e/ou do banco de dados;

● Objetos para abstrair e encapsular todo o

(30)
(31)
(32)

DAO’s

(33)

Realizando consultas com Hibernate

● GenericDAO disponibiliza método getSession()

para consultas com Hibernate;

● O SessionFactory utilizado dependerá do

sistema que foi setado no DAO;

(34)
(35)
(36)
(37)

JdbcTemplate

int count = 0; try {

PreparedStatement st = getConnection().

prepareStatement(“select count(*) from cliente”); ResultSet rs = st.executeQuery();

if (rs.next()) count = rs.getInt(1); } catch(SQLException e) {

log.error(e); } finally {

try { if (stmt != null) stmt.close(); } catch(SQLException e) { log.warn(e); } try { if (conn != null) conn.close(); } catch(SQLException e) { log.warn(e); } }

(38)

JdbcTemplate

int count = getJdbcTemplate().

(39)

JdbcTemplate

queryForInt

queryForLong

query

queryForObject

queryForList

queryForMap

update

RowMapper

ResultSetExtractor

(40)
(41)
(42)

Camada de Negócio

Negócio: lógica que o sistema precisa realizar

com o domínio que se está trabalhando.

● Envolve cálculos baseados em entradas e

(43)

Processadores

● Implementam lógica de negócio e gerenciam a

(44)
(45)
(46)
(47)

Camada de Aplicação

● Realiza a transição da camada de apresentação

para a camada de negócio

● Adiciona serviços (transações) aos sistemas

Movimentos

■ Transferem objetos da apresentação para um processador

Comandos

■ Indicam que processador deve ser utilizado para realizar a lógica de negócio

(48)
(49)
(50)

Comandos

● Para chamar um processador a partir da

camada de apresentação:

○ Criar um movimento contendo os objetos que se deseja enviar para a camada de negócio

○ Passar para o objeto movimento o objeto comando que informa qual processador deve ser executado

○ Chamar o método execute na action (Struts) ou managed bean (JSF) passando o movimento e o comando como parâmetros

(51)
(52)
(53)
(54)

Camada de Apresentação

● Camada de Apresentação: responsável por

controlar a interação entre o usuário e o software ou entre dois softwares;

● Páginas HTML, interfaces baseadas em janelas,

webservices, etc.Exibem informação a um usuário (ou outro software) e interpretam ações do usuário (ou outro software);

(55)

Camada de Apresentação

MVC

“Divide a interação do usuário com a interface em

três diferentes papéis”;

Iniciou como um framework para a plataforma

Smalltalk na década de 70;

Exerce bastante influência nos frameworks de UI e

(56)

Camada de Apresentação

Três papéis:

Model: objetos que representam alguma informação sobre o domínio;

View: representa a visualização do estado atual do model na interface;

Controller: recebe entrada do usuário,

manipula o model e provoca uma atualização da view.

(57)

Camada de Apresentação

MVC ≠ Camadas

MVC define interação entre componentes

Camadas definem separação entre

componentes

(58)

Camada de Apresentação

Frameworks de Apresentação

SIPAC: Struts e JSF SIGAA: Struts e JSF

SIGRH, SIGAdmin, SIGED: JSF Controllers:

JSF: Managed Beans

(59)
(60)

Struts

● Framework MVC;

● Utilizado no início dos projetos;

● Substituído pelo JavaServer Faces;

● Existem muitos casos de uso, principalmente

(61)
(62)

Struts

● AbstractAction ○ Métodos auxiliares ○ getUsuarioLogado ○ checkRole ○ getDAO ○ Etc.

(63)
(64)

Struts

public class CadNotaFiscalAction extends AbstractAction { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest req,

HttpServletResponse res) { // ...

} }

(65)
(66)

JSF

● Substituto do Struts para a camada de

apresentação

● Especificação JCP (Java Community Process)

● JavaServer Faces 1.2

(67)

JSF

● Não necessita estender classes ou implementar

interfaces

● Classes apenas auxiliares

○ AbstractController

○ AbstractControllerCadastro ○ <Sistema>AbstractController

(68)
(69)

JSF

● Integração com Spring

● @Component define que uma classe será um

managed bean

(70)

JSF

● RichFaces: biblioteca de componentes para dar

suporte a AJAX

● Tags a4j

● Tags rich

● Demonstração online:

(71)
(72)

ViewFilter

● Filtro de Servlet com diversas funções

○ Segurança

○ Fechamento da sessão do Hibernate ○ Tratamento de Exceções

(73)

ViewFilter

Segurança:

○ Verifica se existe usuário logado e se a página que se está tentando acessar é pública

○ Se não existir usuário logado e a página não for pública, redireciona para a tela de login

○ Páginas públicas são configuradas como parâmetro de inicialização do ViewFilter

■ Parâmetro paginasPermitidas

(74)

ViewFilter

● Fechamento da sessão do Hibernate

● Sessão aberta só é fechada ao final do request

● OpenSessionInView

(75)

ViewFilter

Tratamento de Exceções:

○ Classe ExceptionHandler ○ Chain of Responsibility

○ JsfExceptions, HibernateExceptions, etc.

(76)

ViewFilter

Log de Operações: ○ UserAgent.logaOperacao ○ URL acessada ○ Timestamp ○ Parâmetros de Request ○ Tempo da operação ○ Registro de entrada

(77)

Referências

Documentos relacionados

Detectadas as baixas condições socioeconômicas e sanitárias do Município de Cuité, bem como a carência de informação por parte da população de como prevenir

Assim, a estrutura dúplex é metaestável, sendo obtida na temperatura ambiente após resfriamento que impeça as transformações de fase, particularmente de ferrita em sigma, como

To sum up, the evidences here found related to the management of reserves, even considering the key variables for the NCM where the Central Bank controls credit supply from attempt

Em relação às tecnologias utilizadas pelos docentes no planejamento (gráfico 5), temos uma equivalência de porcentagem, que é de 15% para o uso do notebook e do laboratório de

1 Achados histopatológicos de testículo de ratos Wistar submetidos ao choque térmico testicular, tratados ou não com chá de Noz-Pecã e avaliados com 30 dias após a injúria

Na Introdução, o autor começa falando do prédio onde resi- diu a Família Real portuguesa, através da menção ao meteorito de Bendegó, encontrado em 1784 em Monte Santo, sertão

Governança de TI (GTI) – consiste em aplicar os princípios da Governança Corporativa para gerenciar e controlar estrategicamente a TI, preocupando-se principalmente com valor

Como feito para o caso da massa efetiva, adaptamos o código do MAPLE para resolver a equação de Schrödinger na presença do campo magnético, e com isso calcular a transmitância..