gpt4 book ai didi

java - worklight 多线程/servlet上下文调用适配器

转载 作者:太空宇宙 更新时间:2023-11-04 14:49:14 28 4
gpt4 key购买 nike

我在工作灯和多线程方面遇到了一些问题。

我们有一个批量导入程序,需要每天运行一次。
到目前为止我们做了什么

  • 导入器是一个 servletContextListener
  • 使用 Quartz 将导入程序作为 cronjob 运行

除了调用 HTTP 适配器之外,代码中的所有内容都工作正常。每次调用适配器时,都会返回错误消息“BaseProjectLocal is null”。如果代码由另一个工作灯适配器启动,则该代码可以正常工作。

似乎存在错误,因为他不知道如何访问适配器(我假设)

java.lang.RuntimeException: BaseProjectLocal is null
at com.worklight.common.util.BaseProjectLocal.get(BaseProjectLocal.java:41)
at com.worklight.server.util.ProjectLocal.get(ProjectLocal.java:55)
at com.worklight.server.util.ProjectLocal.getWorklightBundlesS(ProjectLocal.java:113)
at com.worklight.server.bundle.api.WorklightBundles.getInstance(WorklightBundles.java:28)
at com.ibm.nl.wwdw.server.util.AdapterCaller.doCall(AdapterCaller.java:25)
at com.ibm.nl.wwdw.server.connections.CommunityCollector.getMembersFromCommunity(CommunityCollector.java:50)
at com.ibm.nl.wwdw.server.importer.ConnectionsImporter.StartImport(ConnectionsImporter.java:53)
at com.ibm.nl.wwdw.server.importer.MyJob.execute(MyJob.java:17)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)

2014 年 6 月 2 日 17:38:56 com.ibm.nl.wwdw.server.importer.ConnectionsImporter StartImport严重:BaseProjectLocal 为空

调用适配器的Java代码

public static JSONObject doCall(String adapter, String path, String paramArray) {
Logging.logger.warning(adapter+"/"+path+"?"+paramArray);
DataAccessService service = WorklightBundles.getInstance().getDataAccessService();//This line gives the error report
ProcedureQName procedureQName = new ProcedureQName(adapter, path);
InvocationResult result = service.invokeProcedure(procedureQName, paramArray);
Logging.logger.warning(result.toJSON().toString());
return result.toJSON();
}

}

最佳答案

问题可能是线程没有身份验证上下文。虽然可以手动创建身份验证上下文,但完成起来很棘手,因为它需要使用内部 API(这意味着它是不支持的路径,...)。

类似这样的事情:

authService = (AuthenticationServiceBean);
getBeanFactory().getBean(AuthenticationService.BEAN_ID);
authContext = authService.createAuthenticationContext(realm, username, password);
AuthenticationContext.setThreadContext(authContext);

建议在 Worklight 外部运行导入程序,并远程调用适配器(通过 HTTP)。

但请注意,适配器不应受到其他领域的保护。

关于java - worklight 多线程/servlet上下文调用适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23998472/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com