Oracle BPM Human Task комментирует ошибки обратного вызова при создании экземпляра AppModule в вызываемом классе

Oracle BPM версии 11.1.1.7. В Humantask.task, вкладка Events, раздел Content Change Callbacks, я ввел полное имя класса, который реализует 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. Если кто-то столкнется с этим, проверьте трассировку стека на наличие других проблем.

ОБНОВЛЕНИЕ 2

Наконец-то получил это, чтобы записать комментарии к задаче в пользовательскую таблицу комментариев. Оказывается, невозможно использовать подход 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)

Кто-нибудь решил это? Полная трассировка стека по адресу:

https://community.oracle.com/thread/3638940


person 32U    schedule 05.12.2014    source источник


Ответы (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... 
person 32U    schedule 23.09.2015