24 de janeiro de 2008

SOA não é WebService!

Esta postagem é apenas uma visão de um estudante de TI, procurando soluções para alguns dos paradigmas encontrados nos conceitos de lógica e desenvolvimento de software.
Em uma série de matérias, artigos, fóruns e discuções. vejo uma grande confusão, a de que SOA somente pode ser concebido com WebServices.

Os WebServices são grandes aliados do SOA, porém não só este tipo de tecnologia que permitem que o conceito de SOA seja reproduzido.

Conceito

Na verdade o SOA é um conceito que define que, para se obter boa aplicabilidade e integração entre sistema deve-se ter, baixo acoplamento e granularidade grossa, criando assim módulos funcionais do sistema, e permitindo a reutilização do código.

Isto sisgnifica que serviços devem ser criados e disponibilizados por completo, por exemplo:

Reservar um quarto de hotel;

O serviço terá que verificar a disponibilidade de quartos, alterar o estado do quarto para reservado e adicionar esta reserva ao banco de dados, isto define uma granularidade grossa, e as classes são de granularidade fina, inserir quarto, inserir reserva. alterar status do quarto, cada uma dessas é um metodo e uma interação diferente com o objeto.

E o baixo acoplamento é reproduzido nas aplicações reduzindo as interdependencias dos módulos do sistemas, que segundo a teoria de "Page-Jones", poderia ser uma classe, mas eu prefiro acreditar que devemos criar uma classe que disponibilize o "serviço" ou que na própria classe seja criada um método que disponibilize o "serviço" com um baixo acoplamente, ou seja o método não irá esperar por tipos complexos como parametros, mas irá cuidar de tudo que se deve existir para resolver o assunto.

Por exmplo, no caso da reserva iriamos tem um método criando um objeto de um quarto que estará disponível e irá alterar seu estado e gravar isto no banco.

C#
class Quarto
{
public void ServicoReservar(int idCliente, DateTime chegada, DateTime saida)
{
List oListQuarto = Quarto.Disponiveis(chegada, saida);
if(oListQuarto.Count > 0)
{
oListQuarto[0].Reservar(new Cliente(idCliente));
}
}
}

Para não se ter um método muito complexo, optei por reservar o primeiro quarto que estiver disponível, mas poderia receber o tipo do quarto que deveria estar disponível para reserva, por exemplo.

Este é o conceito básico, não muito detalhado, mas prometo estudar mais sobre a arquitetura SOA para poder disertar melhor sobre o assunto.

Tecnologias

Existem algumas tecnologias que permitem com que o SOA, possa vir a ser reproduzido.
Algumas delas são:

  • Programas de linha de comando;
Em alguns casos esta pode vir a ser a melhor opção, como integração de sistemas que estão alocados em uma mesma máquina ou rede, permitindo que algumas liguagens e tecnologias diferentes, possam se conversar.
  • Via Protocolo Http (WebServices);
Ótima opção para integrar sistemas via intranet e internet, geralmente, são as mais utilizadas pelos arquitetos, por se tratar de uma tecnologia bem disseminada e difundida, e por grande parte das tecnologias suportarem e serem compatíveis.
  • Via TCP/IP (Sockets);
Esta é uma opção bastante performatica, quando precisamos integrar sistemas em Rede, cada tecnologia tem uma forma para se desenvolver com este tipo de protocolo, mas a integração é bastante performática.
  • Com envio de mensagens;
O envio de mensagens é uma ótima opção para garantir que a integração tenha consistência e garantia, geralmente são feitos com sistemas de terceiros MSMQ (Microsoft), MQSeries (IBM), entre outros.
  • Via arquivos (Text/XML);
Existem vários padrões de gravação de arquivos de integração, alguns como CSV, XML, arquivo posicional, entre outros, e esta seria uma boa opção para casos em que a integração não deve ser imediata, mas este é o serviço mais demorado, pesado e menos performático, porém, pode ser uma solução para algumas empresas.
  • Outros;
