Olá todos,
Gostaria de tirar algumas dúvidas quanto a integração. Minha situação é a seguinte: Tenho dois sistemas em linguagens diferentes e preciso fazer uma integração a nível de banco que também são diferentes MYSQL para ORACLE e deve ser agendado. Minha intenção é implementar um middleware para futuras e necessárias integrações a nível de negócio, banco etc.
Bem, pensei em usar JEE:
EJB com @schedule para agendar e jpa+hibernate. Então já consegui visualizar alguns problemas como … um dos sistemas tem mais de 65.000 registros resultando timeout tentando recuperar 40.000.
Falando em boas práticas: deveria tratar tudo com xml e webservices ???
comecei a ler sobre : Mule Soft, Talend ESB e Apache camel… não vi nada sobre agendamento … e o que vi muito foi webservice, mensageria e xml…
Alguem pode me dá um norte de por onde devo começar ???
Obrigado.
Vamos por partes,
Quanto as boas práticas, sim, se vc tem um sistema que precisa integrar, sempre é melhor disponibilizar os serviços do seu sistema, seja por webservice, mensageria, etc, usando ou não ESB ou apache camel; Mas isso depende de uma análise do que vc realmente precisa.
E claro, vc não ia achar nada nesses caras referentes a agendamento, porque uma coisa é como vc criar e utilizar seus serviços, outra coisa é quando.
Para isso vc pode continuar usando seu schedule do ejb que se seus sistemas tivessem serviços disponibilizados, vc poderia muito bem chamar o serviço a partir dele.
Quanto ao timeout, vc nem disse qual o erro, mas só podem ser 2, ou vc tem um schedule agendado em intervalos, onde esse intervalo não é suficiente para ele realizar a operação, aí vc tem um erro de retrying timeout, nesse caso vc pode aumentar o intervalo de repetição. Ou vc tem o timeout da transação, que o padrão é 300 segundos, nesse caso lhe resta aumentar esse tempo limite.
Olá Tvargas,
Quanto ao timeout é no JPA, quando tento recuperar uma lista de entidades do banco que são mais de 65.000 registros. Estou utilizando jboss com DataSource, depois do seu post pensei que pode ser alguma configuração de timeout no datasource, o que acha ?
Aí vem outra dúvida, se a questão for o timeout e solucionar, mesmo assim não seria ruim em questão de desempenho recuperar 65.000 registros, ja que pretendo agendar essa regra diariamente ? ou deveria carregar em lotes(não sei como faria isso com hibernate/JPA)? ou recuperar a lista somente do que realmente preciso, o que me PRENDERIA a esse filtro ?
Agradeço a explicação sobre ESB e SOA.
Já que está usando jboss, vc pode colocar a anotação
com o tempo que vc precisa no seu método,
se não tiver tem que ser direto no seu xml de configuração;
Pra esse tipo de coisa, de fato o Apache Camel resolveria bem seu problema. Ele possui integração com o Quartz, um conhecido framework de agendamentos em Java (documentação aqui). Se for avançado demais pro caso, também existe um componente mais simples chamado timer (documentação).
Poderia falar mais sobre sua integração? De fato, o Camel seria uma boa, mas seria mais interessante entender o cenário (se é possível utilizar web services, qual o volume de carga por horário do dia, etc.) para te dizer uma arquitetura legal para solução do problema, tudo bem?
[]'s
Olá Alexandre,
Coincidência, participei de sua palestra no TDC Florianópolis e também comprei seu livro, ótimo trabalho, parabéns.
Meu cenário é o seguinte: Tenho vários sistemas em diferentes linguagens e diferentes banco de dados. De imediato preciso usar ETL para manter entidades(tabelas) atualizadas entre 3 sistemas.
S01 - SISTEMA 01
S02 - SISTEMA 02
S03 - SISTEMA 03
Necessito que no evento do Manter(incluir, alterar, exlcuir) em uma ou mais entidades do S01 inIciasse (só pensei em agendamento , usando schedule com ejb)um processo de ETL para uma ou mais entidades do S02 que por sua vez precisa disponibilizar mais informações de entidades para o processo de ETL com o sitema S03, sendo que o S03 e um softwares licenciado e a integração só é feita por webservices.
Bem, tenho muitas dúvidas:
- Existe outra forma de capturar esses eventos e assim tratar realmente só o que for preciso, sem carregar como exemplo 65.000 registros para verificar qual entiidade teve alguma alteração e assim iniciar o processo ???
- Quando vi que envolvia webservices pensei em fazer algo que suportasse qualquer integração e não somente esse cenário atual, já que temos muitos sistemas em diferentes linguagens.
- Um cenário bem desenhado seria algo como ???
gerar arquivos xmls das entidades jogar numa pilha de mensagens(JMS) para comunicar com outros sistemas internos e também disponibilizar esses serviços via webservice ???
OBS: tenho muita dúvida de como iniciar todo o processo pois não sei como capturar esses eventos nos sistemas.
- Se fala em Complex Event Processing - CEP quando tenho dados já persistidos ???
Como já citei… vi algumas ferramentas como Talend ESB, MuleSoft e o Apache Camel(você o citou no TDC)
Poderia me dá um norte de como devo seguir e o que realmente usar ??
Obrigado.
Seu cenário me lembra bastante um bom caso de uso para o Camel, mesmo. Para fazer essa persistência, seu serviço poderia invocar o Camel; que faria a persistência e, em seguida, invocaria a integração via web services e quaisquer outros casos que apareçam.
Só alerto para o fato de que uma integração via banco de dados deve ser a sua última opção, já que é o pior cenário possível.
[]'s