SOA - Service-oriented architecture

Gostaria de tirar algumas duvidas sobre SOA.

Seguindo a definição do Wikipédia.
Fiquei com algumas duvidas. Estão em negritos as duvidas quanto aos termos, segue abaixo:

[quote]Serviço:
É uma função independente, sem estado (stateless) que aceita uma ou mais requisições e retorna uma ou mais respostas através de uma interface padronizada e bem definida. Serviços podem também realizar partes discretas de um processo tal como editar ou processar uma transação. Serviços não devem depender do estado de outras funções ou processos. A tecnologia utilizada para prover o serviço, tal como uma linguagem de programação, não pode fazer parte da definição do serviço.[/quote]
Segue o termo com duvida e ao lado coloco o que eu acho o que é:

  1. Funções: Serviços ?
  2. Processos: Parte de um serviço ?
  3. A tecnologia utilizada para prover o serviço, tal como uma linguagem de programação, não pode fazer parte da definição do serviço: O meio de comunicação deve ser transparente e independente da linguagem de programacao, ou seja , no meu caso Java. A transparência pode ser definida usando XML ?
  1. Descoberta: Repositório de Serviços ?

Vou continuar meu estudo sobre o SOA, tenho ainda 3 apostilas para ler.
Mas até agora eu não vi(li) nada além de sistemas se comunicando através de Web Services.
Tem como eu simular o uso do SOA aqui em casa?
Por exemplo. Um serviços que envia 2 números aleatórios e outro que recebe e soma esses números ?

Pode ter uma certeza. SOA é muito mais do que Web Services. Compre um bom livro sobre SOA… :slight_smile:

[quote=Taz] (…)

Pode ter uma certeza. SOA é muito mais do que Web Services. Compre um bom livro sobre SOA… :slight_smile: [/quote]

…como por exemplo ? Qual ?

Olá

Fora os clássicos do Thomas Erl, há um livro recente que estou gostando (ainda estou na página 137).

SOA Using Java Web Services

Este livro tem o grande mérito de chamar a atenção sobre como é complexo usar web services com Java (JAX-WS 2.x, JAXB 2.x, WS-metadata, etc.). O livro apresenta também a proposta de um framework como tentativa de tornar um pouco mais fácil usar toda parafernália. Só que eu ainda não cheguei nos capítulos do framework.

Venho estudando web services, SOA e afins há mais ou menos um ano. Vou resumir abaixo tudo que aprendi em poucas palavras ou em uma frase:

Web Services é coisa [color=red]MUITO[/color] complexa

Cuidado com as decisões gerenciais de usar web services sem avaliar as dificuldades. Que ninguém se engane com os Hello Worlds que existem por aí. E muito menos com os exemplos em que tudo começa do zero e se adota o modo Start from Java, isto é, com o wsdl sendo deduzido a partir da classe Java.

Na vida real onde a gente precisa integrar 2 aplicações prontas e precisa fazer as coisas do modo Start from Java [color=red]AND[/color] wsdl, a complexidade é enorme e dá muito trabalho para funcionar corretamente. A dica que já dei em outros tópicos é usar wrappers ao invés de tentar ficar com as classes geradas.

SOA só se torna um pouco mais simples quando a gente quer integrar 2 aplicações na mesma empresa (*) e pode optar por algo sem muita especificação usando POX ou JSON via algo parecido com REST. É por isto que sempre insisto que use REST caso isto seja possível.

PS: (*) Escrevi na mesma empresa porque nem sempre se pode escapar dos wsdl. Porém, há várias empresas grandes que disponibilizam serviços usando REST. Na palestra de web services do Conexão Java do ano passado há um exemplo bem simples acessando o Yahoo. Se a palestra fosse hoje, listaria com facilidade um monte de empresas que disponibilizam serviços REST.

[]s
Luca

[quote=Luca]Olá

Fora os clássicos do Thomas Erl, há um livro recente que estou gostando (ainda estou na página 137).

SOA Using Java Web Services

