Integração de sistemas

Oi!

Estou estudando sobre integração de sistemas para implementar em um trabalho da faculdade.
Imagine o seguinte ambiente com tecnologias diferentes:

Site e-commerce em um servidor na web qualquer.
Sistema local de estoque.

Como integrar esses dois caras? A fim de, uma venda dar baixa no sistema de estoque, e por ai vai…

Eu li sobre:
Web services
Spring integration
Apache Camel
REST

Afinal, alguém tem alguma idéia, ou já fez algo do tipo? Utilizou algum framework?

Obrigado.

depende de qual tecnologia vc tem nas pontas.

se seu servidor web roda C# e seu cliente é baseado em WPF, o natural seria utilizar WS* (SOAP);

por outro lado, se você tem uma aplicação Rails, Grails, VRaptor… no web server e swing ou jafafx no cliente, o mais natural seria optar por REST;

e entre esses 2 cenários existem outras dezenas de possibilidades. Qual é especificamente o seu caso?

Integração via banco, é o que todo mundo faz.

isso não é mais realidade a pelo menos 10 anos.

A frase correta seria :

“Integração via banco, é o que todo mundo, sem noção, faz.”

Esse é o pior tipo de integração de todos os tempos. Nunca, nunca o utilize. Hoje não ha mais razão para isso.

Desculpem colegas, sem querer causar polêmica… mas todo chinelo velho encontra seu pé torto. Veja um caso que temos por aqui onde trabalho: dois sistemas rodando independentemente, mas no mesmo servidor e ambos com banco Oracle. Conseguimos integra-los sem colocar nenhum “terceiro” entre eles. Um caso desses dá pra resolver com um simples database link…

Cada caso é um caso…para fazer a integralção é preciso saber (dentre outras coisas):

  • Periodicidade mínina para sincronizar os sistemas (online, 1 hora, diária)
  • Qual a plataforma/linguagem em ambas as pontas (de Java para Java, por exemplo seria fácil)
  • Se o sistema local (estoque) é um legado e vc perdeu o código fonte/não tem acesso
  • Se o sistema local (estoque) aceita chamadas via socket ou webservice ou somente lê arquivos textos

etc…etc…etc…

Mil possibilidades… A mais evidente (que, com certeza, é o que os seus professores de faculdade esperam) é que você utilize web services. Nisso, entra tanto web services clássicos (SOAP/WS-*) quanto REST.

Agora, quanto às possibilidades, entram várias variáveis. Só acrescentando às que o Giulliano falou, ainda tem o tamanho dos arquivos e criticidade dos dados (neste último caso, uma integração com Camel sobre JMS, por exemplo, seria mais “resistente” do que uma baseada somente em web services).

Para dar uma sugestão mais próxima do que você precisa, seria mesmo bastante interessante que você fornecesse esses dados.

[]'s

Cada caso é um caso…para fazer a integralção é preciso saber (dentre outras coisas):

  • Periodicidade mínina para sincronizar os sistemas (online, 1 hora, diária)
  • Qual a plataforma/linguagem em ambas as pontas (de Java para Java, por exemplo seria fácil)
  • Se o sistema local (estoque) é um legado e vc perdeu o código fonte/não tem acesso
  • Se o sistema local (estoque) aceita chamadas via socket ou webservice ou somente lê arquivos textos

etc…etc…etc…[/quote]

[quote=Alexandre Saudate]Mil possibilidades… A mais evidente (que, com certeza, é o que os seus professores de faculdade esperam) é que você utilize web services. Nisso, entra tanto web services clássicos (SOAP/WS-*) quanto REST.

Agora, quanto às possibilidades, entram várias variáveis. Só acrescentando às que o Giulliano falou, ainda tem o tamanho dos arquivos e criticidade dos dados (neste último caso, uma integração com Camel sobre JMS, por exemplo, seria mais “resistente” do que uma baseada somente em web services).

Para dar uma sugestão mais próxima do que você precisa, seria mesmo bastante interessante que você fornecesse esses dados.

[]'s[/quote]

Olá, senhores. Obrigado pelas respostas.

  • Tenho acesso aos fontes do sistema local. Posso alterá-los e fazer aceitar as chamadas que o Giuliano citou;
  • A linguagem do sistema local é Java e do E-commerce provavelmente será um php;
  • Os 2 sistemas estarão em servidores separados;

Na sincronização dos dados, funcionaria assim: é cadastrado um produto que tenha no estoque no e-commerce. Ai é feito uma venda deste produto.
Se for sincronização a cada hora ou diária, teria o risco de vender algo que já não tem mais no estoque, né? Acho que teria de ser “em tempo real”, tem como?
Ou na hora de fechar a conta, fazer a busca lá no estoque e se tiver fecha. O que acham?

