Livro OCM Java EE 6 Enterprise Architect

51JxwsBwdtL._SX342_Hoje eu terminei a leitura do livro OCM Java EE 6 Enterprise Architect. Leitura obrigatória para os aspirantes a arquitetos Java e principalmente os já certificados em versões anteriores da OCM. Muitas novidades, patterns novos, security patterns, mobile, REST e recursos novos da JEE 6+. Boa leitura a todos!

 

“Contudo, o SENHOR, durante o dia, me concede a sua misericórdia, e à noite comigo está o seu cântico, uma oração ao Deus da minha vida.” Salmos 42:8

Se divertindo com testes de carga e stress com JMeter

É exatamente nesse momento que você começa a perceber se aquilo que arquiteturou realmente funciona…..

ThreadsThreads3

Threads2

tomcat

 

Apache JMeter – http://jmeter.apache.org/

“Enganoso é o coração, mais do que todas as coisas, e desesperadamente corrupto; quem o conhecerá? Eu, o SENHOR, esquadrinho o coração, eu provo os pensamentos; e isto para dar a cada um segundo o seu proceder, segundo o fruto das suas ações.” Jeremias 17:9-10

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

Arquiteto Java Spring Framework

logo-spring-103x60Mesmo depois dos avançados das ultimas especificação do JEE , vemos que ela ainda esta muito longe de se igualar as opções oferecidas pela plataforma Spring. Vale a pena lembrar que da mesma forma que as especificações vão melhorando ao longo do tempo, o Spring também vai evoluindo em uma velocidade muito mais rápida e ampla, uma vez que não depende de nenhum tipo de votação comunitária.

Eu mesmo ao longo dos meus 15 anos de experiência, sempre tive a cautela de preferir produtos JCP ao invés de proprietários, visando o grande ideal da portabilidade e a independência de vendor, mas na prática percebo que ao longo do tempo tenho adotado os produtos Spring mais e mais. Motivo? O mesmo pelo qual o Spring foi criado: ser uma opção muito mais rápida, barata e leve de um lightweight container que ofereça serviços plugáveis de infraestrutura para soluções corporativas com a mesma qualidade.

Hoje a minha dica é sobre os principais livros de Spring atualizados para os interessados em se aprofundar nessa poderosa plataforma:

51nY36Dqo5L._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_

Spring in Action  é o livro mais básico que te ensina os pilares do uso de serviços no Spring. Nele você também aprendera os serviços e recursos mais básicos que ele proporciona.

415x7PWAe5L._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_

Just Spring Integration  é o livro que estende o spring oferecendo os serviços de infraestrutura voltados para integração de soluções definidos pelo catalogo de patterns de integração conhecidos pelo EAI.

51RXnaly93L

Spring Data é o livro que estende o spring oferecendo os serviços de infraestrutura voltados para persistência de dados relacionados com banco de dados relacionais e NoSQL.

Existem outros livros mais específicos de outros serviços que você também pode estar estudando como, por exemplo, Spring Bath in Action e Pro Spring Security

Uma vez que você domine todos estes serviços, você praticamente se tornara um “Arquiteto Java Spring”, dominando contextos de soluções mais modernos da atualidade e apto para projetar soluções corporativas de pequeno, médio e grande porte.

“Filhinhos meus, estas coisas vos escrevo para que não pequeis. Se, todavia, alguém pecar, temos Advogado junto ao Pai, Jesus Cristo, o Justo;” 1 João 2:1

Como me tornar um arquiteto de software?

images

Estes dias atras me perguntaram quais seriam as informações mais básicas para se tornar um arquiteto de software. Segue ai a resposta:

Modelo C4

Para o plano arquitetural conhecido como “blueprint” de um projeto se faz necessário projetar a solução em diagramas. Esqueça UML! Eu uso modelo chamado de “C4″. Aprenda nesse livro: https://leanpub.com/software-architecture-for-developers .

Projeto e Design DDD

Para o design de camadas e projeto oop se faz necessário uma abordagem 100% OO. Eu uso uma técnica chamada a de “Domain Driven Design”. Aprenda nesse livro: http://www.altabooks.com.br/domain-drive-design-atacando-as-complexidades-no-coracao-do-software.html .

