BUG in ADF11: SQL derived attribute on an entity
Hello!
I think we got into troubles because of a bug in base EntityImpl. We use JDev 11g december 2008 release.
If we define a simple transient (read only) attribute derived from a SQL query (SELECT 1 FROM DUAL for example) and use such entity in an editable view (the attribute may or may not be used in the view, the behavior is the same), we get this exception when we want to edit data in the view:
oracle.jbo.DMLException: JBO-26080: Chyba při výběru entity pro Employees
at oracle.jbo.server.OracleSQLBuilderImpl.doEntitySelectForAltKey(OracleSQLBuilderImpl.java:1117)
at oracle.jbo.server.BaseSQLBuilderImpl.doEntitySelect(BaseSQLBuilderImpl.java:549)
at oracle.jbo.server.EntityImpl.doSelect(EntityImpl.java:7612)
at oracle.jbo.server.EntityImpl.lock(EntityImpl.java:5420)
at oracle.jbo.server.EntityImpl.setAttributeValueInternal(EntityImpl.java:3242)
at oracle.jbo.server.EntityImpl.setAttributeValue(EntityImpl.java:3131)
at oracle.jbo.server.AttributeDefImpl.set(AttributeDefImpl.java:2676)
at oracle.jbo.server.EntityImpl.setAttributeInternal(EntityImpl.java:1687)
at oracle.jbo.server.AttributeDefImpl.resolveSet(AttributeDefImpl.java:2885)
at oracle.jbo.server.EntityImpl.setAttrInvokeAccessor(EntityImpl.java:1668)
at oracle.jbo.server.EntityImpl.setAttribute(EntityImpl.java:1595)
at oracle.jbo.server.ViewRowStorage.setAttributeValue(ViewRowStorage.java:1959)
at oracle.jbo.server.ViewRowStorage.setAttributeInternal(ViewRowStorage.java:1803)
at oracle.jbo.server.ViewRowImpl.setAttributeInternal(ViewRowImpl.java:1266)
at oracle.jbo.server.ViewRowImpl.setAttrInvokeAccessor(ViewRowImpl.java:1241)
at oracle.jbo.server.ViewRowImpl.setAttribute(ViewRowImpl.java:984)
at oracle.adf.model.binding.DCDataControl.setAttributeInRow(DCDataControl.java:2313)
at oracle.adf.model.bc4j.DCJboDataControl.setAttributeInRow(DCJboDataControl.java:2620)
at oracle.jbo.uicli.binding.JUCtrlValueBinding.setAttributeInRow(JUCtrlValueBinding.java:1047)
at oracle.jbo.uicli.binding.JUCtrlValueBinding.setAttribute(JUCtrlValueBinding.java:1331)
at oracle.jbo.uicli.binding.JUCtrlValueBinding.compareAndSetAttribute(JUCtrlValueBinding.java:3023)
at oracle.jbo.uicli.jui.JUSVUpdateableFocusAdapter.focusLost(JUSVUpdateableFocusAdapter.java:92)
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:213)
at java.awt.Component.processFocusEvent(Component.java:5933)
at java.awt.Component.processEvent(Component.java:5797)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4413)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1848)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:882)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:555)
at java.awt.Component.dispatchEventImpl(Component.java:4285)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Caused by: java.sql.SQLException: ORA-00936: chybí výraz
at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:74)
at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:110)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:171)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:455)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:413)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:1030)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:194)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:785)
at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:860)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1186)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3381)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3425)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1202)
at oracle.jbo.server.OracleSQLBuilderImpl.doEntitySelectForAltKey(OracleSQLBuilderImpl.java:870)
... 41 more
## Detail 0 ##
java.sql.SQLException: ORA-00936: chybí výraz
at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:74)
at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:110)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:171)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:455)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:413)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:1030)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:194)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:785)
at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:860)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1186)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3381)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3425)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1202)
at oracle.jbo.server.OracleSQLBuilderImpl.doEntitySelectForAltKey(OracleSQLBuilderImpl.java:870)
at oracle.jbo.server.BaseSQLBuilderImpl.doEntitySelect(BaseSQLBuilderImpl.java:549)
at oracle.jbo.server.EntityImpl.doSelect(EntityImpl.java:7612)
at oracle.jbo.server.EntityImpl.lock(EntityImpl.java:5420)
at oracle.jbo.server.EntityImpl.setAttributeValueInternal(EntityImpl.java:3242)
at oracle.jbo.server.EntityImpl.setAttributeValue(EntityImpl.java:3131)
at oracle.jbo.server.AttributeDefImpl.set(AttributeDefImpl.java:2676)
at oracle.jbo.server.EntityImpl.setAttributeInternal(EntityImpl.java:1687)
at oracle.jbo.server.AttributeDefImpl.resolveSet(AttributeDefImpl.java:2885)
at oracle.jbo.server.EntityImpl.setAttrInvokeAccessor(EntityImpl.java:1668)
at oracle.jbo.server.EntityImpl.setAttribute(EntityImpl.java:1595)
at oracle.jbo.server.ViewRowStorage.setAttributeValue(ViewRowStorage.java:1959)
at oracle.jbo.server.ViewRowStorage.setAttributeInternal(ViewRowStorage.java:1803)
at oracle.jbo.server.ViewRowImpl.setAttributeInternal(ViewRowImpl.java:1266)
at oracle.jbo.server.ViewRowImpl.setAttrInvokeAccessor(ViewRowImpl.java:1241)
at oracle.jbo.server.ViewRowImpl.setAttribute(ViewRowImpl.java:984)
at oracle.adf.model.binding.DCDataControl.setAttributeInRow(DCDataControl.java:2313)
at oracle.adf.model.bc4j.DCJboDataControl.setAttributeInRow(DCJboDataControl.java:2620)
at oracle.jbo.uicli.binding.JUCtrlValueBinding.setAttributeInRow(JUCtrlValueBinding.java:1047)
at oracle.jbo.uicli.binding.JUCtrlValueBinding.setAttribute(JUCtrlValueBinding.java:1331)
at oracle.jbo.uicli.binding.JUCtrlValueBinding.compareAndSetAttribute(JUCtrlValueBinding.java:3023)
at oracle.jbo.uicli.jui.JUSVUpdateableFocusAdapter.focusLost(JUSVUpdateableFocusAdapter.java:92)
at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:213)
at java.awt.Component.processFocusEvent(Component.java:5933)
at java.awt.Component.processEvent(Component.java:5797)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4413)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1848)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:882)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:555)
at java.awt.Component.dispatchEventImpl(Component.java:4285)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
I thing the problem is in locking of the record.
Thank you for any comments.
David