Cada caso é um caso…para fazer a integralção é preciso saber (dentre outras coisas):

  • Periodicidade mínina para sincronizar os sistemas (online, 1 hora, diária)
  • Qual a plataforma/linguagem em ambas as pontas (de Java para Java, por exemplo seria fácil)
  • Se o sistema local (estoque) é um legado e vc perdeu o código fonte/não tem acesso
  • Se o sistema local (estoque) aceita chamadas via socket ou webservice ou somente lê arquivos textos

etc…etc…etc…[/quote]

[quote=Alexandre Saudate]Mil possibilidades… A mais evidente (que, com certeza, é o que os seus professores de faculdade esperam) é que você utilize web services. Nisso, entra tanto web services clássicos (SOAP/WS-*) quanto REST.

Agora, quanto às possibilidades, entram várias variáveis. Só acrescentando às que o Giulliano falou, ainda tem o tamanho dos arquivos e criticidade dos dados (neste último caso, uma integração com Camel sobre JMS, por exemplo, seria mais “resistente” do que uma baseada somente em web services).

Para dar uma sugestão mais próxima do que você precisa, seria mesmo bastante interessante que você fornecesse esses dados.

[]'s[/quote]

Olá, senhores. Obrigado pelas respostas.

  • Tenho acesso aos fontes do sistema local. Posso alterá-los e fazer aceitar as chamadas que o Giuliano citou;
  • A linguagem do sistema local é Java e do E-commerce provavelmente será um php;
  • Os 2 sistemas estarão em servidores separados;

Na sincronização dos dados, funcionaria assim: é cadastrado um produto que tenha no estoque no e-commerce. Ai é feito uma venda deste produto.
Se for sincronização a cada hora ou diária, teria o risco de vender algo que já não tem mais no estoque, né? Acho que teria de ser “em tempo real”, tem como?
Ou na hora de fechar a conta, fazer a busca lá no estoque e se tiver fecha. O que acham?

[/quote]

Web services e orientação a serviços cairiam como uma luva no seu caso.

Porque?

  1. Comunicação entre linguagens heterogêneas - caso de uso ideal para web services
  2. Comunicação online (ou seja, não em lotes) - também, caso de uso ideal para web services
  3. Manter os sistemas desacoplados - caso de uso ideal para orientação a serviços

[]'s

Também acho que o webservice é ideal…

[quote=djavali]Oi!

Estou estudando sobre integração de sistemas para implementar em um trabalho da faculdade.
Imagine o seguinte ambiente com tecnologias diferentes:

Site e-commerce em um servidor na web qualquer.
Sistema local de estoque.

Como integrar esses dois caras? A fim de, uma venda dar baixa no sistema de estoque, e por ai vai…

Eu li sobre:
Web services
Spring integration
Apache Camel
REST

Afinal, alguém tem alguma idéia, ou já fez algo do tipo? Utilizou algum framework?

Obrigado.
[/quote]

Cara, você está no caminho certo, dê uma olhada em ESB também. Mas a primeira coisa a se fazer, antes de integrar sistemas, é entender os sistemas e suas limitações. Em casos de sistemas pré-existentes: Como eles são? Rodam em mainframes, console, desktop, web? É um serviço? Depois, a forma de saida gerada por um software, precisa de transformação? São de terceiros ou de vocês?

Agora, se estiverem em produção, pode-se já planejar a integração usando webservices(soap ou rest)… fácil consumir, praticamente qualquer linguagem consegue acessar, de praticamente qualquer plataforma.

Sobre integração via banco: já foi muito usado no passado, mas é um tiro no pé, praticamente só funciona com softwares da mesma softhouse e se alguém muda algo… nem precisa falar mais, né?

[quote=luizalbsilva]

Cara, você está no caminho certo, dê uma olhada em ESB também. Mas a primeira coisa a se fazer, antes de integrar sistemas, é entender os sistemas e suas limitações. Em casos de sistemas pré-existentes: Como eles são? Rodam em mainframes, console, desktop, web? É um serviço? Depois, a forma de saida gerada por um software, precisa de transformação? São de terceiros ou de vocês?

Agora, se estiverem em produção, pode-se já planejar a integração usando webservices(soap ou rest)… fácil consumir, praticamente qualquer linguagem consegue acessar, de praticamente qualquer plataforma.

