Como executar um método agendado em um cluster para um nó e para todos?

Eu tenho um Glassfish 3.1.2 que é executado em um cluster e um aplicativo EJB 3.1. E eu preciso de dois tipos de methods agendados no meu aplicativo:

  • um tipo que é executado apenas uma vez (em um único nó) uma vez por dia
  • e outro tipo que é executado em todos os nós (a cada 1-2 minutos) – eles não precisam executar um caminho syncron! O requisito é apenas que esse tipo seja executado em todos os nós.

Eu não tenho idéia de como começar com este cluster – problema, isso é possível com @Schedule (e como) ou eu preciso de algo mais?

Eu enfrentei exatamente o mesmo problema (preciso de um timer de cluster e um timer per node ) e me deparei com essa questão. Então, para quem estiver interessado:

Se você declarar o timer com @Schedule (…, persistent = true), você receberá um timer de cluster armazenado no database do timer (que pode ser migrado)

Se você declarar o timer com @Schedule (…, persistent = false), você receberá um timer de node não armazenado no database do timer (que não pode ser migrado)

Você poderia olhar para usar o JMS. Para o método que precisa ser executado em um único nó, use uma fila e, para aqueles que precisam ser executados em todos os nós, use um tópico.

    Intereting Posts