如何从 MFP 8.0 中的 java 适配器异步调用 javascript 适配器?
Posted
技术标签:
【中文标题】如何从 MFP 8.0 中的 java 适配器异步调用 javascript 适配器?【英文标题】:How to call javascript adapters from java adapters in MFP 8.0 asynchronously? 【发布时间】:2019-01-21 21:30:37 【问题描述】:这里我尝试从 java 适配器异步调用多个 js 适配器,但无法获取响应对象。谁能帮我解决这个问题。我使用 Java 的 Callable 和 Future 进行了尝试。
public JSONArray getResourceDataAsync() throws IOException, InterruptedException, ExecutionException
HttpUriRequest request = adaptersAPI.createjavascriptAdapterRequest(randNumberAdapter, "getEmpDetails");
addJsAdapterRequest(request);
request = adaptersAPI.createJavascriptAdapterRequest(randTextAdapter, "getJson");
addJsAdapterRequest(request);
new Thread(new Runnable()
public void run()
System.out.println("Inside Thread Run method");
HttpUriRequest req = adaptersAPI.createJavascriptAdapterRequest(randNumberAdapter, "getEmpDetails");
HttpResponse res=null;
try
res = adaptersAPI.executeAdapterRequest(req);
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
JSONObject object=null;
try
object = adaptersAPI.getResponseAsJSON(res);
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("The response from Thread Implementation is -->" + object);
).start();
【问题讨论】:
你看到这个链接mobilefirstplatform.ibmcloud.com/tutorials/it/foundation/8.0/…了吗? 示例演示github.com/MobileFirst-Platform-Developer-Center/AdaptersMashup @manjunathkallannavar 是的。我已经阅读了所有这些文档并实现了上述场景。对于从 java 适配器进行的同步调用,它可以工作,但在通过线程传递请求的情况下,它会失败。这就是为什么要询问异步实现以及是否可以使用 mfp apis。 【参考方案1】:适配器混搭调用 - 一个适配器调用另一个部署的适配器,只能同步完成。不支持异步调用。您所观察到的是预期的。
正确的方法是使用如下代码:
HttpUriRequest req = adaptersAPI.createJavascriptAdapterRequest(AdapterName, ProcedureName, [parameters]);
org.apache.http.HttpResponse response = adaptersAPI.executeAdapterRequest(req);
JSONObject jsonObj = adaptersAPI.getResponseAsJSON(response);
详情是here。
【讨论】:
是否可以使用 HttpClient 来做到这一点,我们直接从 java 适配器命中其余端点而不使用上述方法。我们可以通过这种方式进行异步调用吗?实际上将它与 spring 集成。 是可以做到的。但是为什么要做这一切呢?如果您调用的适配器端点受到保护(如果不是自定义的,则始终存在默认保护),您将收到质询作为响应。在您的调用适配器中,您无法处理它 - 因为适配器希望获得 OAuth 令牌。或者,您可以明确关闭第二个端点的 OAuth 安全性。 在我的项目中,有许多后端 apis 是使用 MFP.Server.invokeHttp() 方法从 js 适配器同步调用的,这需要花费大量时间来执行,以使其有点快。从 java 适配器调用 javascript 适配器并使 js 适配器调用异步,以便所有后端服务可以在多个线程上运行,完成后每个都可以返回响应,然后我可以将响应组合成一个 json 数组,可以是返回到客户端应用程序。所以如果你有建议怎么做,请帮忙。 如果您的 JS 适配器过程被明确标记为不受保护,您可以这样做。使用这里提到的方法:mobilefirstplatform.ibmcloud.com/blog/2018/11/29/…以上是关于如何从 MFP 8.0 中的 java 适配器异步调用 javascript 适配器?的主要内容,如果未能解决你的问题,请参考以下文章
推送通知 - 适配器 - MFP 从 6.3 迁移到 8.0
来自应用程序的 MobileFirst 8.0 调用适配器正在连接到 localhost:6015/mfp