Sobre integração via banco: já foi muito usado no passado, mas é um tiro no pé, praticamente só funciona com softwares da mesma softhouse e se alguém muda algo… nem precisa falar mais, né?[/quote]

Obrigado pela resposta. Os sistemas estão em produção, portanto posso planejar a integração sem stress. :slight_smile:
Vou seguir as dicas dada por vcs, que é, usar Webservice + SOA. Ai vem a questão do soap ou rest. Qual melhor neste caso? Ou é apenas questão de se adaptar a uma delas?

Diferença principal entre as duas é que em soap, o contrato é explícito: vc precisa montar um wsdl, e em rest fica implícito, podendo-se em alguns casos até ter vários formatos (xml, jason, etc), mas sem o stress de ter que montar um documento descritivo. Além disso, no primeiro vc teria que usar para a segurança usar a especificação ws-* security, enquanto na outra vc vai aproveitar o http… sinceramente gosto muito da idéia do rest, mas é legal conhecer a soap também… cada uma tem vantagens e desvantagens, e cada projeto, dependendo das características, pode exigir um em detrimento de outro… as vezes as próprias políticas da empresa já delimitam qual utilizar.

[]'s

[quote=djavali][quote=luizalbsilva]

Cara, você está no caminho certo, dê uma olhada em ESB também. Mas a primeira coisa a se fazer, antes de integrar sistemas, é entender os sistemas e suas limitações. Em casos de sistemas pré-existentes: Como eles são? Rodam em mainframes, console, desktop, web? É um serviço? Depois, a forma de saida gerada por um software, precisa de transformação? São de terceiros ou de vocês?

Agora, se estiverem em produção, pode-se já planejar a integração usando webservices(soap ou rest)… fácil consumir, praticamente qualquer linguagem consegue acessar, de praticamente qualquer plataforma.

Sobre integração via banco: já foi muito usado no passado, mas é um tiro no pé, praticamente só funciona com softwares da mesma softhouse e se alguém muda algo… nem precisa falar mais, né?[/quote]

Obrigado pela resposta. Os sistemas estão em produção, portanto posso planejar a integração sem stress. :slight_smile:
Vou seguir as dicas dada por vcs, que é, usar Webservice + SOA. Ai vem a questão do soap ou rest. Qual melhor neste caso? Ou é apenas questão de se adaptar a uma delas?[/quote]

Costumo dizer para os meus alunos que a diferença entre REST e SOAP está no ponto de complexidade. Ao passo que SOAP é complicado tecnicamente falando (por possuir o WSDL, ter a questão das especificações WS-*, etc.), é fácil realizar a modelagem dos serviços usando SOAP, já que o formato RPC emula um que já estamos acostumados, que é a chamada de métodos dentro da nossa própria linguagem.

Já REST é simples, tecnicamente falando, porém é mais complexo de modelar. Existem várias técnicas em REST que são desconhecidas pela maior parte dos desenvolvedores desse tipo de serviço que são essenciais para um projeto de sucesso desse tipo.

Você também deve levar em consideração que existem capacidades presentes em SOAP que REST simplesmente não tem (ou não padroniza). Para citar alguns exemplos: orquestração utilizando ferramentas (ou seja, BPEL), estabelecimento de transações, serviços assíncronos, Single Sign-On, etc.

[]'s

Obrigado Alexandre Saudate e luizalbsilva pela ajuda. Tenho 4 meses pra desenvolver esses caras e integrá-los. Claro que não precisa ser um submarino, mais é interessante eu ter bastante coisa e, como tenho pouco tempo, acho que vou dar uma olhada mais a fundo em REST já que pelo o que vcs me disseram é mais simples.

web service pra integrar dois sistemas que você mesmo criou? :shock:

web service pra integrar dois sistemas que você mesmo criou? :shock:

[/quote]

Sistemas que vou criar. Os dois sistemas estarão em ambientes diferentes, um local e outro web, conforme 1º post. Que outra forma vc sugere?

web service pra integrar dois sistemas que você mesmo criou? :shock:

[/quote]

Sistemas que vou criar. Os dois sistemas estarão em ambientes diferentes, um local e outro web, conforme 1º post. Que outra forma vc sugere?[/quote]

Se vc vai criar os dois sistemas pode compartilhar a mesma base e não há necessidade de webservices.

web service pra integrar dois sistemas que você mesmo criou? :shock:

[/quote]

Sistemas que vou criar. Os dois sistemas estarão em ambientes diferentes, um local e outro web, conforme 1º post. Que outra forma vc sugere?[/quote]

Se vc vai criar os dois sistemas pode compartilhar a mesma base e não há necessidade de webservices.[/quote]