1. Introduction

1.1. Project/Component Working Name:

Deployment

1.2. Name(s) and e-mail address of Document Author(s)/Supplier:

Hong Zhang : hong.hz.zhang@oracle.com
Tim Quinn : tim.quinn@oracle.com

1.3. Date of This Document:

04/25/2011

2. Project Summary

2.1. Project Description:

  • PaaS deployment, support deployment in the cloud environment
  • User-managed cluster deployment support, support deployment on user-managed clusters.

2.2. Risks and Assumptions:

The end-to-end PaaS deployment feature depends on the service orchestration. Any delay in the delivery of the depended features will affect the delivery of the end-to-end PaaS deployment feature.

The user-managed cluster deployment feature depends on the admin infrastructure for user-managed cluster management. Any delay in the delivery of the depended features will affect the delivery of the user-managed cluster deployment feature.

3. Problem Summary

3.1. Problem Area:

PaaS deployment

User should be able to deploy applications in a cloud environment, specifying additional cloud metadata or using the default. The requested services (virtual cluster, JDBC resource etc) should be provisioned to the application as part of the deployment.

User-managed cluster deployment

User should be able to deploy the applications to user-managed cluster.

3.2. Justification:

PaaS deployment

We need to catch up with the industry trend of providing functionalities in the cloud environment.

User-managed cluster deployment

User-managed cluster allows integration of GlassFish clustering features with other products, and we need to provide deployment functionality in that environment.

4. Technical Description:

4.1. Details:

PaaS deployment

We will support deployment in the cloud environment. User should be able to deploy applications in a cloud environment, specifying additional cloud metadata or using the default. The requested services (virtual cluster, JDBC resource etc) should be provisioned to the application as part of the deployment.

Deployment will know if it is in a cloud environment by detecting the presence of virtualization configuration.

In a non-cloud environment, Deployment behaves as in 3.1. If the user omits the --target option then deployment uses the default "server" value. If the user specifies the target then the target must already exist and that target will be used.

In a cloud environment, we preserve most of the above behavior with one exception: for initial deployment, user could also specify a non-existent target name and a virtual cluster will be created for the user with that name. This allows us to support the cloud deployment with minimal changes to the existing user interfaces.

Users can add glassfish-services.xml to their applications to convey cloud-related metadata. This file /META-INF/glassfish-services.xml can appear in the main application archive (EAR, WAR, etc.). It can also appear at the top level (/glassfish-services.xml) in a deployment plan, consistent with the placement of other descriptors in the deployment plan. As with all files in a deployment plan, if the user provides the same file in the original archive and in the deployment plan, the one in the deployment plan overrides the one from the archive. Specifically the orchestrator's Sniffer and Deployer implementations will see only the deployment plan copy of glassfish-services.xml.

We will support the same set of operations to manipulate the application lifecycle in the cloud environment: deploy, redeploy, undeploy, enable, disable.

As the deploy command can be a long running command in the cloud environment, an --async option will be added to run the deploy command in the asynchronous mode.

Please see this page for more technical details.

User-managed cluster deployment

User-managed cluster allows the integration of GlassFish clustering features with other products, and we need to provide deployment functionality in this environment.
Please see the User-Managed Clusters One Pager for details.

4.2. Bug/RFE Number(s):

PaaS deployment:

GLASSFISH-16423
GLASSFISH-16424
GLASSFISH-16425
GLASSFISH-16426
GLASSFISH-16427
GLASSFISH-16428

User-managed cluster deployment:

GLASSFISH-16445
GLASSFISH-16483
GLASSFISH-16484
GLASSFISH-16485

4.3. In Scope:

User-managed cluster deployment

Support the operations that are necessary for integration with other products.

4.4. Out of Scope:

4.5. Interfaces:

4.5.1 Public Interfaces

  • Interface: glassfish-services.xml
  • Comment: users can add /META-INF/glassfish-services.xml to their applications to convey cloud-related metadata. The files can appear in the main application archive (EAR, WAR, etc.). They can also appear at the top level /glassfish-services.xml) in a deployment plan, consistent with the placement of other descriptors in the deployment plan.
  • Interface: deploy
  • Comment: user could specify an non-existent target in the cloud environment, and a virtual cluster will be created with that target name for the user.
  • Interface: deploy
  • Comment: add an optional --async option to indicate whether this deployment will be asynchronous.

4.5.2 Private Interfaces

Private interface SmartSniffer will be added with an additional handles method which takes a DeploymentContext argument. Orchestrator sniffer implementation will implement this additional interface so it could find out about the value of the target option from the DeploymentContext to decide if it should return true.
This new interface needs to be added as we could not change the public Sniffer interface in the dot release. This will be cleaned up (interface removed and API moved to public Sniffer interface) in v4.

@Contract
public interface SmartSniffer {

    /**
     * Returns true if the passed file or directory is recognized by this
     * smart sniffer.
     * @param context deployment context
     * @return true if the location is recognized by this sniffer
     */
    public boolean handles(DeploymentContext context);
}

4.5.3 Deprecated/Removed Interfaces:

N/A

4.6. Doc Impact:

Update man pages for the new/modified CLI commands

Application Deployment Guide/Developer Guide for new features

4.7. Admin/Config Impact:

CLI

The optional --async option is added to the deploy command to indicate whether this deployment will be asynchronous.

GUI

PaaS deployment would be exposed in the admin GUI (for equivalent of CLI functionalities).

4.8. HA Impact:

No impact.

4.9. I18N/L10N Impact:

No impact.

4.10. Packaging, Delivery & Upgrade:

4.10.1. Packaging

No impact.

4.10.2. Delivery

No impact.

4.10.3. Upgrade and Migration:

No impact.

4.11. Security Impact:

No impact.

4.12. Compatibility Impact

No compatibility impact.

No new requirement on upgrade or migration tool.

4.13. Dependencies:

4.13.1 Internal Dependencies

Service Orchestration

User-Managed Cluster Management

Admin Command Progress Status

4.13.2 External Dependencies

None

4.14. Testing Impact:

PaaS deployment

Add new tests to test this feature. The tests might live outside of the deployment dev tests and put together with other PaaS related tests to share the same test environment.

User-managed cluster deployment

Add new tests to test this feature. The tests might live outside of the deployment dev tests and put together with other user-managed cluster related tests to share the same test environment.

5. Reference Documents:

PaaS deployment Wiki Page
Service Orchestration One Pager
User-Managed Clusters One Pager
Admin Command Progress Status One Pager

6. Schedule:

6.1. Projected Availability:

PaaS deployment

  • Initially integrated (may not be feature complete) - Milestone 5
  • Feature complete (ready for handoff to QA) - Milestone 6
  • At production quality level - Milestone 7

User-managed cluster deployment

  • Initially integrated (may not be feature complete) - Milestone 5
  • Feature complete (ready for handoff to QA) - Milestone 6
  • At production quality level - Milestone 7