Desenvolvimento TDD

Para o desenvolvimento se faz necessário usar uma abordagem de construção de software. Eu uso uma técnica chamada de “Test Driven Design”. Aprenda nesse livro: http://www.casadocodigo.com.br/products/livro-tdd .

Design Emergente

Para criação e evolução da estrutura do produto em desenvolvimento, se faz necessário o uso de alguma abordagem. Eu uso uma chama de”Design Emergent”. Aprenda  nesse livro: http://www.amazon.com/Emergent-Design-Evolutionary-Professional-Development-ebook/dp/B0016CCC7K .

Agora é com você! Bons estudos a todos…

“Ora, nós conhecemos aquele que disse: A mim pertence a vingança; eu retribuirei. E outra vez: O Senhor julgará o seu povo. Horrível coisa é cair nas mãos do Deus vivo.” Hebreus 10:30-31

Software Architecture for Developers

archisketches31. Software architecture isn’t about big design up front

Software architecture has traditionally been associated with big design up front and waterfall-style projects, where a team would ensure that every last element of the software design was considered before any code was written. Software architecture is basically about the high-level structure of a software system and how you get to an understanding of it. This is about the significant decisions that influence the shape of a software system rather than understanding how long every column in the database should be.

2. Every software team needs to consider software architecture

Regardless of the size and complexity of the resulting product, every software team needs to consider software architecture. Why? Put simply, bad things tend to happen if they don’t! If software architecture is about structure and vision, not thinking about this tends to lead to poorly structured, internally inconsistent software systems that are hard to understand, hard to maintain and potentially don’t satisfy one or more of the important non-functional requirements such as performance, scalability or security. Explicitly thinking about software architecture provides you with a way to introduce technical leadership and stacks the odds of a successful delivery in your favour.

3. The software architecture role is about coding, coaching and collaboration

The image that many people have of software architects is of traditional “ivory tower” software architects dictating instructions to an unsuspecting development team. It doesn’t need to be like this though, with modern software architects preferring an approach that favours coding, coaching and collaborative design. The software architecture role doesn’t necessarily need to be undertaken by a single person plus coding is a great way to understand whether the resulting architecture is actually going to work.

4. You don’t need to use UML

Again, traditional views of software architecture often conjure up images of huge UML (Unified Modeling Language) models that attempt to capture every last drop of detail. While creating and communicating a common vision is important, you don’t need to use UML. In fact, you could argue that UML isn’t a great method for communicating software architecture anyway. If you keep a few simple guidelines in mind, lightweight “boxes and lines” style sketches are an effective way to communicate software architecture.

5. A good software architecture enables agility

There’s a common misconception that “architecture” and “agile” are competing forces, there being a conflict between them. This simply isn’t the case though. On the contrary, a good software architecture enables agility, helping you embrace and implement change. Good software architectures aren’t created by themselves though, and some conscious effort is needed.

Want to know more about it? See the book – https://leanpub.com/software-architecture-for-developers

“Come to me, all you who are weary and burdened, and I will give you rest. ” Matthew 11:28

Arquitetura do Sacrifício

arquiteturaArquitetura do Sacrifício significa aceitar agora que daqui a poucos anos a equipe terá que jogar fora o que está sendo desenvolvido atualmente. Fowler mencionou que isso significa pensar agora sobre as coisas que podem tornar mais fácil a substituição quando chegar a hora, mas os criadores de software raramente pensam sobre como projetar sua criação para apoiar a sua substituição.

Para muitas pessoas, jogar fora a base de código é um sinal de falha, possivelmente compreensível, dada a natureza exploratória inerente de desenvolvimento de software, mas mesmo assim uma falha. Mas frequentemente o melhor código que se pode escrever é o código que será descartado em alguns anos. Veja o artigo completo na InfQ.

“O que a mim me concerne o SENHOR levará a bom termo; a tua misericórdia, ó SENHOR, dura para sempre; não desampares as obras das tuas mãos.” Salmos 138:8