Attendees: Michael Bouschen, Tilmann Zäschke, Craig Russell Agenda:
1. Change to JDO specification with regard to jdoql null handling The current specification: Navigation through a null-valued field, which would throw NullPointerException, is treated as if the subexpression returned false. Similarly, a failed cast operation, which would throw ClassCastException, is treated as if the subexpression returned false. Other subexpressions or [other values for variables might still qualify the candidate instance for inclusion in the result set.] Proposed specification: Navigation through a null-valued field, which would throw NullPointerException, is treated as if the subexpression returned null. Similarly, a failed cast operation, which would throw ClassCastException, is treated as if the subexpression returned null. Comparison of fields with null return null. Arithmetic expressions with null parameters return null. Optional.get() may return null. Optional.isPresent() is treated as !=null. Boolean expressions with null operands: true & null -> null false & null -> false true | null -> true false | null -> null This change aligns JDO with SQL NULL semantics and makes reasoning about JDOQL expressions more rational. If nothing else is heard, I’ll make this change. The table that enumerates the methods that are allowed in JDOQL expressions will include isPresent() and get() for types of Optional<T>. 2. New patch on JDO-755 "Add more TCK query test cases with navigation and comparison with null" https://issues.apache.org/jira/browse/JDO-755 Patch works, assuming the specification change in item #1. Ship it. 3. New comment on JDO-735 "Make PersistenceManager and Query support AutoCloseable (JDK1.7+)" https://issues.apache.org/jira/browse/JDO-735 There is a difference between Closeable extends AutoCloseable and AutoCloseable. For one, the close() method in Closeable throws IOException, whereas the close() method in AutoCloseable throws Exception. Also, from the AutoCloseable javadoc: Note that unlike the close method of Closeable, this close method is not required to be idempotent. In other words, calling this close method more than once may have some visible side effect, unlike Closeable.close which is required to have no effect if called more than once. I think we want Closeable and *not* AutoCloseable because of the idempotency requirement. And query.close() should simply call closeAll() and remain usable. We could discuss whether it is ok to try (PersistenceManager pm = pmf.getPersistenceManager(), Query q = pm.createQuery()) and have the pm and q both closed by AutoCloseable. We should still declare the close() method in Query and Extent with no exceptions. Close method on Extent could have the same semantics as Query: closeAll() is called and nothing else. There is no need for an isClosed method. It is not obvious that there are any resources that need to be cleaned up in a Query instance except for results. Proposal is to change PersistenceManger, Query, and Extent to extend Closeable. Calling close() multiple times is idempotent. There is no isClosed() method unless 3.1 already has one. The close() method is declared in the interface and does not throw exceptions. We should also add method close() to the interfaces so we can add javadoc explaining the semantics. 4. JDO-751 "Support for Java8 Optional" https://issues.apache.org/jira/browse/JDO-751 The test case includes: + //checkQuery("!(optionalPC.optionalPC.isPresent())", oidReferencedPC1); With new semantics as discussed above, we should be able to make this test case work returning instances where either optionalPC is null or optionalPC.optionalPC is null. 5. JDO-747 "Behavior of delete() with multiple concurrent Transactions" https://issues.apache.org/jira/browse/JDO-747 6. JDO 3.1: Need to go through change lists in JIRA for 3.1 RC1 and 3.1 to prepare JCP Change Log 7. Other issues Action Items from weeks past: [Oct 30 2015] AI Craig: File a maintenance review with JCP [May 15 2015] AI Craig Spec change for roll back an active transaction when closing a persistence manager (JDO-735) [Apr 17 2015] AI Craig: Oracle spec page on JDO need to be updated once the JCP Maintenance Release for JDO 3.1 is published [Oct 17 2014] AI Matthew any updates for "Modify specification to address NoSQL datastores": https://issues.apache.org/jira/browse/JDO-651? [Feb 28 2014] AI Everyone: take a look at https://issues.apache.org/jira/browse/JDO-712 [Feb 28 2014] AI Everyone: take a look at https://issues.apache.org/jira/browse/JDO-625 [Dec 13 2013] AI Craig file a JIRA for java.sql.Blob and java.sql.Clob as persistent field types [Aug 24 2012] AI Craig update the JIRAs JDO-689 JDO-690 and JDO-692 about JDOHelper methods. In process. Craig L Russell Architect craig.russ...@oracle.com P.S. A good JDO? O, Gasp!