Deploying Applications on Micro Programmatically
You can deploy applications onto Payara Micro programmatically via its API.
Deploying Applications Using an asadmin Command
Applications can be deployed using the equivalent administration (asadmin
) commands present on Payara Server.
Deploying on a Local Instance
It’s possible to use the run(Collection<InstanceDescriptor> members, String command, String… args )
method to run the deploy
asadmin command. To deploy to a single instance, you must create a members
Collection
object only containing a single instance like in the following example:
import fish.payara.micro.PayaraMicro;
import fish.payara.micro.BootstrapException;
import fish.payara.micro.PayaraMicroRuntime;
import fish.payara.micro.services.data.InstanceDescriptor;
import java.util.ArrayList;
import java.util.Collection;
public class EmbeddedPayara {
public static void main(String[] args) throws BootstrapException {
PayaraMicroRuntime runtime = PayaraMicro.getInstance().setHttpAutoBind(true).bootstrap();
// Get a Collection with all running instances in the local runtimes cluster
Collection<InstanceDescriptor> allInstances = runtime.getClusteredPayaras();
// Create a Collection to use as a subset
Collection<InstanceDescriptor> subset = new ArrayList<>();
// Loop through all instances
for (InstanceDescriptor instance : allInstances){
// Only add the local instance
if (instance == runtime.getLocalDescriptor()){
subset.add(instance);
break;
}
}
// Run the deploy asadmin command on the subset Collection
runtime.run(subset, "deploy", "/home/user/test.war");
}
}
Deploying on Multiple Running Instances
You can use the run
method to run the deploy
asadmin command on multiple Payara Micro instances that belong to the same cluster. There are two run
method variants available for running administration commands: One which runs an asadmin
command on a subset of instances in a cluster, and another than runs an asadmin
command on ALL instances in a cluster.
Here is an example of deploying an application to ALL instances in a cluster:
import fish.payara.micro.PayaraMicro;
import fish.payara.micro.BootstrapException;
import fish.payara.micro.PayaraMicroRuntime;
public class EmbeddedPayara{
public static void main(String[] args) throws BootstrapException{
PayaraMicroRuntime runtime = PayaraMicro.getInstance().setHttpAutoBind(true).bootstrap();
// Run the deploy asadmin command on all instances in the runtimes cluster
runtime.run("deploy", "/home/user/test.war");
}
}
See the example for deploying on local instance on how to use the run
method on a subset of instances in a cluster.
Deploying an Application Programmatically during Bootstrap
There are two methods you can use to deploy an application during Payara Micro’s bootstrap process:
-
addDeployment(String pathToWar)
-
addDeploymentFile(File file)
The first, addDeployment(String pathToWar)
, accepts a String that points to the path of the artefact to be deployed. For example:
import fish.payara.micro.BootstrapException;
import fish.payara.micro.PayaraMicro;
public class EmbeddedPayara{
public static void main(String[] args) throws BootstrapException{
PayaraMicro.getInstance().addDeployment("/home/user/example.war").bootStrap();
}
}
The second method, addDeploymentFile(File file)
, functions in the same way, but takes a File
object instead:
import fish.payara.micro.BootstrapException;
import fish.payara.micro.PayaraMicro;
import java.io.File;
public class EmbeddedPayara{
public static void main(String[] args) throws BootstrapException{
File file = new File("/home/user/example.war");
PayaraMicro.getInstance().addDeploymentFile(file).bootStrap();
}
}
Unlike when controlling Payara Micro from the command line, you can split the instance initialization and configuration across multiple method invocations. For example, to deploy an application and start the instance on separate method calls, you can run the following code:
import fish.payara.micro.BootstrapException;
import fish.payara.micro.PayaraMicro;
public class EmbeddedPayara{
public static void main(String[] args) throws BootstrapException{
PayaraMicro micro = PayaraMicro.getInstance();
micro.addDeployment("/home/user/example.war");
micro.bootStrap();
}
}
You can use this strategy to deploy multiple deployments by calling addDeployment multiple times, or use setDeploymentDir to point to a deployment directory that contains the applications to deploy.
|
Deploying an Application Programmatically After Bootstrap
There are three methods available for deploying an application to a running instance:
-
deploy(File war)
-
deploy(String name, InputStream is)
-
deploy(String name, String contextRoot, InputStream is)
deploy(File war)
The first method works in the exact same way as the addDeploymentFile
method described in the Deploying Programmatically during Bootstrap section.
deploy(String name, InputStream is)
This method allows you to deploy WAR files using an InputStream
:
import fish.payara.micro.PayaraMicro;
import fish.payara.micro.BootstrapException;
import fish.payara.micro.PayaraMicroRuntime;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
public class EmbeddedPayara {
public static void main(String[] args) throws BootstrapException{
PayaraMicroRuntime instance = PayaraMicro.bootstrap();
try (InputStream is = new FileInputStream("/home/user/test.war")){
instance.deploy("test", is);
}
catch (IOException ex){
Logger.getLogger(EmbeddedPayara.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
deploy(String name, String contextRoot, InputStream is)
This method works in the same way as the previous one, but allows you to specify the context root of the application at the same time. The following example would deploy the test
application to a context root of /app
:
import fish.payara.micro.PayaraMicro;
import fish.payara.micro.BootstrapException;
import fish.payara.micro.PayaraMicroRuntime;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
public class EmbeddedPayara{
public static void main(String[] args) throws BootstrapException{
PayaraMicroRuntime instance = PayaraMicro.bootstrap();
try (InputStream is = new FileInputStream("/home/user/test.war")){
instance.deploy("test", "app", is);
}
catch (IOException ex){
Logger.getLogger(EmbeddedPayara.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Deploying an Application Programmatically from a Maven Repository
Payara Micro supports the deployment of an application’s artefact that is hosted in a Maven repository.
Deploying an Artefact Using Maven Coordinates
To deploy an application directly from a Maven repository, you will need to add a Maven GAV coordinate. This can be done using addDeployFromGAV()
method. This method accepts a comma separated string denoting a maven artefact’s groupId
, artifactId
, and version
attributes.
import fish.payara.micro.PayaraMicro;
import fish.payara.micro.BootstrapException;
public class EmbeddedPayara{
public static void main(String[] args) throws BootstrapException{
PayaraMicro.getInstance().addDeployFromGAV("fish.payara.testing,clusterjsp, 1.1").bootStrap();
}
}
Specifying Additional Maven Repositories
By default, Payara Micro will only search for artefacts in the Maven Central repository. If you wish to search additional repositories, you can add them to the list of repositories to search with the addRepoUrl()
method:
import fish.payara.micro.PayaraMicro;
import fish.payara.micro.BootstrapException;
public class EmbeddedPayara{
public static void main(String[] args) throws BootstrapException{
PayaraMicro.getInstance().addRepoUrl("https://nexus.payara.fish/repository/payara-artifacts");
PayaraMicro.getInstance().addDeployFromGAV("fish.payara.testing,clusterjsp,1.1").bootStrap();
}
}
To search through multiple additional repositories, you can simply call the addRepoUrl
method, and specify a comma-separated list of the URLs of each repository:
import fish.payara.micro.PayaraMicro;
import fish.payara.micro.BootstrapException;
public class EmbeddedPayara{
public static void main(String[] args) throws BootstrapException{
PayaraMicro micro = PayaraMicro.getInstance();
micro.addRepoUrl("https://nexus.payara.fish/repository/payara-artifacts", "https://maven.java.net/content/repositories/promoted/");
micro.addDeployFromGAV("fish.payara.testing,clusterjsp,1.1");
micro.bootStrap();
}
}
Deploying Multiple Applications from a Maven Repository
To deploy multiple applications hosted in a Maven repository, you must call the addDeployFromGAV
method for each application.For example, to deploy two applications:
import fish.payara.micro.PayaraMicro;
import fish.payara.micro.BootstrapException;
public class EmbeddedPayara{
public static void main(String[] args) throws BootstrapException{
PayaraMicro micro = PayaraMicro.getInstance();
micro.addDeployFromGAV("fish.payara.testing,clusterjsp,1.1");
micro.addDeployFromGAV("fish.payara.testing,demo,1.0");
micro.bootStrap();
}
}