What are the modern alternatives to package and deploy server side java software1) in heterogeneous environments2) ?
I could not find a lot of coherent or up to date information on the topic but I have a few ideas. I'll start
war
files and craft your own provisioning and deployment script, e.g., using izpack, ant scripts, cargo or something similar.war
files into ear
(Enterprise archives) files
war
files can be served from one executable. The first option has been my reference approach for long but requires a lot of provisioning, install scripts, both which varies on different environments (e.g., Linux, Windows).
What modern alternatives are out there that makes packaging and deployment easier?
1) Picture a SOA like setup with microservices, RESTful communication etc.
2) With that in mind let's rule out PaaS
providers such as cloudbees, cloudfoundy etc. They deserve a topic of their own.
The packaged application includes deployment descriptors, which give the Application Server software the information it needs to load the application, map a URL to it, and connect it to the resources it uses.
Packaging and deployment are part of a multistep process that retrieves build output, packages the output, transfers or copies the package to another location, and then deploys it to corresponding containers and runtime environments in test or production systems.
Start the deployment wizardIn the Configuration Manager console, go to the Software Library workspace, expand Application Management, and select either the Applications or Application Groups node. Select an application or application group from the list to deploy. In the ribbon, select Deploy.
I recommend reading The Twelve-Factor App document, inspired by Patterns of Enterprise Application Architecture and Refactoring books by Martin Fowler. It suggests the following:
There's also the article on Microservices by James Lewis and Martin Fowler, that states some of the ideas enumerated above.
Regarding packaging and deploying, the latter article recommendations are:
Componentization via Services
Apps (and their microservices) should be implemented as out-of-process components (rather than in-process libraries) that can be independently replaced, upgraded, and deployed. Components provide a more explicit component interface by using explicit remote call mechanisms.
Organized around Business Capabilities
Each component should be organized around business capability, for a specific business area, taking a road-stack implementation of software including user-interface, persistent storage, and any external collaborations. This approach also allows a cross-team project to work together on the same component (and own the product over its full lifetime).
Smart endpoints and dumb pipes
Apps built from microservices should be choreographed using simple RESTish protocols. The two most commonly used protocols are HTTP request-response with resource API's, and lightweight messaging over a dumb bus (such as RabbitMQ or ZeroMQ).
Infrastructure Automation
The operational complexity of building, deploying and operating microservices can be reduced by automation with Continuous Delivery or it's precursor, Continuous Integration.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With