我已经在 Glassfish 4.1.2 下部署了一个带有许多 OSGi 包的 OSGi maven 应用程序。这个包是用一个 web 应用程序激活的,该应用程序使用定义在其上的作业进行一些调用。所有这些实际上都在按预期的方式工作。
Web 应用程序执行作业,作业调用 OSGi 包。当我尝试从外部获取批次状态时,问题就出现了。
目的是使用 REST webservices 部署其他 web 应用程序,以便我可以按需查询批处理状态。当我运行时:
private JobExecution getJob(int id) {
JobOperator jobOperator = BatchRuntime.getJobOperator();
JobExecution job = null;
try {
job = jobOperator.getJobExecution(id);
System.out.println("job: " + job);
System.out.println("name: " + job.getJobName());
System.out.println("batchStatus: " + job.getBatchStatus());
} catch (Exception e) {
e.printStackTrace();
}
return job;
}
我得到这个例外:
javax.batch.operations.JobSecurityException:当前用户无权执行此操作
我已经尝试在运行批次的同一 Web 应用程序中部署 Web 服务,只是为了测试行为,并且在发送批次后,我不断收到相同的异常。
奇怪的是,当我从 webapp 控制器运行批处理时,它会运行,并且我可以像魅力一样获得批处理状态:
@ViewScoped
@ManagedBean(name = "controller")
public class Controller implements Serializable {
public void executeJobController() {
JobOperator jobOperator = BatchRuntime.getJobOperator();
Long executionIdDummy = jobOperator.start("DummyJob", new Properties());
JobExecution jobExecutionDummy = jobOperator.getJobExecution(executionIdDummy);
System.out.println("BatchDummyStatus : " + jobExecutionDummy.getBatchStatus());
}
}
我在 JSR352 规范、Javadoc 或 Java EE 教程中找不到关于批处理安全性的任何内容。
有可能做到这一点吗?是关于 Glassfish JSR352 的吗?我怎样才能做到这一点?
感谢您的时间。
编辑
按照@Scott Kurz 的建议将大部分日志设置为 FINE 后,我可以看到这些新行:
[2017-12-05T13:10:45.100-0500] [glassfish 4.1] [FINE] [] [javax.enterprise.web.core] [tid: _ThreadID=64 _ThreadName=http-listener-1(4)] [timeMillis : 1512497445100] [levelValue: 500] [CLASSNAME: org.apache.catalina.authenticator.AuthenticatorBase] [METHODNAME: invoke] [[安全检查请求 GET /ws/webresources/facturacion/getJobs ]] [ 2017-131000 ] :45.101-0500] [glassfish 4.1] [FINE] [] [javax.enterprise.web.core] [tid: _ThreadID=64 _ThreadName=http-listener-1(4)] [timeMillis: 1512497445101] [levelValue: 500] [CLASSNAME: org.apache.catalina.authenticator.AuthenticatorBase] [METHODNAME: invoke] [[不受任何约束]]
这意味着一些奇怪的事情:
[2017-12-05T13:10:45.104-0500] [glassfish 4.1] [FINE] [AS-WEB-NAMING-00005] [javax.enterprise.web.naming] [tid: _ThreadID=64 _ThreadName=http-listener- 1(4)] [timeMillis: 1512497445104] [levelValue: 500] [CLASSNAME: org.apache.naming.resources.FileDirContext] [METHODNAME: file] [[文件无法读取/home/felipe/Documents/Programas/glassfish4/ glassfish/domains/domain1/applications/ws/WEB-INF/classes/META-INF/services/javax.batch.operations.JobOperator]]
我已经尝试在本地主机中以 sudo 的身份运行 glassfish,但我得到了相同的行为,并且得到了完全相同的错误。
当我在 OSGi 环境中工作时,首先重新部署(手动取消部署并一个一个部署)所有 OSGi 包,最后,重新部署(取消部署和部署)Web 服务所在的 Web 应用程序,然后,它开始工作。
在进行一些重新部署后,似乎无法以某种方式识别 OSGi 依赖项,从而导致安全问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句