Duvida integração de sistemas

Pessoal tenho dois programas de cadastros de clientes e vou realizar a integração entre os dois, de maneira que ao fazer o cadastro no Programa A ou alterar, o cadastro seja replicado para o Programa B, de forma automática.

Estou programando em java.

A e B tem bases diferentes.
O Programa A possui uma base de dados em Access.
O Programa B possui uma base de dados em Oracle.

Nenhum dos dois programas são meus.

O fornecedor do programa A se disponibiliza a gerar um arquivo no layout que eu determinar(XML, TXT…), arquivo que pode conter um ou mais cadastros.

O fornecedor do Programa B, me disponibiliza duas tabelas, uma de inserção de dados e outra de erros.

A de inserção possui 194 campos, que contem Endereços, Informações bancárias, Informações básicas, etc. Mas ainda sim uma única tabela.
Após a inserção nessa primeira tabela é executada uma procedure, que valida os dados e se tiver tudo correto faz a inserção nas respectivas tabelas do Programa B.

Caso haja algum erro na validação dos dados, é gerado um código de erro que inserido na tabela de erros.

Eu queria criar inicialmente um webservice, para o fornecedor do Programa A, enviar os dados, mas ele diz que não trabalha com este tipo de tecnologia.

Então atualmente planejo seguir a seguinte abordagem:

  • Estabelecer um modelo de xml que conterá um único cadastro, com o titulo do XML sendo o CPF do cliente, para repassar para o fornecedor A.

  • O fornecedor do Programa A deve salvar os arquivos gerados em uma pasta, que chamaremos aqui de input, definida por mim em um servidor.

  • Meu programa a cada x minutos irá varrer esta pasta, e se tiver um arquivo novo ele irá desserializa-lo.

  • Como são poucas tabelas, não penso em utilizar nenhum framework de persistência de dados como o hibernate, então pretendo fazer o insert e a execução da procedure via JDBC direto.

  • Ainda via JDBC pretendo recuperar eventuais erros da tabela de erros.

  • Existem 144 códigos de erro, ao qual possuo um maravilhoso PDF com suas descrições, a tabela de erros possuirá apenas os códigos, pretendo cadastra-los em uma pequena base de dados, penso em usar o JavaDB, mas aceito sugestões.

  • Meu programa deve gerar um arquivo de saida com os erros, ou informando sucesso em uma pasta que chamaremos output, com o título sendo também o CPF do cliente.

Agora as minhas dúvidas:

Existe alguma maneira de tornar isso “real time” ao invés de esperar X minutos, para varrer a pasta Input?

Existe alguma maneira de otimizar essa rotina?

Comentário pessoal: Fiquei meio perdido ao não poder criar um webservice, pois na minha concepção seria a maneira mais otimizada de realizar o processo(posso ter falado abobrinha agora), então minha atual abordagem pode ser um tanto quanto grosseira no ponto de vista de alguns, mas peguem leve nas críticas rsrsr

Não vejo nenhum grande problema com a sua abordagem. Já vi sistemas com integrações muito maiores sendo feitas de maneira similar, usando arquivos texto (nem xml nem json). Só faria uns testes usando json ao invés de xml, mas mais para ver se a geração fica mais simples (xml tem mais regras de sintaxe, json é um pouco mais tranquilo nesse aspecto) do que por necessidade.

Quanto a “realtime”, há realmente a necessidade disso? Alguns minutos de espera parecem ser o suficiente para o cenário. Adeque pelo volume de dados. Se são poucos clientes por dia, algo de 10 em 10 minutos não deve ser problema, mas se forem milhares por hora, talvez algo agendado por dia, rodando de noite (quando não há uso) seja mais interessante.

Só o tratamento de erros que talvez mereça uma atenção maior. 144 verificações, mesmo que simples, são um bocado de coisas. Tente minimizar os erros da inserção, rejeitando os arquivos com erros mais comuns e evitando inserir esses registros na base B para capturar os erros depois. Assim, você coloca alguma pressão no lado A para que envie arquivos o mais corretos possíveis.

Um webservice seria interessante, mas me parece que você está focado demais na tecnologia (talvez por estar empolgado com ela). Foque mais em resolver o problema. E isso nem sempre envolve usar a “técnica perfeita dos nossos sonhos” ™ . :grin:

Abraço.