SCA com Java Parte 1
SCA é um padrão aberto para construção de serviços. Esse padrão é uma das possibilidades para a implementação de serviços compostos usando SOA, mas não é a única. A idéia não é nem um pouco nova, na verdade se você usa Spring Framework é bem provável que você já venha fazendo algo parecido.
A grande diferença do SCA para o que você já faz é que como dito antes SCA é um padrão aberto que prove uma solução para amarração(wire) de serviços e composição de serviços de uma forma padronizada, consistente e independência de fornecedor. Além disso o SCA possibilita a tão sonhada interoperabilidade.
A Interoperabilidade é algo fundamental quando falamos de SOA, mas isso pode ser conseguido de outras formas utilizando orquestração de serviços com BPEL e deixando o transporte para um ESB a vantagem de usar SCA sobre essa outra abordagem que descrevi é o fato de que você tem um módulo mais coeso com SCA.
Conceitos Básicos de SCA
A Figura a cima ilustra do que é composto um componente SCA. Além de componentes SCA conta com Composite e Domínio que são outros conceitos básicos e importantes, vamos falar primeiro do Componente.
O Componente SCA em Java é um ordinária classe java que implementa alguma interface, é só isso mesmo, você pode escrever componentes em outras linguagens e tecnologias como por exemplo BPEL, C++ ou até mesmo em EJB. Para isso vamos precisar de mais um conceito que é o Binding, mas isso fica mais para frente.
Voltando ao componente ele pode se expor seus serviços de diversas formas, as mais comuns são a própria interface Java e depois WebServices. Esse componente pode usar outros componentes que são chamados de referências.
O mesmo serviço pode ter propriedades que são pontos de parametrização do serviço. Como eu disse antes se você já desenvolve com Spring Framework isso tudo faz muito sentido e não é muito diferente da forma que você trabalha.
Adaptar uma aplicação bem feita com Spring para SCA é um doce, des de que você tenha usando e abusado de interfaces e injeção de dependência vai ser um tarefa fácil, mas isso fica para outro post.
O Composite
É como se fosse um modulo para o SCA, nele você faz a composição de um serviço e diz que esse serviço tem diversos serviços. Essas configurações são feitas em XML de forma muito parecida com a injeção de dependências do Spring Framework.
Você pode trabalhar de duas formas ou configura todas as amarrações do SCA através de arquivos .composite ou você usa o auto-wire que é uma forma de ele amarrar os serviços utilizando menos configuração ainda esse é um recurso poderoso que existe no Fabric3 que é uma implementação de SCA para java.
Isso mesmo meu amigo esse recurso de auto-wire é muito semelhante ao recurso de auto-wire do Spring Framework. Você pode compor diversos composites com SCA.
O Domínio
É onde existe um runtime de SCA, você pode ter vários em uma máquina ou ter um domínio por máquina, nessa questão a especificação do SCA 1.0 não se manifesta em como seria esse mecanismo de remotabilidade ela foco nos componentes e na forma de amarração apenas.
A grande diferença do SCA para o que você já faz é que como dito antes SCA é um padrão aberto que prove uma solução para amarração(wire) de serviços e composição de serviços de uma forma padronizada, consistente e independência de fornecedor. Além disso o SCA possibilita a tão sonhada interoperabilidade.
A Interoperabilidade é algo fundamental quando falamos de SOA, mas isso pode ser conseguido de outras formas utilizando orquestração de serviços com BPEL e deixando o transporte para um ESB a vantagem de usar SCA sobre essa outra abordagem que descrevi é o fato de que você tem um módulo mais coeso com SCA.
Conceitos Básicos de SCA
A Figura a cima ilustra do que é composto um componente SCA. Além de componentes SCA conta com Composite e Domínio que são outros conceitos básicos e importantes, vamos falar primeiro do Componente.
O Componente SCA em Java é um ordinária classe java que implementa alguma interface, é só isso mesmo, você pode escrever componentes em outras linguagens e tecnologias como por exemplo BPEL, C++ ou até mesmo em EJB. Para isso vamos precisar de mais um conceito que é o Binding, mas isso fica mais para frente.
Voltando ao componente ele pode se expor seus serviços de diversas formas, as mais comuns são a própria interface Java e depois WebServices. Esse componente pode usar outros componentes que são chamados de referências.
O mesmo serviço pode ter propriedades que são pontos de parametrização do serviço. Como eu disse antes se você já desenvolve com Spring Framework isso tudo faz muito sentido e não é muito diferente da forma que você trabalha.
Adaptar uma aplicação bem feita com Spring para SCA é um doce, des de que você tenha usando e abusado de interfaces e injeção de dependência vai ser um tarefa fácil, mas isso fica para outro post.
O Composite
É como se fosse um modulo para o SCA, nele você faz a composição de um serviço e diz que esse serviço tem diversos serviços. Essas configurações são feitas em XML de forma muito parecida com a injeção de dependências do Spring Framework.
Você pode trabalhar de duas formas ou configura todas as amarrações do SCA através de arquivos .composite ou você usa o auto-wire que é uma forma de ele amarrar os serviços utilizando menos configuração ainda esse é um recurso poderoso que existe no Fabric3 que é uma implementação de SCA para java.
Isso mesmo meu amigo esse recurso de auto-wire é muito semelhante ao recurso de auto-wire do Spring Framework. Você pode compor diversos composites com SCA.
O Domínio
É onde existe um runtime de SCA, você pode ter vários em uma máquina ou ter um domínio por máquina, nessa questão a especificação do SCA 1.0 não se manifesta em como seria esse mecanismo de remotabilidade ela foco nos componentes e na forma de amarração apenas.
SCA com Composite - Componentes e Domínios
A Figura a cima mostra os conceitos explicados anteriormente, nesse cenário uma aplicação JEE em alguns container acessa o composite SCA A que por sua vez acessa a um componente Java que acessa a um componente de outro domínio escrito em C++ e acessa ao um banco de dados forma do SCA, como pode ver tecnologias que não sejam SCA podem conversar com tecnologias SCA.
Os Bindings
Fazem parte de especificação SCA e padronização a comunicação de SCA com outras tecnologias como EJB, JMS, JCA e outros. Isso ajuda a desenvolver aplicações em java que podem utilizar SCA e bem como a migrar aplicações existentes para o padrão SCA.
Existem Anotações
Na especificação de SCA para java estão especificadas um conjunto de anotações que podem ser utilizadas, dentre elas cito a @Reference e @Propertie que servem, na ordem, para indicar a referência de outros serviço e para obter a a propriedade do de um serviço.
Existem algumas implementação de SCA, existem implementações proprietárias como a da IBM mas existem implementações open source como a da Fabric3, no próximo post vou mostrar como implementar um composite SCA de maneira simples com Fabric3 Maven 2 e anotações.
Abraços e até o próximo post.
Os Bindings
Fazem parte de especificação SCA e padronização a comunicação de SCA com outras tecnologias como EJB, JMS, JCA e outros. Isso ajuda a desenvolver aplicações em java que podem utilizar SCA e bem como a migrar aplicações existentes para o padrão SCA.
Existem Anotações
Na especificação de SCA para java estão especificadas um conjunto de anotações que podem ser utilizadas, dentre elas cito a @Reference e @Propertie que servem, na ordem, para indicar a referência de outros serviço e para obter a a propriedade do de um serviço.
Existem algumas implementação de SCA, existem implementações proprietárias como a da IBM mas existem implementações open source como a da Fabric3, no próximo post vou mostrar como implementar um composite SCA de maneira simples com Fabric3 Maven 2 e anotações.
Abraços e até o próximo post.