While the M4 vote is still in progress, I went ahead and created a new version 
in Jira - 4.0.M5 - to commit the new code. I am actually hoping that M5 will be 
renamed to B1 at some point, and we can successfully fight the scope creep. 
Talking of which, here is what I'd like to see in Cayenne before the beta code 
freeze:

1. Cdbimport leftovers: track changes of auto increment status, column type 
status, etc.

2. Automatic module loading via ServiceLoader mechanism. We have lots of small 
modules now (eg. cayenne-java8). I want them to be included in ServerRuntime 
automatically with no explicit DI code.

3. Split cayenne-lifecycle into task-specific submodules. With #2 above this 
only makes sense.

4. API queries with GROUP BY / HAVING. This is a big one, and we have a huge PR 
waiting a review. I hope we can make this happen.

5. Java 8 "preference" for Modeler / cdbimport (making it easy to use 
"java.time" classes if you are on Java 8 instead of java.util.Date and friends)

6. A module providing JCacheQueryCache, integrating JCache (JSR 107). In 
addition to being a "standard", JCache can work as a proxy for most industrial 
check providers like EhCache, so we won't have to maintain our own providers 
for each one of them. (I already built JCacheQueryCache in Bootique. Will need 
to port it to Cayenne). Perhaps we also deprecate multiple cache groups 
support. None of the modern caches can effectively support more than one cache 
group per key. OSCache was the only exception, but OSCache is dead now.

7. Simplify DataChannelFilter. Split it into separate select and update 
filters, remove 'init' method (use injection instead).

8. DI improvements. Learned a lot about good DI patterns when writing Bootique. 
Want to apply this knowledge to Cayenne DI. We can easily add type-safe 
collection/map bindings API, as well as "contribution" API to simplify 
extensions. 

9. Refresh Swing Modeler design (e.g. do the modern buttons). 

10. Gradle support. Cayenne works with Gradle just fine, but we can provide 
some explicit facilities (or at least documentation on the best practices). 

11. Review and deprecate older APIs, such as Query.getName(), 
Query.getDataMap().

The list is long (and keeps expanding). Though many of these items are 
negotiable and can be postponed until 4.1. Also most of the items are not that 
big. #4 is probably the biggest and the most invasive of all. I haven't 
included specific bug fixes. I assume those will happen at their "normal" pace.

Your list may be different, so please send your comments and offer your 
favorite items.

Andrus

Reply via email to