(…)
[/quote]

Pelos teus comentários parece que esses livros encaram SOA == Webservices. Sabes se algum deles fala sobre SOA que não seja orientado a WebServices ?

O Taz comentou que SOA é muito mais que webservices, o que é obvio, mas todas as implementações parecem ser usando webservices (HTTP+SOAP , especificações WS-) e fala-se pouco sobre outras formas. Quando pedi por exemplos de livros era no contexto da resposta do Taz,entendendo que “bom livro” é aquele que fala de SOA não amarrado a webservices

Por exemplo, Jini é um tipo de SOA ?

Olá

Reli minha mensagem e não vi nada que deixasse transparecer esta igualdade. Inclusive o livro que indiquei chama-se SOA usando Java Web Services. O livro trata da plataforma Java. Mas se poderia fazer SOA usando Axis 2, Apache CXF (não usem mais o XFire em projetos novos), Apache XML-RPC, JSON, POX, CSV, etc.

Web services são serviços sendo acessados através de protocolo web (HTTP). Isto tem enormes vantagens como por exemplo atravessar com facilidade firewalls. Acho bem claro o papel de web services na arquitetura SOA mas uma breve googlada pode esclarecer mais caso seja necessário.

Mas é possível acessar serviços usando outros protocolos. Alguém poderia fazer um projeto SOA baseado em RMI como é o caso de JINI. Nem precisaria um livro de SOA para imaginar como fazer isto. Só que seria uma solução amarrada a Java e sujeito a um monte de restrições na rede.

De minha parte, como defensor de soluções baseadas em HTTP, eu daria preferência a SOA baseado em HTTP, mesmo que usasse JMS. Veja o capítulo 9 do livro Java Messaging do Eric Bruno com JMS passando por tunel HTTP…

[]s
Luca

Este livro ai e em português

Olá

O livro que indiquei é muito recente e ainda não tem tradução em português.

Em português recomendo para iniciantes o livro SOA e Web Services em Java do Cleuton Sampaio. Serve como introdução a web services e SOA. Nem precisa ler o livro todo porque tem uma parte em que ele aborda o AXIS 1 que é perda de tempo tentar aprender.

[]s
Luca

[quote=Luca]Olá

Reli minha mensagem e não vi nada que deixasse transparecer esta igualdade. Inclusive o livro que indiquei chama-se SOA usando Java Web Services. O livro trata da plataforma Java. Mas se poderia fazer SOA usando Axis 2, Apache CXF (não usem mais o XFire em projetos novos), Apache XML-RPC, JSON, POX, CSV, etc.

(…)

Web services são serviços sendo acessados através de protocolo web (HTTP). [/quote]
[/quote]
Veja http://www.infoq.com/news/2007/07/soa-ws-relation para uma referencia do que eu tou falando.
Ok que web services é sobre HTTP. Não estou falando deles. Web Services é um capitulo em si mesmo. A pergunta era SOA que não use webservices, ou seja, que não use HTTP. Tlv que nem use XML , JSON , etc…
Existem mecanismo muito semelhantes que poderiamos usar para uma arqutiectura orientada a serviços como JMX ou JINI. Já que eles separam o protocolo de transporte. Então, em tese, O JBoss, que é baseado apenas em JMX seria um tipo de SOA. A dúvida é se isso se caracteriza como SOA, ou não e que autores/livro(s) explicariam essa classificação. Se é que algum o faz…

Resumindo: tem algum livro que seja apenas sobre SOA e não refira webservices nem nenhum tecnologia em particular ? Que defina o que SOA é ? Ou temos que concluir que SOA é apenas um buzzword ?

Olá

Sérgio

SOA é conseqüência de anos e anos de EAI. É evidente que SOA deve usar o que tradicionalmente se usa para EAI.

Você pode achar milhares de links no google com SOA usando web services ou as alternativas como JSON ou POX/REST. Pode ser que você ache também algum saudosista fazendo SOA com CORBA ou RMI. Será alguém que terá imensas dificuldades de integrar empresas diferentes, cada uma com seu firewall e sua política de segurança particular. Será que tem valor um livro novo para isto?

