Estou de férias…

Gostaria de avisar a todos que estarei de férias até dia 23/03 ficando o blog e a forj sem atividades até la.

08164659917645

 “Feliz é a nação cujo Deus é o Senhor, e o povo ao qual escolheu para sua herança.” Salmo 33.12

Relembrando as velhas certificações Java

Aqueles como eu que já tem mais de uma década na plataforma Java vão lembrar daqueles velhos e bons momentos de certificações da SUN na prometric. Quando a galera passava na prova, já corria direto para colocar na assinatura do e-mail mais uma sigla de certificado. Ainda vejo alguns fazendo isso :D kkkkk…….

20150227_082627

 “Alegrai-vos sempre no Senhor; outra vez digo: alegrai-vos.” Filipenses 4:4

Pattern Store Procedure Facade

home_theater_facade

Continuando o assunto das regras de negócio dentro do banco de dados, hoje eu gostaria de apresentar uma estrutura arquitetural que se tornou um design pattern muito utilizado dentro das equipes que eu trabalho, no qual eu nomeei de “Store Procedure Facade”. Segue a mesma aplicação do conhecido Pattern Facade. Segue a explicação do que é contexto e um exemplo prático:

Contexto

Dado uma solução, que em uma única requisição HTTP necessita acessar o banco de dados remoto N vezes para pegar informações de tabelas diferentes na maioria das vezes não relacionadas ou até mesmo relacionadas.

Problema

Dada uma situação de três acessos na requisição, 500 usuários simultâneos fazendo essa operação resultara em 1.500 round trips ao banco de dados, necessitando assim de aumento expressivo da configuração do DataSource, aumento no gasto de memória no parse do framework ORM e a redução exponencial do tempo de resposta da requisição.

Solução

Criar uma store procedure utilizada como se fosse uma Facade para encapsular, agrupar e retornar os N acessos de forma com que com um único round trip ao banco seja possível retornar todas as informações necessárias.

Exemplo

Segue um exemplo em SQL Server 2008:

CREATE PROCEDURE procecure_facade_x
AS
SELECT * INTO #parametro1 FROM tabelaX1
SELECT * INTO #parametro2 FROM tabelaX2
SELECT * INTO #parametro3 FROM tabelaX3
SELECT * FROM #parametro1, #parametro2, #parametro3
GO

Veja que é criada uma Store “Procedure Facade” que faz acesso em três tabelas diferentes, armazenando cada resultado em tabelas temporárias e depois agrupando e retornando como se fosse a uma mesma consulta.

O mesmo pode ser aplicado usando uma function ao invés de uma procedure. Segue abaixo outro exemplo usando function:

create function fnc_monitorAutentLista(
@cooperativa int,
@tipo char(1),
@dtInicial date,
@dtFinal date,
@posto int
)
returns @tabela_valores table(
posto varchar(100),
codusuario varchar(100),
colaborador varchar(100),
caixa integer,
autenticacoes integer
)
AS
begin
insert into @tabela_valores
SELECT
pos.nm_posto AS posto,
usu.cd_usuario AS codusuario,
usu.nm_usuario AS colaborador,
mov.nr_caixa AS caixa,
COUNT(*) AS autenticacoes
FROM movimento_caixa AS mov WITH(NOLOCK)
INNER JOIN usuario AS usu WITH(NOLOCK) on usu.cd_usuario = mov.cd_usuario_alt
AND usu.cd_posto = mov.cd_posto AND usu.cd_coop = mov.cd_coop
INNER JOIN posto AS pos WITH(NOLOCK) on pos.cd_coop = mov.cd_coop
AND pos.cd_posto = mov.cd_posto
WHERE
mov.cd_coop=@cooperativa AND
mov.in_cancelado=@tipo AND
mov.dt_movimento BETWEEN @dtInicial AND @dtFinal AND
mov.cd_posto = @posto
GROUP BY pos.nm_posto, usu.cd_usuario, usu.nm_usuario, mov.nr_caixa, mov.cd_posto
ORDER BY pos.nm_posto, usu.nm_usuario, mov.cd_posto
return
end
GO

