В JSR352 1,0 Final §9.3 Batch Properties свойства партии определяется как тип java.lang.String
:JSR 352 Как сохранить объект (java.lang.Object) в качестве свойства job?
Пакетные приложения нужен способ, чтобы получить параметры, когда задание инициируется для исполнения. Свойства могут быть определены с помощью артефактов модели пакетного программирования, а затем значения передаются им при запуске задания. Свойства партии - это строковые значения.
И вот пример:
Properties jobProps = new Properties();
jobProps.setProperty("props1", "value1");
jobProps.setProperty("props2", "value2");
// start
jobOperator.start("myjob", jobProps);
Однако, мне нужно использовать другие объекты для работы. Это общее «свойство» может быть любым типом объекта, поэтому java.lang.Object
. Поэтому я ищу для работы вокруг решения, которое удовлетворяет следующим условиям:
- Свойство хранится должно быть неизменным, это означает, что когда-то передается в пакетном режиме исполнения, он не будет изменен снова.
- Свойство должно сохраняться при прекращении работы и может быть повторно использовано при перезапуске задания. (Serializable?)
- Решение для рабочего процесса не должно зависеть от какой-либо реализации, например. JBeret от JBoss. Потому что я разрабатываю фреймворк, который позволяет пользователю выбирать собственную реализацию JSR 352.
Может ли кто-нибудь помочь?
Единственный способ получить пакетный контейнер, чтобы сохранить что-либо для вас, - это использовать контрольную точку для чтения/записи фрагментов или постоянные пользовательские данные шага. Вы можете перенести что-то на начальном этапе, но это, вероятно, работает только в том случае, если пользователи вашей инфраструктуры не должны выполнять свою собственную полную работу (JSL). Если вы находитесь в среде EE, возможно, вам следует использовать CDI для совместного использования объектов между подающим артефактом и самими артефактами партии. Было бы интересно увидеть, где вы закончите ... –
Спасибо @ScottKurz. Что делает второе предложение? Вы можете что-то перенести ... свою собственную работу (JSL). Вы имеете в виду, что работа (JSL) должна определяться самой картой и не должна быть перезаписана пользователями? Я работаю в команде Hibernate Search в качестве стажера. Наше пакетное задание определяется только Hibernate Search, а не пользователями, поэтому все в порядке. Работа должна работать как на Java EE, так и на Java SE, поэтому, если CDI можно избежать, было бы лучше. Я думаю об использовании класса утилит или фабричного класса. –