For licensing reasons this particular application cannot be deployed into our cloud environment - so I've been evaluating what options are open from various perspectives.
- Operating System
- Fixed to the same as other services running from the same machine.
- Language level
- Possibly tied to the same as existing applications - unless we can tweak chef provisioning to support multiple versions (maybe simple?).
- Application server
- Hopefully completely flexible, which should allow us to use the embedded approach.
- Dependency injection framework
- Hopefully completely flexible, although the main library dependencies are very Spring oriented.
- Slight preference for UtterlyIdle as that matches the other components.
- UPDATE: Due to the tight coupling of a third party library, a selection of Spring framework dependencies are bundled in the application and will be required at runtime.
- Build system
- Relatively flexible, but easiest with something that plays nicely with dependency management - leaning towards Gradle rather than Maven.
- Continuous Integration and deployment
- Need to decide between Go and Jenkins.
- Likely to involve scp and shell scripts.
- Monitoring and logging
- Although this environment will have easier file system access than our cloud setup we should log to the logging service.
- We could expose JMX profiling for monitoring of memory usage etc. on our internal monitoring infrastructure.