I had to create UI forms for borrowers where their count is variable. The user enters a number in a field and the UI forms are displaying on the screen. Each form is a representation of a View Object which is made with a custom query on the table dual. I have used af:iterator to realize this functionality. Everything looked fine until I got this exception:
<oracle.dfw.impl.incident.DiagnosticsDataExtractorImpl> <DiagnosticsDataExtractorImpl> <createADRIncident> <incident 44 created with problem key "ADFC00032 [ADFc]"> <oracle.adf.view> <RichExceptionHandler> <_logUnhandledException> <ADF_FACES60098:Faces lifecycle receives unhandled exceptions in phase INVOKE_APPLICATION 5> oracle.jbo.InvalidOperException: JBO34014: No matching child node found for row with key:oracle.jbo.Key[null ] under parent node:root at oracle.jbo.uicli.binding.JUCtrlHierBinding.bringNodeToRangeKeyPath(JUCtrlHierBinding.java:875) at oracle.adfinternal.view.faces.model.binding.FacesCtrlHierBinding.bringNodeToRangeKeyPath (FacesCtrlHierBinding.java:121) at oracle.adfinternal.view.faces.model.binding.RowDataManager.setRowKey (RowDataManager.java:131) at oracle.adfinternal.view.faces.model.binding.FacesCtrlHierBinding$FacesModel.setRowKey (FacesCtrlHierBinding.java:951) at org.apache.myfaces.trinidad.component.UIXCollection.setRowKey (UIXCollection.java:553) at org.apache.myfaces.trinidad.component.UIXCollection.broadcast (UIXCollection.java:188) at org.apache.myfaces.trinidad.component.UIXComponent.broadcastInContext(UIXComponent.java:364) at org.apache.myfaces.trinidad.component.WrapperEvent.broadcastWrappedEvent(WrapperEvent.java:82) at org.apache.myfaces.trinidad.component.UIXCollection.broadcast(UIXCollection.java:170) at org.apache.myfaces.trinidad.component.UIXComponent.broadcastInContext(UIXComponent.java:364) at org.apache.myfaces.trinidad.component.WrapperEvent.broadcastWrappedEvent(WrapperEvent.java:82) at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent$1.run (ContextSwitchingComponent.java:168) at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent._processPhase (ContextSwitchingComponent.java:510) at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent.broadcast (ContextSwitchingComponent.java:171) at org.apache.myfaces.trinidad.component.UIXComponent.broadcastInContext(UIXComponent.java:364) at org.apache.myfaces.trinidad.component.WrapperEvent.broadcastWrappedEvent(WrapperEvent.java:82) at oracle.adf.view.rich.component.fragment.UIXInclude.broadcast(UIXInclude.java:111) at org.apache.myfaces.trinidad.component.UIXComponent.broadcastInContext(UIXComponent.java:364) at org.apache.myfaces.trinidad.component.WrapperEvent.broadcastWrappedEvent(WrapperEvent.java:82) at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent$1.run (ContextSwitchingComponent.java:168) at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent._processPhase (ContextSwitchingComponent.java:510) at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent.broadcast (ContextSwitchingComponent.java:171) at oracle.adf.view.rich.component.fragment.UIXInclude.broadcast(UIXInclude.java:115) at org.apache.myfaces.trinidad.component.UIXComponent.broadcastInContext(UIXComponent.java:364) at oracle.adf.view.rich.event.ProxyEvent.broadcastWrappedEvent(ProxyEvent.java:72) at oracle.adf.view.rich.component.fragment.UIXRegion.broadcast(UIXRegion.java:124) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._invokeApplication(LifecycleImpl.java:1074) at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._executePhase(LifecycleImpl.java:402) at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:225) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280) at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:254) at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136) at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:346) at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:192) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) at oracle.adfinternal.view.faces.webapp.rich.RegistrationFilter.doFilter(RegistrationFilter.java:105) at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter (TrinidadFilterImpl.java:502) at oracle.adfinternal.view.faces.activedata.AdsFilter.doFilter(AdsFilter.java:60) at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter (TrinidadFilterImpl.java:502) at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl (TrinidadFilterImpl.java:327) at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter (TrinidadFilterImpl.java:229) at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) at oracle.adf.library.webapp.LibraryFilter.doFilter(LibraryFilter.java:202) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) at weblogic.servlet.utils.FastSwapFilter.doFilter(FastSwapFilter.java:64) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:137) at java.security.AccessController.doPrivileged(Native Method) at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315) at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:460) at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:120) at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:217) at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:81) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:220) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun (WebAppServletContext.java:3436) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run (WebAppServletContext.java:3402) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57) at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2285) at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2201) at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179) at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1572) at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run (ContainerSupportProviderImpl.java:255) at weblogic.work.ExecuteThread.execute(ExecuteThread.java:311) at weblogic.work.ExecuteThread.run(ExecuteThread.java:263) <oracle.adf.view> <PartialResponseUtils> <handleError> <ADF_FACES60096:Server Exception during PPR, #1> oracle.jbo.InvalidOperException: JBO29114 ADFContext is not setup to process messages for this exception. Use the exception stack trace and error code to investigate the root cause of this exception. Root cause error code is JBO34014. Error message parameters are {0=oracle.jbo.Key[null ], 1=root} at oracle.jbo.uicli.binding.JUCtrlHierBinding.bringNodeToRangeKeyPath(JUCtrlHierBinding.java:875) at oracle.adfinternal.view.faces.model.binding.FacesCtrlHierBinding.bringNodeToRangeKeyPath (FacesCtrlHierBinding.java:121) at oracle.adfinternal.view.faces.model.binding.RowDataManager.setRowKey(RowDataManager.java:131) at oracle.adfinternal.view.faces.model.binding.FacesCtrlHierBinding$FacesModel.setRowKey (FacesCtrlHierBinding.java:951) at org.apache.myfaces.trinidad.component.UIXCollection.setRowKey(UIXCollection.java:553) at org.apache.myfaces.trinidad.component.UIXCollection.broadcast(UIXCollection.java:188) at org.apache.myfaces.trinidad.component.UIXComponent.broadcastInContext(UIXComponent.java:364) at org.apache.myfaces.trinidad.component.WrapperEvent.broadcastWrappedEvent(WrapperEvent.java:82) at org.apache.myfaces.trinidad.component.UIXCollection.broadcast(UIXCollection.java:170) at org.apache.myfaces.trinidad.component.UIXComponent.broadcastInContext(UIXComponent.java:364) at org.apache.myfaces.trinidad.component.WrapperEvent.broadcastWrappedEvent(WrapperEvent.java:82) at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent$1.run (ContextSwitchingComponent.java:168) at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent._processPhase (ContextSwitchingComponent.java:510) at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent.broadcast (ContextSwitchingComponent.java:171) at org.apache.myfaces.trinidad.component.UIXComponent.broadcastInContext(UIXComponent.java:364) at org.apache.myfaces.trinidad.component.WrapperEvent.broadcastWrappedEvent(WrapperEvent.java:82) at oracle.adf.view.rich.component.fragment.UIXInclude.broadcast(UIXInclude.java:111) at org.apache.myfaces.trinidad.component.UIXComponent.broadcastInContext(UIXComponent.java:364) at org.apache.myfaces.trinidad.component.WrapperEvent.broadcastWrappedEvent(WrapperEvent.java:82) at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent$1.run (ContextSwitchingComponent.java:168) at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent._processPhase (ContextSwitchingComponent.java:510) at oracle.adf.view.rich.component.fragment.ContextSwitchingComponent.broadcast (ContextSwitchingComponent.java:171) at oracle.adf.view.rich.component.fragment.UIXInclude.broadcast(UIXInclude.java:115) at org.apache.myfaces.trinidad.component.UIXComponent.broadcastInContext (UIXComponent.java:364) at oracle.adf.view.rich.event.ProxyEvent.broadcastWrappedEvent(ProxyEvent.java:72) at oracle.adf.view.rich.component.fragment.UIXRegion.broadcast(UIXRegion.java:124) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._invokeApplication(LifecycleImpl.java:1074) at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl._executePhase(LifecycleImpl.java:402) at oracle.adfinternal.view.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:225) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280) at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:254) at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136) at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:346) at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) at oracle.adf.model.servlet.ADFBindingFilter.doFilter(ADFBindingFilter.java:192) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) at oracle.adfinternal.view.faces.webapp.rich.RegistrationFilter.doFilter (RegistrationFilter.java:105) at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter (TrinidadFilterImpl.java:502) at oracle.adfinternal.view.faces.activedata.AdsFilter.doFilter(AdsFilter.java:60) at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl$FilterListChain.doFilter (TrinidadFilterImpl.java:502) at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl (TrinidadFilterImpl.java:327) at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter (TrinidadFilterImpl.java:229) at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) at oracle.adf.library.webapp.LibraryFilter.doFilter(LibraryFilter.java:202) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) at weblogic.servlet.utils.FastSwapFilter.doFilter(FastSwapFilter.java:64) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) at oracle.security.jps.ee.http.JpsAbsFilter$1.run(JpsAbsFilter.java:137) at java.security.AccessController.doPrivileged(Native Method) at oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315) at oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:460) at oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:120) at oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:217) at oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:81) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) at oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:220) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun (WebAppServletContext.java:3436) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run (WebAppServletContext.java:3402) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57) at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute (WebAppServletContext.java:2285) at weblogic.servlet.internal.WebAppServletContext.securedExecute (WebAppServletContext.java:2201) at weblogic.servlet.internal.WebAppServletContext.execute (WebAppServletContext.java:2179) at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1572) at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run (ContainerSupportProviderImpl.java:255) at weblogic.work.ExecuteThread.execute(ExecuteThread.java:311) at weblogic.work.ExecuteThread.run(ExecuteThread.java:263)
This exception happened on a af:inputComboboxListOfValues component from the borrower’s form. After a short research I found that this field is a primary key in my view object and if I make it not a primary key, the error disappears. This made me research more and make this blog. The final results of my short research are:
- Never use a primary key as updateable column in af:table or as updateable field in af:iterator. If you have to use it then remove the primary key from the Entity/View Object or change it.
- Avoid LOV (List of Values) on a primary key.
Do you have a better solution? During my research, I found this useful post from the Ashish Awasthi`s blog: Target Unreachable -identifier ‘row’ resolved to null ADF_FACES-60097- Oracle ADF. Have other difficulties with LOVs. This one may also come in handy: Cascade LOVs For Required Fields.