JDO
  1. JDO
  2. JDO-427

StateTransitionsReturnedObjects incorrectly expects detachCopy() to allow passing a detached instance

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Minor Minor
    • Resolution: Fixed
    • Affects Version/s: JDO 2 final (2.0)
    • Fix Version/s: JDO TCK challenge fixes
    • Component/s: tck
    • Labels:
      None

      Description

      Element 11 (0-based) of the "detachCopy with active tx" array in org/apache/jdo/tck/lifecycle/StateTransitionsReturnedObjects.java asserts that a detached instance passed to detachCopy() should result in its state being unchanged. However, section 12.6.8 of the JDO 2 spec explicitly states: "If the parameter instance is detached, then JDOUserException is thrown."

      To fix it to check for the correct behavior, element 11 should be changed from "UNCHANGED" to "ERROR".

        Activity

        Hide
        Marc Prud'hommeaux added a comment -

        The same goes for element 12, which is the same as above, except that it is testing that a detached-dirty instance will transition to detached-clean. The fix is to change element 11 from "DETACHED_CLEAN" to "ERROR"

        Show
        Marc Prud'hommeaux added a comment - The same goes for element 12, which is the same as above, except that it is testing that a detached-dirty instance will transition to detached-clean. The fix is to change element 11 from "DETACHED_CLEAN" to "ERROR"
        Hide
        Craig L Russell added a comment -

        This is a spec bug. The sentence "If the parameter instance is detached, then JDOUserException is thrown." should be read as part of the previous paragraph that describes the behavior if a transaction is not active. In this case, detached and transient instances cannot be made persistent before detach because makePersistent requires an active transaction.

        The operative behavior is "If a detachCopy method is called with an active transaction, the parameter Collection of instances is first made persistent, and the reachability algorithm is run on the instances. "

        I'd like to resolve this issue as invalid, since the intent is to only throw an exception if detached and transient instances in the reachability graph cannot be made persistent (if there is no active transaction). The maintenance release will clarify the intent.

        Show
        Craig L Russell added a comment - This is a spec bug. The sentence "If the parameter instance is detached, then JDOUserException is thrown." should be read as part of the previous paragraph that describes the behavior if a transaction is not active. In this case, detached and transient instances cannot be made persistent before detach because makePersistent requires an active transaction. The operative behavior is "If a detachCopy method is called with an active transaction, the parameter Collection of instances is first made persistent, and the reachability algorithm is run on the instances. " I'd like to resolve this issue as invalid, since the intent is to only throw an exception if detached and transient instances in the reachability graph cannot be made persistent (if there is no active transaction). The maintenance release will clarify the intent.
        Hide
        Craig L Russell added a comment -

        Since the spec is ambiguous, I'll change the test to UNSPECIFIED for element 11 and 12, for the branches/2.0.1 but not for the trunk.

        The maintenance release will move the sentence "If the parameter instance is detached, then JDOUserException is thrown" into the description of detach without an active transaction. And the test will verify that a detached-clean instance is returned as detached-clean, and a detached-dirty instance is returned as detached-clean.

        Show
        Craig L Russell added a comment - Since the spec is ambiguous, I'll change the test to UNSPECIFIED for element 11 and 12, for the branches/2.0.1 but not for the trunk. The maintenance release will move the sentence "If the parameter instance is detached, then JDOUserException is thrown" into the description of detach without an active transaction. And the test will verify that a detached-clean instance is returned as detached-clean, and a detached-dirty instance is returned as detached-clean.
        Hide
        Craig L Russell added a comment -

        svn commit src/java/org/apache/jdo/tck/lifecycle/StateTransitionsReturnedObjects.java
        Sending src/java/org/apache/jdo/tck/lifecycle/StateTransitionsReturnedObjects.java
        Transmitting file data .
        Committed revision 462525.

        Show
        Craig L Russell added a comment - svn commit src/java/org/apache/jdo/tck/lifecycle/StateTransitionsReturnedObjects.java Sending src/java/org/apache/jdo/tck/lifecycle/StateTransitionsReturnedObjects.java Transmitting file data . Committed revision 462525.

          People

          • Assignee:
            Craig L Russell
            Reporter:
            Marc Prud'hommeaux
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development