Oracle ADF 意外的空指针异常 在单独的线程中访问视图对象时



我在 adf 中有一个处理请求的 Web 服务,我使用 jar 中通过视图对象迭代器运行的方法等等。

在处理请求时,我从所述jar调用一个方法,该方法初始化一个单独的线程,该线程操作和比较该单独线程中视图对象的行,

我收到如下随机异常:

## Detail 0 ##

java.lang.NullPointerException at oracle.jbo.server.ViewRowSetIteratorImpl.initViewRowSetIteratorImpl(ViewRowSetIteratorImpl.java:227) at oracle.jbo.server.ViewRowSetIteratorImpl.(ViewRowSetIteratorImpl.java:176) at oracle.jbo.server.ViewRowSetImpl.createNewRowSetIterator(ViewRowSetImpl.java:1434) at oracle.jbo.server.ViewRowSetImpl.createViewRowSetIterator(ViewRowSetImpl.java:1485) at oracle.jbo.server.ViewRowSetImpl.getDefaultRowSetIterator(ViewRowSetImpl.java:1704) at oracle.jbo.server.ViewRowSetImpl.setRangeSize(ViewRowSetImpl.java:2936) at oracle.jbo.server.ViewObjectImpl.doCreateViewLinkAccessorRS(ViewObjectImpl.java:16080) at oracle.jbo.server.ViewObjectImpl.createViewLinkAccessorRS(ViewObjectImpl.java:16171) at oracle.jbo.server.AssociationDefImpl.get(AssociationDefImpl.java:472) at oracle.jbo.server.ViewAttributeDefImpl.get(ViewAttributeDefImpl.java:949) at oracle.jbo.server.ViewRowStorage.getViewLinkAccessorResult(ViewRowStorage.java:1528) at oracle.jbo.server.ViewRowStorage.getAttributeInternal(ViewRowStorage.java:1827) at oracle.jbo.server.ViewRowImpl.getAttributeValue(ViewRowImpl.java:1923) at oracle.jbo.server.ViewRowImpl.getAttributeInternal(ViewRowImpl.java:866)

## Detail 0 ##

java.lang.NullPointerException at oracle.jbo.server.ViewRowImpl.getUseViewLogicGroupDef(ViewRowImpl.java:6078) at oracle.jbo.server.ViewRowStorage.getViewAttributeDef(ViewRowStorage.java:1432) at oracle.jbo.server.ViewRowStorage.getAttributeInternal(ViewRowStorage.java:1778) at oracle.jbo.server.ViewRowImpl.getAttributeValue(ViewRowImpl.java:1923) at oracle.jbo.server.ViewRowImpl.getAttributeInternal(ViewRowImpl.java:866)

原因:java.lang.NullPointerException at oracle.jbo.server.ViewRowSetIteratorImpl.initViewRowSetIteratorImpl(ViewRowSetIteratorImpl.java:227) at oracle.jbo.server.ViewRowSetIteratorImpl.(ViewRowSetIteratorImpl.java:176) at oracle.jbo.server.ViewRowSetImpl.createNewRowSetIterator(ViewRowSetImpl.java:1434) at oracle.jbo.server.ViewRowSetImpl.createViewRowSetIterator(ViewRowSetImpl.java:1485) at oracle.jbo.server.ViewRowSetImpl.getDefaultRowSetIterator(ViewRowSetImpl.java:1704) at oracle.jbo.server.ViewRowSetImpl.setRangeSize(ViewRowSetImpl.java:2936) at oracle.jbo.server.ViewObjectImpl.doCreateViewLinkAccessorRS(ViewObjectImpl.java:16080) at oracle.jbo.server.ViewObjectImpl.createViewLinkAccessorRS(ViewObjectImpl.java:16171) at oracle.jbo.server.AssociationDefImpl.get(AssociationDefImpl.java:472) at oracle.jbo.server.ViewAttributeDefImpl.get(ViewAttributeDefImpl.java:949) at oracle.jbo.server.ViewRowStorage.getViewLinkAccessorResult(ViewRowStorage.java:1528) at oracle.jbo.server.ViewRowStorage.getAttributeInternal(ViewRowStorage.java:1827) at oracle.jbo.server.ViewRowImpl.getAttributeValue(ViewRowImpl.java:1923) at oracle.jbo.server.ViewRowImpl.getAttributeInternal(ViewRowImpl.java:866)

当它在没有jar的情况下运行时相同的方法(与jar中的代码相同,但作为同一项目的一部分),它执行得很好。

你能告诉我为什么会引发NullPointerException吗? 谢谢

您不能使用业务组件(视图对象,实体...等)在线程内。

没有上下文(无法初始化FacesContext)。因此,您必须将应用程序模块作为参数传递给您的方法。但是处理需要很多时间

因此,访问数据的最佳方法是将 CallableStatments PreparedStatments 与 Java Data Source 连接一起使用。

最新更新