Acredito que você tenha trocado de sigla e citado JMX por engano pois JMX não se presta para isto. Uma aplicação SOA pode e deve usar JMX. Mas a infraestrutura será a dos conectores e adapters. Hoje em dia se usa RMI como conector remoto JMX mas já se pode baixar e usar JMX via SOAP.

Tentando advinhar, talvez você estivesse pensando em JMS quando escreveu JMX. Sempre gostei de JMS e acho uma das melhores coisas do Java. Há diversos servidores de mensagens e ESBs muito bons e de graça. Há o Apache Camel que ajuda a criar uma arquitetura de mensagens coerentes com o livro de patterns do Gregor Hohpe. E como disse antes, se pode também usar JMS em tunel HTTP.

Na área de TI sempre existiram buzzwords discutindo assuntos novos ou novas visões de assuntos antigos. Sempre existiu a necessidade por SOA e ainda assistiremos o surgimento de novas siglas nomeando coisas parecidas mas não exatamente iguais. No meu caso, meu maior interesse é por EDA que muita gente confunde como substituto de SOA mas na prática é apenas um complemento para determinados ambientes.

[]s
Luca

Não, era JMX mesmo : Java Management Extensions.
Concluo então do vc falou que JBoss não é SOA.

Obrigado pelos esclarecimentos

Olá

Certo, o JBoss usa JMX para acessar seus serviços internos. Não tem nenhuma utilidade para integrar aplicações diferentes.

Mas se pode escrever uma aplicação EAI baseada em serviços com arquitetura SOA que use o JBoss e também o seu conceito de deployment de serviços. Alongando o raciocínio, se pode obter um sistema em que as aplicações do ambiente SOA usem JMX e o jmx-console do JBoss no seu monitoramento e gerenciamento.

O JBoss também se presta como servidor de mensagens e isto sim tem mais a ver com uma arquitetura que integre serviços.

[]s
Luca

[quote=Luca]Olá

Certo, o JBoss usa JMX para acessar seus serviços internos. Não tem nenhuma utilidade para integrar aplicações diferentes.
[/quote]

É mais que isso. JBoss usa JMX para interligar os serviços Os serviços são MBeans , portanto todos têm uma interface e JMX estabelece mecanismos de acessar essas interfaces de qualquer lugar, até via HTTP.
Ou seja. o JBoss é uma grande ecosistema de serviços e a sua arquitetura é orientada a serviços. Parece que apenas não é SOA porque esses serviços não são independentes da implementação.

O serviço de mensagens é independente do JBoss e pode ser usado standalone.

Olá

[quote=sergiotaborda]É mais que isso. JBoss usa JMX para interligar os serviços Os serviços são MBeans , portanto todos têm uma interface e JMX estabelece mecanismos de acessar essas interfaces de qualquer lugar, até via HTTP.
Ou seja. o JBoss é uma grande ecosistema de serviços e a sua arquitetura é orientada a serviços. [/quote]

Por mais fã que eu seja de JMX, acho que você está exagerando um pouco. Nem o Juha Lindfors que criou a arquitetura do JBoss baseado em JMX e grande conhecedor de JMX, citaria o JBoss como exemplo de SOA.

Aliás, o grande barato do livro dele é justamente explicar o sistema d proxy remoto do JMX. Na época em que foi escrito o livro, a Sun ainda não havia lançado o JMX remote e o Juha criou tudo na raça.

Para mim JMX é uma jóia esquecida por grande parte dos desenvolvedores Java. Mas sua aplicação é para gerenciamento e monitoramento.

[]s
Luca

Acabei ganhando um grande conhecimento abstrato neste tópico pela resposta de dois grandes conhecedores nas arquiteturas aqui citadas.
Mais como preciso aprender SOA e suas funcionalidades.
Gostaria que Luca, Sergio e os demais que entendem de SOA, me ajudem com os termos em negritos que originou a minha duvida e a criação do tópico.