Eu não conheço nenhum tipo de integração que seja diferente dessas, mas pode ser que existam, ser alguém conhecer, por favor me avisem, que estudarei melhor.
WCF
O WCF é uma tecnologia que decide qual a melhor forma de se integrar com o sistema legado, ele tem que decidir se a integração deve ser feita com HTTP, TCP/IP, via NamedPipes, Text/XML, entre outros...

Esta tecnologia foi desenvolvida, pensando na arquitetura SOA, e para mostrar que não se deve utilizar apenas uma tecnologia como WebServices, .NET Remoting ou MQSeries para se desenvolver uma arquitetura SOA.

Conclusão do autor

Não devemos dizer que SOA é apenas uma tendência, e também que é uma nova tendência, assim como a OOP os conceitos do SOA, foi desenvolvido a alguns anos atrás, mas hoje existe uma necessidade grande das empresas de integrar seus sistemas, e a melhor forma encontrada para se fazer isto é disponibilizando serviços para esta integração, e ainda isto permite que seja feita uma grande organização dos processos da empresa, na visão comercial, isto é ótimo, mas nem por isso devemos utilizar SOA em qualquer projeto que iremos desenvolver, é isso mesmo, não devemos ser movidos pela empolgação, mas sim pela razão.
SOA não é desenvolvido apenas com WebServices, existem várias opções para se desenvolver SOA.


NOTA: Qualquer erro conceitual tecnologicos, sugestões, criticas, etc... poste um comentário aqui e tentarei entrar em contato.

2008 no Java Anywhere

Bom pessoal, estávamos de "férias" (do blog apenas) nesse fim de ano, estaremos voltando agora em Fevereiro trazendo muitas novidades.
O ano de 2007 foi muito corrido, TCC + meu trabalho, projetos OpenSource ou sociais, palestras e etc...
Este ano estou quase que full time na empresa, de segunda a sábado, a noite estou fazendo o curso FJ-91 de Arquiteto Java na Caelum com o Fabio Kung, então quase não tenho tempo de parar para fazer um tutorial, mas prometo me esforçar.
Uma outra novidade legal também, é que o Daniel Quirino (GUJ) está no mesmo projeto que eu, então esperem mais posts pois estou aprendendo demais lá.
O Blog cresceu, temos novos membros de alta qualidade, falarei de alguns aqui e do que esperamos para este ano.
Bom vamos as apresentações:
Eduardo Bregaida - TCS
Tecnologia Java.
Roger Niero - IBM
Tecnologia Java.
Guilherme Moreira - Caelum
Tecnologias Java, Linux.
William Silva - Projeto JEDI
Tecnologia Java.
Carlos Osés - BRQ
Tecnologia Java.
Rodrigo Dias - EDS
Tecnologia Java e Suporte.
Fabiana Anjos - TCS
Tecnologia Java.
Alexandre Campelo - TCS
Tecnologia Java.
Danillo Vellozo - Analista de Sistemas
Tecnologias Java, VBA.
Luis Henrique Caruso Crescenzo - Analista de Sistemas
Tecnologias Metodologias e .NET.
Wesley Forti (Virgulino) - Analista de Sistemas
Tecnologias Java.
Elias Estevão Goulart - Professor de Sistemas de Informação - IMES
Tecnologias Diversas.
Alberto Ribeiro - Analista de Sistemas
Tecnologia Java.

Como dá para se observar a galera trabalha em diversas empresas com diferentes sistemas, este ano espero colocar de JSF, Metodologias de Desenvolvimento Ágil, Materiais para introdução a Lógica e Java, JEE, EJB, WebServices, Análise e Gerência de Requisitos e de Sistemas, VRaptor, Hibernate, JPA dentre diversos outros.

Pessoal, fiquei de colocar minha palestra do JustJava de 2007 aqui mas o link está disponível neste endereço: http://www.sucesusp.org.br/mailing2007/congresso/justjava/apresentacoes/JavaServer.zip

O Paulo Silveira e o Shoes (Phillipe Calçado) também deram uma palestra sobre arquitetura muito legal no JustJava que está disponível neste endereço:
http://www.sucesusp.org.br/mailing2007/congresso/justjava/apresentacoes/arquitetura.pdf


Infelizmente ainda estou vendo um espaço para deixar fontes e apresentações das palestras que o pessoal vai dando durante este ano de 2008.