Show Table of Contents
19.2. Copying Deployed Applications Between Standalone Servers
While EAP 6 server groups manage content centrally for all group members, standalone servers are on their own. JBoss ON can help as an intermediary to sync application content between separate server instances. The
addToCluster function has this as an option when joining a standalone server to a cluster. The copyDeployments function can copy deployments between any two standalone instances.
Invoking the function requires only the name of the source EAP 6 server (the one to copy the deployments from) and then the name of the target EAP 6 server (the one to copy the deployments to).
Assuming that you already know resource IDs of the two EAP 6 server resources, set the source and target resources. For example, in interactive mode:
[root@server bin]# ./rhq-cli.sh -u rhqadmin -p rhqadmin rhqadmin@localhost:7080$ var source = ProxyFactory.getResource(10381) rhqadmin@localhost:7080$ var target = ProxyFactory.getResource(10577) rhqadmin@localhost:7080$ copyDeployments(source, target)
The first part of the function gets the server resource IDs.
function copyDeployments(sourceAS7, targetAS7) {
if (typeof sourceAS7 == 'object') {
sourceAS7 = sourceAS7.id;
}
if (typeof targetAS7 == 'object') {
targetAS7 = targetAS7.id;
}
All of the deployed applications are listed as children of the source JBoss EAP 6 server. The
copyDeployments function retrieves each deployment by searching for all of the children of the server that are of a deployment resource type.
var deploymentResourceType = ResourceTypeManager.getResourceTypeByNameAndPlugin('Deployment', 'jboss-as-7');
var deploymentsCrit = new ResourceCriteria;
deploymentsCrit.addFilterParentResourceId(sourceAS7);
deploymentsCrit.addFilterResourceTypeId(deploymentResourceType.id);
var unlimitedPageControl = PageControl.unlimitedInstance;
var sourceDeployments = ResourceManager.findResourcesByCriteria(deploymentsCrit);
var iterator = sourceDeployments.iterator();
while (iterator.hasNext()) {
var deploymentResource = iterator.next();
//get a resource proxy for easy access to configurations, etc.
deploymentResource = ProxyFactory.getResource(deploymentResource.id);
println("Copying deployment " + deploymentResource.name);
Each discovered deployment is then copied over as a new child resource to the target server. These are content-backed resources, so they are exported and uploaded as content. The function also searches for and pulls in the content metadata and the content history, so that any important historical information about the deployment is also copied over.
var installedPackage = ContentManager.getBackingPackageForResource(deploymentResource.id);
var content = ContentManager.getPackageBytes(deploymentResource.id, installedPackage.id);
var runtimeName = deploymentResource.resourceConfiguration.getSimpleValue('runtime-name', deploymentResource.name);
var deploymentConfiguration = new Configuration;
deploymentConfiguration.put(new PropertySimple('runtimeName', runtimeName));
//so now we have both metadata and the data of the deployment, let's
//push a copy of it to the target server
var history = ResourceFactoryManager.createPackageBackedResource(targetAS7,
deploymentResourceType.id, deploymentResource.name,
deploymentResource.pluginConfiguration,
installedPackage.packageVersion.generalPackage.name,
installedPackage.packageVersion.version,
installedPackage.packageVersion.architecture.id,
deploymentConfiguration, content, null);
while (history.status.name() == 'IN_PROGRESS') {
java.lang.Thread.sleep(1000);
//the API for checking the create histories is kinda weird..
var histories = ResourceFactoryManager.findCreateChildResourceHistory(targetAS7, null, null, unlimitedPageControl);
var hit = histories.iterator();
var found = false;
while(hit.hasNext()) {
var h = hit.next();
if (h.id == history.id) {
history = h;
found = true;
break;
}
}
if (!found) {
throw "The history object for the deployment seems to have disappeared, this is very strange.";
}
}
println("Deployment finished with status: " + history.status.toString() +
(history.status.name() == 'SUCCESS' ? "." : (", error message: " + history.errorMessage + ".")));
}
}
Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.