terça-feira, 28 de agosto de 2007

Integrando CICS com Jbi4CICS Component

Neste artigo, escrito por Amedeo Cannone e Stefano Rossini, é apresentado o componente Jbi4CICS em conjunto com um exemplo de integração que mostra como é o funcionamento por trás do ciclo de vida do JBI.

O componente Jbi4CICS é um JBI Binding Component Open Source que pode ser usado para conectar um ESB (Enterprise Service Bus) com um sistema CICS.

Boa leitura.

segunda-feira, 13 de agosto de 2007

Qual a atomicidade e/ou granularidade dos meus serviços?

Bem, esta é uma questão que toda vez eu sou questionado em minhas apresentações sobre SOA que tenho feito para alguns clientes, pela empresa onde eu atuo, pelo Brasil.

Além disto, esta é uma questão que se alastra desde os primórdios dos paradigmas de programação procedural, orientação a objetos, componentização, dentre outros.

Bom, para tentar responder a esta pergunta, antes de mais nada, vamos à alguns conceitos:

Atomicidade: Um serviço atômico, são serviços que desempenham uma tarefa ou ação específica.

Granularidade: Consiste na mensuração do tamanho, escala e nível de detalhes dos serviços. Onde serviços "gordos" são coarse-grained (baixa granularidade) e serviços "leves" são fine-grained (alta granularidade).

Para responder a esta questão, vamos considerar dois pontos.

Primeiro: Abordagem de Descobrimento dos Serviços

A atomicidade e/ou granularidade de um serviço pode depender da estratégia de descobrimento do mesmo. Ou seja, se nós fizermos uma abordagem "top-down", primeiro iremos identificar os nossos processos de negócios, onde cada atividade dos mesmos podem ser desmembradas em sub-processos e assim por diante, até que não seja mais possível desmembrá-los. E neste ponto, teremos nossos serviços.

Por outro lado, se nós adotarmos uma abordagem "bottom-up", nossos serviços vão sendo expostos através das funcionalidades candidatas dos sistemas legados existentes, onde a granularidade e a atomicidade destes serviços vão sendo refinadas até que os mesmos possam ser compostos (orquestrados) em processos de negócios.

Segundo: Características dos Serviços

Antes de percebermos as caracterísitcas dos serviços, primeiramente os serviços podem ser classificados da seguinte forma:

  1. Serviços de Negócios (Business Level Services): Este serviços representam atividades/funções reais de negócios.
  2. Serviços de Infra-Estrutura (Infrastructure Level Services): Estes serviços não contém regras de negócios, mas são necessários para suportar necessidades dos serviços de negócios.

Com isto, dependendo da classificação dos serviços, podemos identificar suas características e objetivos chaves que julgamos necessários para cada um dos serviços, tais como: reusabilidade, visibilidade, transacionabilidade, performance, dentre outras; Que devem serem levados em consideração em qualquer projeto de adoção SOA. Pois, um serviço pode ser atômico em virtude da reusabilidade, porém não atômico devido as dificuldade transacionais. Da mesmo forma, um serviço pode ser fine-grained em virtude da visibilidade, porém coarse-grained em razão da performance.

Portanto, segue abaixo uma tabela ou matriz, que talvez nos ajude a identificar melhor a atomicidade e/ou granularidade dos nossos serviços que estão projetados, dentro das características principais desejadas.


Obs: Na imagem acima, "Top-Down" e "Bottom-Up" indicam as abordagens explicitadas um pouco mais acima. Onde, "Top-Down" está mais direcionada aos processos de negócios e "Bottom-Up" às estratégias de migração.

Bom, como podemos perceber a definição da atomicidade e granularidade dos serviços que farão parte de um projeto de adoção SOA é uma tarefa bastante importante e delicada. Onde, a estratégia adotada para identenficação das mesmas, pode interferir no sucesso ou fracasso do projeto.

Espero ter ajudado um pouco na resposta desse grande dilema.

Em breve, voltaremos a postar novas experiências.