Oracle BPM Human Комментарий комментирует ошибки обратного вызова при создании AppModule в вызываемом классе
Oracle BPM Версия 11.1.1.7. В Humantask.task, вкладка Events, раздел Callbacks Change Content, я ввел полное имя класса, который реализует NotesStore и методы addNote и getNotes.
Класс использует открытые методы в модуле AppModule для написания и чтения комментариев с использованием нашей пользовательской таблицы, и эти методы были хорошо протестированы во время разработки с использованием тестера BC и временной основной функции в классе обратного вызова.
Проект скомпилирован в jar-файл и помещен в папку SCA-INF/lib проекта BPM, после чего развернуты формы SCA и связанные с ними задачи ADF.
Когда во время экземпляра процесса делается комментарий в секции комментариев для неавтоматизированных задач, вызывается класс, но в методе getNotes возникает исключение в строке, в которой создается AppModule:
java.lang.ClassCastException: oracle.jbo.common.ampool.PoolMgr
В классе AppModule создается так:
AuditModule service = (AuditModule)Configuration.createRootApplicationModule("com.co.modules.AuditModule", "AuditModuleLocal");
Я попытался добавить файл конфигурации web.xml в проект SCA BPM с фильтром, как обсуждалось в этом посте (последний ответ). Это обсуждает запуск инициализации контекста ADF, но я все еще получаю ошибку.
Вопрос в том, как я могу использовать обратный вызов из человеческой задачи для вызова метода, который использует публичные методы AppModule для работы БД? Документация Oracle в этой области очень скудна (29.11.1).
ОБНОВИТЬ
Оказывается, что трассировка стека показывает, что он испытывает проблемы с поиском имени источника данных и на самом деле выдает ошибку JBO. Если кто-то сталкивается с этим, проверьте трассировку стека для других проблем.
UPDATE2
Наконец получил это, чтобы написать комментарии к задаче в таблице пользовательских комментариев. Оказывается, не представляется возможным использовать подход AppModule/Model в классе обратного вызова комментариев, поскольку при вызове класса не представляется возможным инициировать необходимый контекст ADF. Переписав класс для доступа к БД непосредственно в коде, класс обратного вызова комментария действительно записывает таблицу. Но я получаю ту же ошибку, что и этот пост. А именно:
Exception invoking method from XML data control. Cause:oracle.bpel.services.workflow.client.WorkflowServiceClientException: java.rmi.UnmarshalException: cannot unmarshaling return; nested exception is:
Supplemental Detail java.io.IOException: Error: Unexpected type encountered in writeExternal oracle.bpel.services.workflow.client.WorkflowServiceClientException: java.rmi.UnmarshalException: cannot unmarshaling return; nested exception is:
java.io.IOException: Error: Unexpected type encountered in writeExternal
Я подозреваю, что это проблема платформы Oracle, поскольку типы, которые передаются обратно, взяты из реализации NotesStore, которые все передаются обратно в среду:
public class CommentsCallback implements NotesStore, Serializable...
public List<CommentType> getNotes(Task task)
Кто-нибудь решил это? Полная трассировка стека в:
1 ответ
После обсуждения с Oracle ключом к предотвращению непредвиденной ошибки типа является использование ObjectFactory для заполнения объекта CommentType. Хотя в конечном итоге мы выбрали другой подход, приведенный ниже код был предоставлен Oracle в качестве примера и может помочь кому-то, пытающемуся сделать это:
import oracle.bpel.services.workflow.task.model.ObjectFactory;
import oracle.bpel.services.workflow.task.model.CommentType;
import oracle.bpel.services.workflow.task.model.IdentityType;
...
ObjectFactory factory = new ObjectFactory()
CommentType commentType = factory.createCommentType();
IdentityType updatedBy = factory.createIdentityType();
updatedBy.setId("some user");
updatedBy.setType(IWorkflowConstants.IDENTITY_TYPE_USER);
updatedBy.setDisplayName("some user display name");
commentType.setUpdatedBy(updatedBy);
commentType.setComment("some comment");
...set the rest of the comment fields as necessary...