Java Developer’s Center
Currently multilingual, the platform was initially created as pure Java Cloud and still maintains a primary focus on this programming language. The maturity of the platform technology was recognized by the Java community with Duke’s Choice Award already twice (in 2012 and 2018). This guide acquaints you with the distinctive features of Java hosting within the platform and lets you easily get started with a broad functionality list.
Use the table of content below to find required information within the guide quicker:
- Java Versions
- Java Application Servers
- Java Environment Creation
- Java Application Deployment
- Domains Management
- Automatic Vertical Scaling
- Horizontal Scaling: Manual and Automatic
- Java Clusterization
- Database Connection to Java Application
Currently (at the time of this writing), the following Java versions and distributions are available:
- AdoptOpenJDK: 8.0.312; 11.0.13; 13.0.2; 14.0.2; 15.0.2; 16.0.2
- Alibaba Dragonwell: 8.11.12
- Amazon Corretto: 8.342.07.4; 22.214.171.124.1; 126.96.36.199.1; 188.8.131.52.1
- Eclipse OpenJ9: 0.11.0 (8u192-b12; 11.0.1); 0.15.1 (8u222-b10; 11.0.4); 0.17.0 (8u232-b09; 11.0.5; 13.0.1); 0.18.1(8u242-b08; 11.0.6; 13.0.2) 0.20.0 (8u252-b09; 11.0.7); 0.21.0 (8u262-b10; 8u265-b01; 11.0.8; 14.0.2); 0.22.0 (15.0.0); 0.23.0 (8u272-b10; 11.0.9); 0.24.0 (8u282-b08; 11.0.10); 0.25.0-16; 0.26.0 (8u292-b10; 11.0.11); 0.27.0 (8u302-b08; 11.0.12); 0.29.0 (8u312-b07; 11.0.13); 0.30.0 (8u322-b06; 11.0.14); 0.32.0 (8u332-b09; 11.0.15)
- Eclipse Temurin: 8.0.342; 11.0.16; 17.0.4
- GraalVM CE (currently, for Java Engine and Maven only): 19.3.1; 20.2.0; 21.3.0; 22.2.0
- Liberica JDK: 8.0.322; 11.0.14; 13.0.2; 14.0.2; 15.0.0; 16.0.0; 17.0.2
- Oracle JDK Dev: 7.0_79; 8.0_202; 11.0.2
- Oracle OpenJDK: 7.0.261; 8.0.342; 11.0.16; 13.0.2; 14.0.2; 15.0.2; 16.0.2; 17.0.2; 18.0.2; 19.ea-b33; 20.ea-b8
- Zulu Community: 7.0.352; 8.0.342; 11.0.16; 13.0.9; 14.0.2; 15.0.8; 16.0.2; 17.0.4; 18.0.2
The 6th, 9th, 10th, and 12th Java versions cannot be created within the new environments anymore due to end-of-life of the respective releases. However, the already existing instances remain fully operable (including redeploy, cloning, horizontal scaling).
You can choose the preferred version while creating an environment, or change it later. These procedures are described in the Java Versions document.
Java Application Servers
Within a wide variety of software stacks, the platform supports a pure Java Engine and the following Java application servers:
Read the documentation below for additional information on Java servers specifics within the platform:
Java Environment Creation
To host a Java application, you need to create an appropriate environment. Just open the topology wizard in your PaaS dashboard, navigate to the Java language tab, pick the desired Java application server, databases, and other stacks. If needed, customize settings (such as cloudlets, disk space, region, etc.) and click Create.
All added servers represent fully isolated containers, located on different hosts for more availability, while isolation eliminates the risks of interfering with one another. You can attach the public IP address to any of these servers for being accessed directly. Otherwise (i.e. if using default settings), the incoming requests sent to your application will be proxied by Shared Load Balancer.
Java Application Deployment
After environment creation, you can deploy your Java application. The platform fully automates the deployment process allowing you to get the project up and running effortlessly.
The following deployment methods are supported:
- via the application archive - .war, .zip, .jar, and .ear archives
- from the GIT/SVN remote repository, using the Maven build node
- using plugins - Ant Task, Eclipse, IntelliJ IDEA, Maven and NetBeans
You can read the appropriate documents to learn more about the deployment of the Java applications:
You can bind a custom domain name to your application’s URL and use it instead of the default environment domain:
- CNAME redirect if using Shared Load Balancer; is recommended for dev and test environments
- DNS A Record if using public IP; can handle high traffic load and is suitable for production environments
Tip: The platform allows using multiple domains within a single environment to increase its usability, efficiency, and scalability, while simultaneously saving your costs by avoiding a need to set up separate instances for different apps. Check the appropriate examples below:
Automatic Vertical Scaling
The platform dynamically provides the number of cloudlets (i.e. RAM and CPU resources), which are required by your application to handle the current load. Just specify the maximum limit, and everything else will be performed by the platform automatically - no manual intervention required. This feature is called automatic vertical scaling and ensures that you never overpay for unused capacities without experiencing a resource shortage.
To set or change the vertical scaling limit, just use the appropriate slider within the topology wizard:
Horizontal Scaling: Manual and Automatic
In case your application becomes highly popular and a single node is not enough, feel free to scale it horizontally. In order to ensure even more reliability and high-availability, all the newly added nodes are created on the different hardware nodes.
Click the +/- buttons within the Horizontal Scaling section of the topology wizard to set the required number of nodes (load balancer will be added automatically).
Also, you can adjust the preferred scaling mode:
- Stateless - simultaneously creates all of the new nodes from the base image template
- Stateful - sequentially copies file system of the master container into the new nodes
Horizontal scaling can be performed not only manually but also automatically based on the current load on the node, which is monitored through the tunable triggers.
Within the Settings > Monitoring > Auto Horizontal Scaling section, you can adjust the scaling conditions due to your needs, i.e. the lower/upper limit (percentage) for the specified resource type during a certain period. If the load stays out of the set limits, the nodes removal/addition process will be called automatically.
There are five different types of resources, which are monitored by triggers:
- Memory (RAM)
- Disk I/O
- Disk IOPS
The trigger starts monitoring the resource consumption immediately after addition, and when the usage level exceeds the stated limit, a trigger becomes invoked. Subsequently, if the load persists for a defined period, it will be executed, adjusting the number of nodes.
The embedded application server clustering feature provides replication of sessions between pairs of nodes and eliminates the necessity of additional software or Memcached usage for increasing application availability.
The platform provides automated session replication between Tomcat and TomEE servers with the help of multicast to gain web application high availability within the Java cluster. This High-Availability feature can be enabled in the wizard during environment creation or topology tuning.
The newer modern Auto-Clustering solution is provided for the GlassFish, Payara, and WildFly stacks:
Database Connection to Java Application
A set of scalable and fully manageable database servers can be easily installed within the Java environment. To establish the connection, adjust your application following the instruction based on the database you require:
The platform provides high-quality Java hosting with improved availability, redundancy, and scalability strengths for your application.