Pergunta

Tentando encontrar uma abordagem para realizar algumas tarefas domésticas regulares em um Worklight Server.Cenário simplificado:

Temos um adaptador conversando com um sistema back-end.Quando o usuário se autentica com o Worklight, ele cria algumas credenciais que são transmitidas ao backend em cada chamada de serviço.Essas credenciais podem ficar obsoletas se não forem usadas por um período de tempo.Portanto, o que queremos é uma “pulsação” para todas as sessões ativas.Eu tenho um objeto Java singleton no qual escondo as credenciais quando o usuário se autentica. O que eu quero fazer é ter algum tipo de thread de trabalho em segundo plano para iterar a lista de credenciais e fazer uma chamada de pulsação para o servidor.

Acabo com métodos adaptadores como este

  // in business service adapter

  businessMethod(){
       make service call using credentials from user's Worklight session
  }


  // in authentication adapter, normal adapter authentication methods and a heartbeat

  authentication(){
        get back-end credentials
        store credentials in user's session
        stash credentials in singleton
  }

  // how do we cal this heartbeat every x min
  heartbeat(){
        for each credential in singleton stash
            make heartbeat call to server keeping credential alive
  }

A questão é:como acionamos esse batimento cardíaco.Tentei usar um Java TimerTask, que quase funciona.Posso providenciar para que o Java TimerTask chame meu batimento cardíaco.O problema é que, ao executar no TimerTask, não temos um ambiente normal do Worklight Server, as chamadas para WL.Server.invokeProcedure() lançam exceções e, pensando nisso, parece improvável que eu teria acesso às APIs normais do Worklight de efetivamente um segmento estranho.

Estamos usando o Worklight 6.1, implementando em um servidor WebSphere Liberty.No momento, o melhor que consigo pensar é escrever algum miniaplicativo externo ou script de shell que chame periodicamente o método heartbeat().

Alguma sugestão melhor?

Foi útil?

Solução

Não tenho certeza se um back-end acelerado é uma boa ideia; além disso, isso parece uma possível falha de segurança.Você deve configurar o servidor WL e os tempos limite da sessão de back-end.

Quanto à resposta à pergunta real - você pode usar o EventSource para criar tarefas em segundo plano.Veja aqui - https://www.ibm.com/developerworks/community/blogs/worklight/entry/configurando_a_polling_event_source_to_send_push_notifications?lang=en

Outras dicas

David, não tenho certeza se isso aborda sua pergunta diretamente, pois não tenho certeza se você está visando apenas uma pulsação ou se deseja fazer algum trabalho personalizado na camada do adaptador quando a pulsação for recebida ( você pode esclarecer um pouco mais sobre o propósito subjacente?);mas você está ciente de que o próprio Worklight possui um conceito de pulsação integrado?Você o configura com o valor heartBeatIntervalInSec como parte da chamada para WL.Cliente.init().Ver a documentação para mais informações.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top