Estou aqui lendo sobre SOA e vou comprar o livro indicado pelo Luca.

Luca, você acredita que aprender SOA a fundo é uma tarefa do gerente de tecnologia do projeto / empresa ou todos os desenvolvedores precisam saber a fundo de SOA?

Obrigado pela confiança, mas ainda estou tentando saber o que SOA é :lol: …

Olá

[quote=afsrj]Estou aqui lendo sobre SOA e vou comprar o livro indicado pelo Luca.

Luca, você acredita que aprender SOA a fundo é uma tarefa do gerente de tecnologia do projeto / empresa ou todos os desenvolvedores precisam saber a fundo de SOA?[/quote]

Este livro é bom e como eu disse, chama a atenção sobre como é difícil toda esta questão.

Acho que uma empresa grande que tenha necessidade de integrar suas aplicações, antes de iniciar um projeto deste tipo deve estudar bem o assunto. Alguém na empresa, de preferência alguém que conheça bem o negócio da empresa, deve estudar como é possível integrar em termos de arquitetura. Deve entender direitinho quais soluções adotar e o custo de cada alternativa.

Desconfio que as empresas decidem integrar sem ter noção da dificuldade. Assistem um Hello World na palestra de algum evento e acham que é Next, Next, Finish.

O mais importante na questão de SOA, EAI ou que nome tenha, é que a necessidade seja a mãe das modificações e não apenas um devaneio gerencial.

Sobre seus negritos:

  • Entenda como serviço tudo que um sistema pode fazer por outro. Pode ser uma coisa simples como informar o salário de um funcionário como uma transação complexa que exija atomicidade.

  • Uma arquitetura baseada em serviços exige módulos e componentes coesos e de acoplamento mais fraco possível. Só este item já é violado em um monte de aplicações em muitas empresas. Nem adianta tentar fazer SOA em uma empresa assim porque antes exigiria alterar os serviços que já estão funcionando.

  • As linguagens e as plataformas usadas TEM a ver com as decisões a serem tomadas em termos de arquitetura e modo de disponibilizar os serviços. Não basta usar XML, é preciso passar dados do jeito que a outra plataforma entenda.

[]s
Luca

Uma coisa que estava lendo bem bacana, para o problema de firewalls apresentado,

[quote=Luca]

SOA Using Java Web Services

Este livro tem o grande mérito de chamar a atenção sobre como é complexo usar web services com Java (JAX-WS 2.x, JAXB 2.x, WS-metadata, etc.). O livro apresenta também a proposta de um framework como tentativa de tornar um pouco mais fácil usar toda parafernália. Só que eu ainda não cheguei nos capítulos do framework.

(…)

[]s
Luca[/quote]

Luca, sabe dizer se tem a versão traduzida deste livro que você indicou? Eu procurei no google e não encontrei ainda.

Li um que gostei muito, escrito por um brasileiro, SOA e WEB SERVICES EM JAVA de Cleuton Sampaio.

Ele usa uma linguagem muito fácil de entender. Me ajudou muito na implementação de Web Services aqui na empresa. Mas estou com a sensação de que falta algo.
Gostaria de me especializar mais nesta arquitetura, pois gostei muito de trabalhar com ela.

Testei as API’s APACHE AXIS 1.3, 1.4 e 2.0; XFire CODEHAUS 1.1 e um pouquinho do JAX-WS (pois preciso estudar mais de ANNOTATION ainda).

Olá

Como já respondi antes:

[quote=Luca]O livro que indiquei é muito recente e ainda não tem tradução em português.

Em português recomendo para iniciantes o livro SOA e Web Services em Java do Cleuton Sampaio. Serve como introdução a web services e SOA. Nem precisa ler o livro todo porque tem uma parte em que ele aborda o AXIS 1 que é perda de tempo tentar aprender.[/quote]

[]s
Luca