Ibm mobilefirst Worklight Server中的后台工作

Ibm mobilefirst Worklight Server中的后台工作,ibm-mobilefirst,worklight-server,Ibm Mobilefirst,Worklight Server,试图找到一种在Worklight服务器中执行常规内部管理的方法。简化场景: 我们有一个适配器与后端系统通信。当用户使用Worklight进行身份验证时,他们会在每次服务调用时创建一些传递到后端的凭据。如果在一段时间内不使用,这些凭据可能会过时。因此,我们需要的是所有活动会话的“心跳”。我有一个singleton Java对象,当用户进行身份验证时,我在其中存储凭据,我想做的是使用某种后台工作线程来迭代凭据列表并向服务器发出心跳调用 我最终得到了这样的适配器方法 // in business

试图找到一种在Worklight服务器中执行常规内部管理的方法。简化场景:

我们有一个适配器与后端系统通信。当用户使用Worklight进行身份验证时,他们会在每次服务调用时创建一些传递到后端的凭据。如果在一段时间内不使用,这些凭据可能会过时。因此,我们需要的是所有活动会话的“心跳”。我有一个singleton Java对象,当用户进行身份验证时,我在其中存储凭据,我想做的是使用某种后台工作线程来迭代凭据列表并向服务器发出心跳调用

我最终得到了这样的适配器方法

  // 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
  }
问题是:我们如何触发心跳。我尝试过使用Java TimerTask,它几乎可以正常工作。我可以安排Java TimerTask调用我的心跳。问题是,在TimerTask下运行时,我们没有正常的Worklight Server环境,对WL.Server.invokeProcedure()的调用会引发异常,考虑到这一点,我似乎不太可能从外部线程访问正常的Worklight API

我们正在使用Worklight 6.1,部署在WebSphere Liberty服务器上。目前我能想到的最好办法是编写一些外部小型应用程序或shell脚本,定期调用heartbeat()方法


有更好的建议吗?

David,我不完全确定它是否直接解决了您的问题,因为我不确定您的目标是否只是心跳,或者您是否希望在接收心跳时在适配器层上做一些自定义工作(您能进一步说明基本目的吗?);但是您知道Worklight本身有一个内置的心跳概念吗?作为调用WL.Client.init()的一部分,可以使用heartBeatIntervalInSec值对其进行配置。有关更多信息,请参阅

我不确定heartbeating backend是否是一个好主意,而且这听起来像是一个可能的安全漏洞。您应该配置WL服务器和后端会话超时


至于实际问题的答案,您可以使用EventSource创建后台任务。请参见此处-

我们在这里讨论的是从WL服务器到后端的心跳。特定的用例是在客户端关闭时保持凭据的新鲜性,因此您提到的WL客户端心跳不会发生。谢谢您的回答。总的来说,我同意您的警告,在这种特殊情况下,心跳是安全体系结构的正式要求,是预先存在的、经过验证的和不可移动的。