Original approach was to upgrade one version of play at a time and keep all functionality. This turned out incredible difficult given all the interdependencies between libraries and scala version. See old branch: https://opensource.ncsa.illinois.edu/bitbucket/projects/CATS/repos/clowder/compare/commits?sourceBranch=refs%2Fheads%2F2.0&targetBranch=refs%2Fheads%2Fdevelop.
Currently working on this: Luigi Marini Rob Kooper Maxwell Burnette Todd Nicholson
New approach is as follows:
- Remove all unused and legacy code. This will be 2.0.
- Elasticsearch upgrade?
- New MongoDB implementation. This will be 3.0+.
- Replace Salat and Cashbah with Java Mongo Driver and keep the rest as is
- Split services in two layers.
- Top layer has the common code that calls the other services. For example when removing a dataset also remove files.
- Bottom layer is traits to do CRUD operations on resources and requires multiple implementations.
- Modify code to be compatible with newer versions of Playframework. 4.0+
- Should jump straight to 2.7 or 2.6. We need to figure out which one.
- Migrate authentication / authorization:
- How do tests factor in? can we start writing them before the refactoring? For example unit tests of services vs play scala tests of controllers actions.
- Enforce style as part of this process. Using IDE? We should look at what rules and style software to use.
Play 2.6 Upgrade
Sbt migration: http://www.scala-sbt.org/0.13/docs/Migrating-from-sbt-012x.html