Orquestramento de serviços/processos

Buenas,
Estou já ensaiando uma aplicação que integre o ‘ecossistema’ de aplicações daqui do trampo.
Por exemplo, crio um usuário no sistema A, e algum serviço fica responsável por cadastras ou informar este cadastro para os sistemas B e C. Altero a informação do usuário no sistema C e um serviço informa esta alteração para A e B. Porém estou desenvolvendo um componente para isso, e tendendo a utilizar SOA para tal. Estou devendo uma estudada maior em BPEL, JBI e ESB.
Mas gostaria da opinião de vocês. O que têm usado para tal?

Dê uma estudada em ferramentas compatíveis com o protocolo LDAP. Dentro delas devem ser armazenados os dados sobre seus usuários. Hoje, os principais Application Servers e ESBs já integram facilmente com elas.

André Fernando Salvati

Isso eu já fiz, uma biblioteca que serve de interface com uma base LDAP. Mas não é exatamente a isto que me refiro. Falo dos processos da empresa mesmo, por exemplo um determinado processo que deve repercutir em sistemas diferentes. E o que eu queria, era orquestrar/coordenar o processo para que não ficasse chumbado no código, por exemplo:

Processo de demitir um funcionário:
Executado primeiramente no sistema A > Muda status do usuário no sistema B > Bloqueia usuário no sistema C > Apaga referências no sistema D…e assim por diante.

Isso eu já fiz, uma biblioteca que serve de interface com uma base LDAP. Mas não é exatamente a isto que me refiro. Falo dos processos da empresa mesmo, por exemplo um determinado processo que deve repercutir em sistemas diferentes. E o que eu queria, era orquestrar/coordenar o processo para que não ficasse chumbado no código, por exemplo:

Processo de demitir um funcionário:
Executado primeiramente no sistema A > Muda status do usuário no sistema B > Bloqueia usuário no sistema C > Apaga referências no sistema D…e assim por diante. [/quote]

Ok, vc quer orquestrar processos. Os grandes fabricantes como Oracle, BEA e IBM possuem ferramentas para isso. A da IBM é o Websphere Business Modeler.

André Fernando Salvati

Hummm… Eu fiquei curioso com uma coisa. Como vc(s) trata() transacao distribuida nesse contexto de servico? Acho isso tao fraquinho hj em dia… Jah vi umas alternativas sobre fazer um outro servico para desfazer as coisas do primeiro mas ai eu fico pensando e se esse falhar tb?
Alguem ai que tem mais experiencia no assunto pode me esclarecer?

[quote=duardor]Hummm… Eu fiquei curioso com uma coisa. Como vc(s) trata() transacao distribuida nesse contexto de servico? Acho isso tao fraquinho hj em dia… Jah vi umas alternativas sobre fazer um outro servico para desfazer as coisas do primeiro mas ai eu fico pensando e se esse falhar tb?
Alguem ai que tem mais experiencia no assunto pode me esclarecer?

[/quote]

É, esse foi um dos primeiros problemas quando comecei a implementar esse ‘orquestramento’ na mão. Sendo que a base do Active Directory não é transacional, logo, uma vez inserida a informação não há como retroceder, só removendo.
Mas como as operações não são dependentes entre si e nem devem na verdade, e cada uma tem sua base de informação(e também espaço de armazenamento não é um problema), o que eu fiz foi gravar um log das inconsistências:
Processo x:
A ok(registra o log)
B ok(registra o log)
C erro(registra o log e envia e-mail para o analista responsável)
D ok(registra o log)

Bem, não achei essa solução muito ‘sadia’ e louvável, mas foi o que consegui fazer na época.

[quote=duardor]Hummm… Eu fiquei curioso com uma coisa. Como vc(s) trata() transacao distribuida nesse contexto de servico? Acho isso tao fraquinho hj em dia… Jah vi umas alternativas sobre fazer um outro servico para desfazer as coisas do primeiro mas ai eu fico pensando e se esse falhar tb?
Alguem ai que tem mais experiencia no assunto pode me esclarecer?

[/quote]

Isso é o que se chama de “transações compensatórias”. No entanto, com um ESB na jogada tb é possível utilizar os bons-e-velhos commits e rollbacks.

André Fernando Salvati