Part 1 looks at a handful of business considerations that you need to account for when you’re looking at Java EE application platforms — but that is only a part of selecting anything for your IT environment. In addition to treating an IT decision as a capital asset, your planning has to include technical factors: current and future development models, different types of applications, even rapid data processing.
Success today depends on achieving high levels of agility and flexibility. Major technology trends like mobile, the Internet of Things, and big data rely on lightweight, iterative environments like virtualization, cloud, and containers. This is forcing organizations to rethink their application development and deployment processes, application architecture designs, and choice of technologies used to build and run applications.
#1: Will this platform provide full Java EE capabilities in hybrid environments — both in the cloud and on-premise?
Both public and private clouds are emerging as the ideal environment to host application development for several reasons: faster delivery; easy scale to accommodate changing traffic loads; and a standardized, controlled environment.
However, most organizations cannot shift all loads into the cloud, and still rely on virtual or physical infrastructure for critical applications. To maintain consistency across all environments, an enterprise application platform has to be able to provide the full Java EE functionality with minimal code changes and maximum performance independent of the environment. It is critical to avoid a platform which locks you into a specific delivery model or approach. A modular architecture that is environment-agnostic means that Java applications can be developed and deployed into any environment.
#2: Will I have the flexibility to build applications to meet diverse business requirements?
A single application platform should be capable of building everything from your simple microservice to a highly complex integration application or traditional monolith application. The application platform should support you. It must provide the ability to tailor the size, scale, and scope of development. A modular application platform provides the appropriate scale by being able to design the application platform services around the demands that your environment will put on them.
#3: Do these technologies encourage higher levels of both developer and IT operations productivity?
Today’s application platform needs to provide both advanced developer productivity and an easy-to-manage, standardized environment for operations. As a practice, DevOps unites both halves of the IT organization and, ideally, enables continuous delivery as well as greater reliability.
A standards-based application platform creates an environment that operations can easily secure, control, and maintain. This is even easier to implement through containers, which can seamlessly emulate the same hardware architecture, software versions, and other settings across environments. Simultaneously, developers can create instances on demand and use whichever tools, frameworks, or technologies they need.
Using a lightweight, container-friendly application platform reduces investment in costly physical systems and helps streamline processes for both developer and operations staff.
#4: Will it be feasible to migrate my existing applications?
No migration is painless, but migrating critical legacy systems can be made much easier with the right tools. At its most basic, those tools include documentation and defined processes for migration planning, specific utilities for services, and consulting or support through the process. Proactive planning and assistance during a migration helps developers accelerate the process and reduce risk.
#5: Does the platform perform reliably in large environments?
Nothing else really matters if your platform doesn’t deliver the performance you require. Basic performance means that the platform is reliable, secure, standards compliant, and efficient in how it uses resources even as demand fluctuates.
Beyond that, a truly performant application platform should be tuned for highly-transactional applications. By implementing a modular services container, the right platform can start services in parallel and on demand, allowing them to spin up faster. In addition, it should be optimized to work with both multicore and virtualized environments in three ways: delivering an extremely low memory footprint, effectively utilizing resources, and effectively managing ports. This simplifies the effort needed to deploy in virtualized environments.
#6: Can you quickly and dynamically scale the platform?
A good application platform can scale out massively to meet rapidly changing traffic demands. Along with providing better performance, this also manages resources more efficiently, since you only access resources as you require them. For an application platform, scalability is determined by whether it has the elasticity necessary for distributed and cloud architectures. For example, a lightweight or modular application server means that it has a small enough resource footprint that it can easily run in small, scalable environments like containers, cloud instances, or virtual machines. Additionally, look for the ability to distribute services, especially resource-intensive services, like caches. This can improve performance across the environment; distributed caches, for example, better support peer-to-peer networking, and limiting the number of services on a single instance can mean faster startup times.