Resultado

Resolvendo o contexto do problema citado, 500 usuários simultâneos executando essa operação configurado nesse pattern resultara em apenas 500 round trips no banco de dados, um por cada requisição, reduzindo expressivamente a configuração do DataSource, reduzindo os gasto de memória com parse do framework ORM e a aumento expressivo do tempo de resposta da requisição.

Porque o Filho do Homem veio buscar e salvar o perdido.” Lucas 19:10

Ataque 27 – Unvalidated Redirects and Forwards

53374_Papel-de-Parede-Placas--53374_800x600Descrição:

Consiste no atacante manipular informações dentro da requisição HTTP enviando endereços absolutos de páginas ou recursos maliciosos automaticamente redirecionados pela solução.

Riscos: 

  • O atacante pode enviar endereços de recursos que contenham instalações de vírus na estação do usuário.
  • O atacante pode enviar endereços de recursos restritos da solução.

Solução

Não use redirecionamentos que pegam o endereço do recursos via valores HTTP. Somente faça navegação seguindo lógicas dentro do back-end.

Para todas as informações, veja o post inicial.

“Finalmente, sede todos de igual ânimo, compadecidos, fraternalmente amigos, misericordiosos, humildes.” 1 Pedro 3:8

Aprender sobre performance em Java

Estes dias me perguntaram como aprender sobre questões de melhorar a performance em soluções Java. Depois de estudar sobre o assunto, segue os livros para qualquer um imergir e se especializar no assunto:

download

Veja o livro 1

download (1)

Veja o livro 2

download (2)

Veja o livro 3

download (3)

Veja o livro 4

Neles você encontrara as informações e as técnicas para otimizações de performance.

“E nós conhecemos e cremos no amor que Deus tem por nós. Deus é amor, e aquele que permanece no amor permanece em Deus, e Deus, nele.” 1 João 4:16

Catalogo de Refatoração – Compondo Método #2

downloadInternalizar Variável Temporária – use quando encontrar uma variável temporária que recebe uma única atribuição de uma simples expressão e essa variável esta atrapalhando outras refatorações. Apague a variável e use o valor retornado diretamente da própria expressão.

Substituir Variável Temporária por Consulta – use quando encontrar uma variável temporária que recebe a atribuição de uma expressão e essa variável esta atrapalhando outras refatorações. Crie um método que encapsule a expressão, retorne o resultado e substitua expressão pela chamada desse método.

Introduzir Variável Explicativa – use quando encontrar expressões difíceis de entender. Quebre a expressões em atribuições de variáveis temporárias com nomes explicativos e use-as para fazer a expressão de forma mais clara. É possível usar a estratégia de “Extrair Método” ao invés de “Introduzir Variável Explicativa”. Decida pelo qual ficar menos trabalhoso.

Para todas as informações, veja o post inicial.

“Quem entre vós é sábio e inteligente? Mostre em mansidão de sabedoria, mediante condigno proceder, as suas obras.” Tiago 3:13

Explorando APIs e bibliotecas Java

cover-apis-java_largeUma vez que você aprende orientação a objetos e o básico do Java, é necessário se tornar fluente em suas APIs, que não são poucas. Um programador Java eficaz conhece o que há disponível e sabe quando pode usar cada uma das possibilidades que a linguagem lhe oferece. É isso que queremos para você.

Nesse livro Rodrigo Turini te ensina como lidar com as diferentes APIs do Java, com exemplos práticos e que são relevantes no seu dia a dia. Você vai aprender as diferentes APIs para fazer IO, trabalhar com Threads da forma correta, se conectar com banco de dados via JDBC, integrar com ferramentas de build e muito mais.

“Pois, outrora, éreis trevas, porém, agora, sois luz no Senhor; andai como filhos da luz.” Efésios 5:8