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!





Reply via email to