繁体   English   中英

实例化被调用类中的AppModule时,Oracle BPM人工任务注释回调错误

[英]Oracle BPM Human Task Comments Callback Errors When Instantiating AppModule in Called Class

Oracle BPM版本11.1.1.7。 在Humantask.task的“事件”选项卡的“内容更改回调”部分中,我输入了实现NotesStore以及addNote和getNotes方法的类的完全限定类名。

该类在AppModule中使用公共方法来使用我们的自定义表编写和读取注释,并且在开发过程中使用BC测试器和回调类中的临时main对这些方法进行了良好的测试。

将项目编译到jar中,并将其放置在BPM项目的SCA-INF / lib文件夹中,然后部署SCA和相关的ADF人工任务表格。

在流程实例期间在开箱即用的人工任务注释部分中进行注释时,将调用该类,但在创建AppModule的行的getNotes方法中会发生异常:

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上下文。 通过重写该类以直接在代码中访问DB,注释回调类确实写入了表。 但是,我收到了与此帖子相同的错误。 即:

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

与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... 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM