Я уже развернул приложение OSGi maven со многими пакетами OSGi под Glassfish 4.1.2. Эти пакеты активируются с помощью веб-приложения, которое выполняет некоторые вызовы с определенными в нем заданиями. Все это на самом деле работает ожидаемым образом.
Веб-приложение выполняет задания, а задания вызывают пакеты OSGi. Проблема возникает, когда я пытаюсь получить статус пакета извне.
Цель состоит в том, чтобы развернуть другое веб-приложение с помощью веб-сервисов REST, поэтому я могу запросить статус пакета по запросу. Когда я бегу:
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: Текущий пользователь не авторизован для выполнения этой операции.
Я уже пытался развернуть веб-сервисы в том же веб-приложении, которое запускает пакеты, просто для проверки поведения, и после отправки пакетов я продолжаю получать одно и то же исключение.
Странно то, что когда я запускаю пакет из контроллера веб-приложения, он запускается, и я могу получить статус пакета, как шарм:
@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 Spec, Javadoc или Java EE я ничего не могу найти о безопасности в пакетном режиме.
Возможно ли это сделать? Речь идет о Glassfish JSR352? Как я могу этого добиться?
Спасибо за ваше время.
ИЗМЕНИТЬ
После настройки большинства журналов на FINE, как было предложено @Scott Kurz, я вижу эти новые строки:
[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] [ИМЯ КЛАССА: org.apache.catalina.authenticator.AuthenticatorBase] [ИМЯ МЕТОДА: invoke] [[ Запрос на проверку безопасности GET /ws/webresources/facturacion/getJobs]] [ 2017-12-05T13:10:45.101-0500] [glassfish 4.1] [FINE] [] [javax.enterprise.web.core] [tid: _ThreadID=64 _ThreadName=http-listener-1(4)] [timeMillis: 1512497445101] [levelValue: 500] [ИМЯ КЛАССА: org.apache.catalina.authenticator.AuthenticatorBase] [ИМЯ МЕТОДА: 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] [ИМЯ КЛАССА: org.apache.naming.resources.FileDirContext] [ИМЯ МЕТОДА: файл] [[ Файл не может быть прочитан /home/felipe /Documents/Programas/glassfish4/glassfish/domains/domain1/applications/ws/WEB-INF/classes/META-INF/services/javax.batch.operations.JobOperator]]
Я пробовал запускать стеклянную рыбу как sudo на локальном хосте, но получаю то же поведение и точно такую же ошибку.
com.ibm.jbatch.*
, вы можете получить немного больше информации о том, что происходит (например, возможно, по какой-то причине Glassfish не связывает ваш веб-сервис с приложением, в котором по какой-то причине выполнялись пакетные задания, хотя вы считаете, что так и должно быть). - person Scott Kurz   schedule 05.12.2017