This is documentation for the current major version Apprenda 7.
Documentation for older versions are also available.

Configuring an Application with the Deployment Manifest

The DeploymentManifest.xml file is included as part of an Apprenda Application archive, and allows Apprenda to discover and pre-configure some basic application setup required for deployment to the Platform.  All configuration is done when an archive is uploaded while the application version is in the Definition stage. In most cases, the Deployment Manifest can be used in lieu of configuring an application through the Developer Portal's UI.

Please note: utf-8 encoding is required for all persistence scripts, application and add-on manifests, CLI installer input files, and Apprenda mock files.

Schema Location

Configurable Settings

The following components can be configured with a Deployment Manifest:

Apprenda will use this information to automatically populate the corresponding portions of your application's definition in the Developer Portal. While doing this, Apprenda will not delete any existing definitions, nor will it synchronize new items with existing items.  It simply adds any new items that it finds in the configuration file to your application's definition.

For patched versions of an application,  the Deployment Manifest can be used to make constructive changes to the following:
  • Features (new Features can be added)
  • Securables (new Securables can be added)
  • Entitlement Definitions (additions and limited changes can be made; a definition copied from a previous version can be published)
  • Custom Properties (new Custom Properties can be added)
  • The inclusion of patching scripts  (for changes to MS SQL databases or Oracle schemas) with an archive used to patch an application 

Application Settings

Application Settings can be configured in the Deployment Manifest as follows:

Sample DeploymentManifest.xml for Application Settings

<?xml version="1.0" encoding="utf-8"?>
<appManifest xmlns="http://schemas.apprenda.com/DeploymentManifest"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://schemas.apprenda.com/DeploymentManifest http://apprenda.com/schemas/platform/7.0/DeploymentManifest.xsd"
             cloud="CloudNameHere">
             <!--Valid values for cloud: the name of a cloud that is part of your Apprenda installation; used to set cloud affinity on installs with multiple clouds-->

<!--Valid values for applicationServices level: "None", "Authentication", "Authorization", "Multitenancy"-->
<!--Valid values for enforceSSL, sessionReplication, stickySessions: "True", "False"-->
<!--Valid values for loadBalanderUrlConfiguration: "Preserve", "Redirect"-->
  <applicationServices level="Multitenancy" enforceSsl="True" sessionReplication="False" stickySessions="False" loadBalancerURLConfiguration="Preserve" />


<!--Valid values for presentation pipelineMode: "Classic", "Integrated"-->
<!--Valid values for presentation strategy: "CommingledAppRoot", "CommingledRootApp",-->
  <presentation pipelineMode="Integrated" 
                strategy="CommingledAppRoot" 
                customAuthenticationStylesheetUrl="http://myauth.com" 
                customApplicationUrl="http://mycustomapp.com/"
                customApplicationUrlCertificate="certificateFileName.pfx"/>

</appManifest>

Application Settings are configured for the initial version of an application. Any settings included in the Deployment Manifest for a patched version will be ignored. 

Application Service level (which is called the "User Access Model" in the Developer Portal) selected for an application will limit the choices available for other Application Settings. If the pipeline mode, presentation strategy or database strategy selected are incompatible with the Application Service level set in the Deployment Manifest, the archive upload will succeed but these values will be reconfigured to those that are acceptable for the selected Application Service level.

In addition, if the Application Service level specified violates any Platform-wide service limitations set by your Platform Administrator, the archive upload will fail.

If the specified cloud does not exist, the archive upload will succeed with a warning (but cloud affinity will not be set).

The Platform has the ability to run more than one instance of a .NET application's UI component on the same server. To deploy .NET UI components in this was, the application can't have session replication enabled.

Application-level presentation-related information (such as custom/vanity URL or presentation strategy) can be set under the "presentation" element even for applications that do not contain .NET UI components. You can also specify an Application Vanity URL certificate.  If the certificate file is specified, the "customApplicationUrl" must also be specified and the certificate must be placed in the application archive. Only Developers that have been granted the proper securable can upload a certificate file.

Java Components

System Properties and a default JRE for Java Web Application components in WAR (Web application Archive) format can be configured as indicated below.  It is also possible to specify command line arguments (runtime options), which will be added to CATALINA_OPTS on workload startup:

Sample DeploymentManifest.xml for Java Components

<?xml version="1.0" encoding="utf-8"?>
<appManifest xmlns="http://schemas.apprenda.com/DeploymentManifest"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://schemas.apprenda.com/DeploymentManifest http://apprenda.com/schemas/platform/7.0/DeploymentManifest.xsd">


    <wars>
        <war name="Apprenda.Taskr.War" javaVersion="Default JRE 1.6">
            <systemProperties>
                <property name="warProp1" value="the first war value"/>
                <property name="warProp2" value="the second war value"/>
            </systemProperties>
            <commandLineArguments>
                <argument name="-Xms1024m" />
                <argument name="-Xmx2048m" />
                <argument name="-XX:PermSize=64m" />
            </commandLineArguments>
        </war>  
    </wars>
    
</appManifest>

Java Hosting

You can specify a container type for Java Web Application components. While most Platform installations will support Tomcat 6 & Tomcat 7, your Platform Operator may configure support for JBoss or other Tomcat versions. The container type listed must exactly match the name of a container type that is supported for your Platform.

You can obtain a list of supported container names in the Developer Portal by viewing the available options in the Components>General>Deployment Container section of the Configuration tab for an application in the Definition stage that contains Java Web Application components. Your Platform Operator can also obtain a list for you from the Java Hosting page in the System Operations Center.

Log4j

The Platform also supports custom Log4j formatting for Java Web Application components. The conversion characters with their respective data types can be found at here. While the conversion characters are able to pull in specific fields, you are not limited to only conversion characters. You can make your own messages including or excluding conversion characters as you see fit.

If no custom format is specified, the default value is %-6r [%15.15t] %-5p %c - %m%n.

JMX Monitoring

JMX Monitoring can be initially enabled/disabled for Java Web Applications components through the "enableJMX" attribute if the Developer uploading the Application Archive has the Monitoring JMX Resources securable. Through the use of Monitoring Subscriptions, objects being monitored through JMX can be configured for each application component and at a specific refresh rate (in seconds).

 

Sample DeploymentManifest.xml for Java Components

 

<?xml version="1.0" encoding="utf-8"?>
<appManifest xmlns="http://schemas.apprenda.com/DeploymentManifest"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://schemas.apprenda.com/DeploymentManifest http://apprenda.com/schemas/platform/7.0/DeploymentManifest.xsd">


    <!--The value for containerType must exactly match the name of a container type supported by your Apprenda installation>
    <wars>
        <war name="Apprenda.Taskr.War" containerType="Tomcat 7" logMessageFormat="Your Custom Pattern Here --- [%p] - %m" enableJMX="True" >
             <monitoringSubscriptions>
                <monitoringSubscription updateInterval="10">
                    <properties>
                        <property name="jmx[&quot;com.apprenda.test:type=State&quot;, &quot;CountA&quot;]"/>
                        <property name="jmx[&quot;com.apprenda.test:type=State&quot;, &quot;CountB&quot;]"/>
                </monitoringSubscription>
                <monitoringSubscription updateInterval="25">
                   <properties>
                        <property name="jmx[&quot;com.apprenda.test:type=State&quot;, &quot;ValueC&quot;]"/>
                   </properties>
                </monitoringSubscriptions>
             </monitoringSubscriptions>
        </war>  
    </wars>
    
</appManifest>

Linux Services

The Linux Service application Deployment Manifest must reference the named artifact-specific sub-folder in the attribute:

Sample DeploymentManifest.xml for Linux Services

<?xml version="1.0" encoding="utf-8"?>
<appManifest xmlns="http://schemas.apprenda.com/DeploymentManifest"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://schemas.apprenda.com/DeploymentManifest http://apprenda.com/schemas/platform/7.0/DeploymentManifest.xsd" >

  <applicationServices level="None"/>
  <linuxServices>
      <service name="SimpleService">
        <environmentVariables>
          <variable name="test" value="Test Environment Variable" />
          <variable name="foo" value="$#APPLICATIONALIAS#$" />
        </environmentVariables>
        <commandLineArguments>
          <argument name="firstArg" />
          <argument name="secondArg" />
          <argument name="appAlias=$#APPLICATIONALIAS#$" />
        </commandLineArguments>
        <ports>
          <dynamicPort portName="HTTP" httpMapped="true" />
          <dynamicPort portName="OTHER" />
        </ports>
        <tokenReplacements>
          <tokenReplacement>
            <includePatterns>
              <include>**/*.strange</include>
            </includePatterns>
            <excludePatterns>
              <exclude>**/exclude*</exclude>
            </excludePatterns>
            <replacements>
              <replacement token="$#CUSTOMTOKEN#$" value="Replaced Token" />
            </replacements>
          </tokenReplacement>
        </tokenReplacements>	
      </service>
   </linuxServices>
  
</appManifest>

Kubernetes Components

When creating an Apprenda Archive for an application that contains a Kubernetes component you can optionally choose to include a Deployment Manifest that will define some configuration options. Note that the name attribute of the pod element must reference the named sub-folder in the pods directory of the archive. See more about including a Kubernetes component in an archive.

Sample DeploymentManifest.xml for Pods

<?xml version="1.0"?>
<appManifest xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.apprenda.com/DeploymentManifest http://apprenda.com/schemas/platform/7.0/DeploymentManifest.xsd" xmlns="http://schemas.apprenda.com/DeploymentManifest">
  <linuxServices />
  <pods>
    <pod name="k8scomp" throttlingPolicy="TestPolicy" instanceCount="3" scalingType="Manual">
      <customProperties>
        <customProperty name="PodProperty">
          <values>
            <propertyValue value="Value1" />
          </values>
        </customProperty>
      </customProperties>
    </pod>
  </pods>
</appManifest>

Custom Service Hosts for WCF Services

Apprenda also allows you to manually specify a custom service host type to use for each WCF service. Simply set the 'customServiceHostFullName' attribute equal to the full name (full namespace plus class name) of the service host type you wish to use for that service.  The custom service host implementation must reside in the same assembly as the service itself.

Manually specifying the custom service host to use allows you to have multiple service host implementations in the same assembly without trouble.  However, if a custom service host is specified in the Deployment Manifest but a corresponding service host class is not found in your assembly, then there will be an error when promoting your application.

Sample DeploymentManifest.xml for Custom Service Host Specification

<?xml version="1.0" encoding="utf-8"?>
<appManifest xmlns="http://schemas.apprenda.com/DeploymentManifest"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://schemas.apprenda.com/DeploymentManifest http://apprenda.com/schemas/platform/7.0/DeploymentManifest.xsd">
 
  <services>
      <service name="TimeCard.Service" customServiceHostFullName="TimeCard.Service.TimeCardServiceHost" />
  </services>

</appManifest> 

Windows Services

Any archive that includes one or more Windows Services must include a Deployment Manifest with the required windowsServices information as per the example below:

Sample DeploymentManifest.xml for Windows Services

<?xml version="1.0" encoding="utf-8"?>
<appManifest xmlns="http://schemas.apprenda.com/DeploymentManifest"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://schemas.apprenda.com/DeploymentManifest http://apprenda.com/schemas/platform/7.0/DeploymentManifest.xsd">


<!--Required: service name, nameOfExecutable-->
  <windowsServices>
    <service name="MyAwesomeApp.WindowsService" requires32Bit="false" nameOfExecutable="MyAwesomeApp.WindowsService.exe"/>
      <ports>
        <staticPort num="5555" />
        <staticPort num="5556" />
      </ports>
  </windowsServices> 

    
</appManifest>

If a Windows Service requires specific ports, those ports must be specified in the Deployment Manifest as "static" ports. The values allowed for the specified ports, as well as the maximum number of ports that can be specified for each Windows Service, are configured by your Platform Administrator; "ports" values that exceed these limits will result in a failed archive upload.

Please Note: Within an application archive, the name of each Windows service as specified in the name of its individual Windows service folder within the WinServices folder must match the service name specified in the Deployment Manifest included with the archive.  The name of the executable must also match that specified in the Deployment Manifest.

Require 32-bit for .NET Services and UIs

Apprenda allows you to indicates whether or nor your WCF/Windows service needs to run as a 32 bit process, and whether or not your .NET UI requires the IIS application pool to be configured for running as a 32 bit process. Omit this setting to use the default configuration (recommended).

Sample DeploymentManifest.xml for 32-bit Specification

<?xml version="1.0" encoding="utf-8"?>
<appManifest xmlns="http://schemas.apprenda.com/DeploymentManifest"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://schemas.apprenda.com/DeploymentManifest http://apprenda.com/schemas/platform/7.0/DeploymentManifest.xsd">

  <!--Configure a .NET UI--> 
  <presentation requires32Bit="true" /> 

  <!--Configure a Windows Service--> 
  <windowsServices>
    <service name="MyAwesomeApp.WindowsService" requires32Bit="true" nameOfExecutable="MyAwesomeApp.WindowsService.exe" ports="55555,55556" />
  </windowsServices> 

  <!--Configure WCF services--> 
  <services>
    <service name="MyAwesomeApp.Service" requires32Bit="true" />
    <service name="MyOtherAwesomeApp.Service" requires32Bit="true" />
  </services> 

</appManifest>

Data storage

The data deployment model and storage provider (MS SQL or Oracle) can be specified for your application as follows.  While the Platform will autodetect SQL scripts when MS SQL is specified and PLS scripts when Oracle is specified, if any other file format is used for the Application Provisioning or Tenant Provisioning scripts, the full file names with file extension must be included as indicated below.

Sample DeploymentManifest.xml for data storage

<?xml version="1.0" encoding="utf-8"?>
<appManifest xmlns="http://schemas.apprenda.com/DeploymentManifest"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://schemas.apprenda.com/DeploymentManifest http://apprenda.com/schemas/platform/7.0/DeploymentManifest.xsd">

<!--Valid values for persistence strategy: "IsolatedDB", "Commingled" ("Commingled" applies to mssql only)-->
<!--Valid values for persistence dbms: "mssql", "oracle11g", "oracle12c", "oracle" (equivalent to "oracle11g")-->
<!--Valid values for persistence providerContextEnabled (mssql only): "true", "false" -->
<!--The values for "application scriptPath" and "tenant scriptPath" must be relative to the Scripts folder in your archive.-->
  <persistence strategy="IsolatedDB" dbms="oracle"  providerContextEnabled="false" >
    <provisioning>
      <application scriptPath="ApplicationProvisioning_Script.sql" />
      <tenant scriptPath="TenantProvisioning_Script.sql" />
    </provisioning>
  </persistence>

</appManifest>

Provider Context utilization for guest applications is disabled by default (please see here for more information on Contexts).  To enable or disable Provider Context utilization for a specific guest app, set the providerContextEnabled setting in the Deployment Manifest to "true" or "false" (as exemplified in the above sample).

Shared Tables and Default Schema (for MS SQL Server only)

Shared database tables must be designated as such in the Deployment Manifest as per the example below.  A default schema can also be designated as per the example below. 

Sample DeploymentManifest.xml for Shared Tables and Default Schema

<?xml version="1.0" encoding="utf-8"?>
<appManifest xmlns="http://schemas.apprenda.com/DeploymentManifest"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://schemas.apprenda.com/DeploymentManifest http://apprenda.com/schemas/platform/7.0/DeploymentManifest.xsd">
 
  <applicationServices level="Multitenancy" />
  <presentation strategy="IsolatedAppTenantRoot" />

  <persistence strategy="IsolatedDB" defaultSchema="dbo">
    <tableOptions>
    <tableOption name="Tag" schema="dbo" option="AllTenants" />
    </tableOptions>
  </persistence>
     
</appManifest>

 

Token Replacement

Token replacements can be specified at the component level as follows:

Sample DeploymentManifest.xml for Token Replacements that Replaces Platform Defaults set through the Hosting.Linux.TokenFilePatterns setting

<?xml version="1.0" encoding="utf-8"?>
<appManifest xmlns="http://schemas.apprenda.com/DeploymentManifest"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://schemas.apprenda.com/DeploymentManifest http://apprenda.com/schemas/platform/7.0/DeploymentManifest.xsd">
 
 <wars>
  <war name="Apprenda.Taskr.War" javaVersion="Default JRE 1.6"> 
    <tokenReplacements replaceDefaultFileSearchPatterns="True">  
    <!-- replaceDefaultFileSearchPatterns = true means only look at the includedPatterns here.
     replaceDefaultFileSearchPatterns = (False or attribute does not exist) means that we look at the registry-defined file extensions to token switch as well as the included patterns below -->
      <tokenReplacement >
        <includePatterns>
          <include>**\*Copy.xml</include>
          <include>**\*.conf</include>
          <!-- File search patterns may include the following special characters: -->
                                             <!-- ? - matches any single character -->
                                             <!-- * - matches 0 or more characters -->
                                             <!-- ** - matches 0 or more subdirectories (ie **\bin\*.xml would match \test\bin\test.xml, \bin\test.xml and \test1\test2\bin\test.xml but not \test1\test2\test.xml) -->
        </includePatterns>
        <excludePatterns> <!-- ExcludePatterns should always override DefaultFileSearchPatterns and includePatterns -->
          <exclude>**\FileToExclude*.xml</exclude>
        </excludePatterns>
        <replacements> <!-- Apprenda platform tokens are always going to be replaced for the patterns explicitly defined in this tokenReplacement XML -->
                       <!-- Apprenda tokens are already replaced for the DefaultFileSearchPatterns defined in the registry -->
                       <!-- The explicitly replacement nodes specified below will only apply to the includedPatterns specified in this tokenReplacement XML. They will not apply to file patterns specified in the registry -->
          <replacement token="$#StaticReplace#$" value="replaced static" /> <!-- token defines an exact token to replace -->
          <replacement pattern="\$\#Pattern.*\#\$" value="replaced pattern" /> <!-- pattern defines a regular expression to replace -->
        </replacements>
      </tokenReplacement>
    </tokenReplacements>
  </war>
 </wars>
     
</appManifest>

 

Sample DeploymentManifest.xml for Token Replacements that Supplements Platform Defaults set through the Hosting.Windows.TokenFilePatterns setting

<?xml version="1.0" encoding="utf-8"?>
<appManifest xmlns="http://schemas.apprenda.com/DeploymentManifest"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://schemas.apprenda.com/DeploymentManifest http://apprenda.com/schemas/platform/7.0/DeploymentManifest.xsd">
 
 <presentation>
  <tokenReplacements replaceDefaultFileSearchPatterns="False">  
     <tokenReplacement>
       <includePatterns>
         <include>**\*.xml</include>
         <include>*\web.config</include>
       </includePatterns>
       <excludePatterns>
         <exclude>**\Apprenda.mock.xml</exclude>
       </excludePatterns>
       <replacements>
         <replacement token="@APP_NAME@" value="GuestBook" />
       </replacements>
     </tokenReplacement>
   </tokenReplacements>
  </presentation>
     
</appManifest>

 

Environment Variables

Environment Variables for WCF services, Linux Services, and Java Web Application components in WAR (Web application Archive) format can be configured as follows:

Sample DeploymentManifest.xml for Environment Variables

<?xml version="1.0" encoding="utf-8"?>
<appManifest xmlns="http://schemas.apprenda.com/DeploymentManifest"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://schemas.apprenda.com/DeploymentManifest http://apprenda.com/schemas/platform/7.0/DeploymentManifest.xsd">


    <wars>
        <war name="Apprenda.Taskr.War" javaVersion="Default JRE 1.6">
            <environmentVariables>
                <variable name="warVar1" value="war value 1"/>
                <variable name="warVar2" value="war value 2"/>
            </environmentVariables>
        </war>  
    </wars>
    
</appManifest>

 

Features

Features, which can be designated in applications with Authorization and higher, can be defined in the initial version of an application as indicated below.  The same notation can be used to add Features via a Deployment Manifest in patched versions, but these changes will be purely constructive (i.e., Features not included with a patch will not be automatically removed).

Sample DeploymentManifest.xml for Features

<?xml version="1.0" encoding="utf-8"?>
<appManifest xmlns="http://schemas.apprenda.com/DeploymentManifest"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://schemas.apprenda.com/DeploymentManifest http://apprenda.com/schemas/platform/7.0/DeploymentManifest.xsd">

  <features>
    <toggle name="Priority Management" />
    <limiter name="Number of Tasks" />
    <block name="E-mail Support" />	
    <boundary name="Attachment Size">
  </features>

    
</appManifest>

 

Securables

Securables, which can be designated in applications with Multi-tenancy and higher, can be defined in the initial version of an application as indicated below.  The same notation can be used to add Securables via a Deployment Manifest in patched versions, but these changes will be purely constructive (i.e., Securables not included with a patch will not be automatically removed).

Sample DeploymentManifest.xml for Securables

<?xml version="1.0" encoding="utf-8"?>
<appManifest xmlns="http://schemas.apprenda.com/DeploymentManifest"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://schemas.apprenda.com/DeploymentManifest http://apprenda.com/schemas/platform/7.0/DeploymentManifest.xsd">

  <executionSecurables>
    <securable name="Modify Tags" description="Grants permission to update and delete tags" />
    <securable name="Change Priority" description="Grants permission to change priority on tasks" />
    <securable name="Delete Tasks" description = "Grants permission to delete tasks" />
  </executionSecurables>
    
</appManifest>

 

Entitlement Definitions

Entitlement Definitions are required for applications with Authorization or Multi-tenancy. For patched versions of an application, it should be noted that only limited constructive changes can be made through a Deployment Manifest (i.e., adding new Components or plans, or updating refreshment intervals or Component quantities).  Removing Components or updating the names of plans and Components can only be done through the Additional Controls section of the Developer Portal.

Sample DeploymentManifest.xml for Entitlement Definitions

<?xml version="1.0" encoding="utf-8"?>
<appManifest xmlns="http://schemas.apprenda.com/DeploymentManifest"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://schemas.apprenda.com/DeploymentManifest http://apprenda.com/schemas/platform/7.0/DeploymentManifest.xsd">
 
  <applicationServices level="Multitenancy" />
  <presentation strategy="CommingledAppRoot" />
  <persistence strategy="IsolatedDB" />
 
  <features>
    <toggle name="Priority Management" />
    <limiter name="Number of Tasks" />
    <block name="E-mail Support" /> 
  </features>
 
  <entitlementDefinitions>
    <entitlementDefinition name="Standard" description="" isPublished="true" publicName="Name displayed to potential subscribers" publicDescription= "Description displayed to potential subscribers" >
      <userBasedEntitlements>
        <plans>
          <plan name="Basic User" planType="Periodic" description="A description" restrictionOnNumberOfSubscriptions="10" >
            <planModels>
              <planModel refreshInterval="every 7 days" />
            </planModels>
          </plan>
          <plan name="Deluxe User" planType="Periodic" description="A description" >
            <planModels>
              <planModel refreshInterval="every 1 year" />
            </planModels>
          </plan>
          <plan name="No Refreshment Plan" planType="Perpetual" description="A description" >
            <planModels>
              <planModel type="Perpetual" />
            </planModels>
          </plan>          
        </plans>
        <sections>
          <section>
            <components>
              <component displayName="Included Tasks" feature="Number of Tasks" description="The number of tasks that you can create.">
                <planItems>
                  <planItem plan="Basic User" inclusionStatus="Included">
                    <planItemDefinitions>
                      <planItemDefinition planModelRefreshInterval="every 7 days" quantity="5" />
                    </planItemDefinitions>
                  </planItem>
                  <planItem plan="Deluxe User" inclusionStatus="Included">
                    <planItemDefinitions>
                      <planItemDefinition planModelRefreshInterval="every 1 year" quantity="10" />
                    </planItemDefinitions>
                  </planItem>
                  <planItem plan="No Refreshment Plan" inclusionStatus="Included">
                    <planItemDefinitions>
                      <planItemDefinition planModelType="Perpetual" quantity="10" />
                    </planItemDefinitions>
                  </planItem>                  
                </planItems>
              </component>   
              <component displayName="Manage Priority" feature="Priority Management" isNew="true">
                <planItems>
                  <planItem plan="Deluxe User" inclusionStatus="Included">
                    <planItemDefinitions>
                      <planItemDefinition planModelRefreshInterval="every 1 year" />
                    </planItemDefinitions>
                  </planItem>
                </planItems>
              </component>
              <component displayName="E-mail Support" feature="E-mail Support" isHidden="false">
                <planItems>
                  <planItem plan="Basic User" inclusionStatus="Included">
                    <planItemDefinitions>
                      <planItemDefinition planModelRefreshInterval="every 7 days" blockLabel="E-mails" quantity="10" />
                    </planItemDefinitions>
                  </planItem>
                  <planItem plan="Deluxe User" inclusionStatus="Included">
                    <planItemDefinitions>
                      <planItemDefinition planModelRefreshInterval="every 1 year" blockLabel="E-mails" quantity="999" />
                    </planItemDefinitions>
                  </planItem>
                  <planItem plan="No Refreshment Plan" inclusionStatus="Included">
                    <planItemDefinitions>
                      <planItemDefinition planModelType="Perpetual" blockLabel="E-mails" quantity="20" />
                    </planItemDefinitions>
                  </planItem>                    
                </planItems>
              </component>
              <component displayName="Forum Access" isHidden="false">
                <planItems>
                  <planItem plan="Basic User" inclusionStatus="Included" footnote="*">
                    <planItemDefinitions>
                      <planItemDefinition planModelRefreshInterval="every 7 days" />
                    </planItemDefinitions>
                  </planItem>
                  <planItem plan="Deluxe User" inclusionStatus="Included" footnote="*">
                    <planItemDefinitions>
                      <planItemDefinition planModelRefreshInterval="every 1 year" />
                    </planItemDefinitions>
                  </planItem>
                  <planItem plan="No Refreshment Plan" inclusionStatus="Included">
                    <planItemDefinitions>
                      <planItemDefinition planModelType="Perpetual"  />
                    </planItemDefinitions>
                  </planItem>                    
                </planItems>
              </component>
            </components>
          </section>
        </sections>
        <footnotes>
          <footnote indicator="*" description="Available in North America Only." />
        </footnotes>
      </userBasedEntitlements>
    </entitlementDefinition>
  </entitlementDefinitions>
     
</appManifest>

 

Custom Properties

Custom Properties values can be assigned through a Deployment Manifest, either to an application as a whole, or to individual application components (.NET services, Windows Services, Java Web Applications, user interfaces, and databases).  Which values can be assigned, as well as whether an application or application component can be assigned values, depends upon the Apprenda Platform's existing Custom Property settings.  Prior knowledge of these settings is necessary for successful assignment of specific Custom Property values (for more information, please see this documentation).

Sample DeploymentManifest.xml for Custom Property Value Assignment

<?xml version="1.0" encoding="utf-8"?>
<appManifest xmlns="http://schemas.apprenda.com/DeploymentManifest"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://schemas.apprenda.com/DeploymentManifest http://apprenda.com/schemas/platform/7.0/DeploymentManifest.xsd" >


  <!--application level-->
  <customProperties>
    <customProperty name="CustomPropOne">
      <values>
        <propertyValue value="ValueA"/>
        <propertyValue value="ValueB"/>
      </values>
    </customProperty>
  </customProperties>
 
  <!--service level-->  
  <services>
    <service name="Taskr.Admin.Service">
      <customProperties>
        <customProperty name="CustomPropOne">
          <values>
        <propertyValue value="ValueA"/>
        <propertyValue value="ValueB"/>
          </values>
        </customProperty>
      </customProperties>
    </service>
  </services>
 
 <!--Windows Service level-->
  <windowsServices>
    <service name="Apprenda.Testing.WinService" nameOfExecutable="Apprenda.Test.WindowsService.exe">
      <customProperties>
        <customProperty name="CustomPropOne">
          <values>
        <propertyValue value="ValueA"/>
        <propertyValue value="ValueB"/>
          </values>
        </customProperty>
      </customProperties>
    </service>
  </windowsServices>
 
  <!--user interface level-->
  <presentation>
    <customProperties>
      <customProperty name="CustomPropOne">
        <values>
        <propertyValue value="ValueA"/>
        <propertyValue value="ValueB"/>
        </values>
      </customProperty>
    </customProperties>
  </presentation>
 
  <!--database level-->
  <persistence>
    <customProperties>
      <customProperty name="CustomPropOne">
        <values>
        <propertyValue value="ValueA"/>
        <propertyValue value="ValueB"/>
        </values>
      </customProperty>
    </customProperties>
  </persistence>
 
</appManifest>

Instance Scaling Settings

Depending on Platform configuration, one of three different instance scaling methods can be assigned through a Deployment Manifest to individual application components (WCF services, Windows Services, Java Web Applications, and .NET user interfaces).  The methods available include Manual, Automatic, and Scheduled scaling. If not explicitly set, Manual scaling is set by default with a value of instanceCount="1" for all component types except Windows Services (where instanceCount="0").

If Manual scaling is set, the Platform will maintain the exact specified number of instances set for that component.

If Automatic scaling is set, minimum and maximum instance counts must also be set for that component.

If Scheduled scaling is set, a weekly Scaling Schedule can also be included for that component.  For all time values included in a Scaling Schedule, use UTC format.

Sample DeploymentManifest.xml for Instance Scaling Settings

<?xml version="1.0" encoding="utf-8"?>
<appManifest xmlns="http://schemas.apprenda.com/DeploymentManifest"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://schemas.apprenda.com/DeploymentManifest http://apprenda.com/schemas/platform/7.0/DeploymentManifest.xsd" >

  <!--Manual scaling set-->
  <services>
    <service name="Taskr.Admin.Service" scalingType="Manual" instanceCount="3" />
  </services>
 
  <!--Automatic scaling set with minimum and maximum instance counts-->
  <windowsServices>
    <service name="Apprenda.Testing.WinService" nameOfExecutable="Apprenda.Test.WindowsService.exe" scalingType="Automatic" minimumInstanceCount="1" maximumInstanceCount="4" />
  </windowsServices>
 
  <!--Scheduled scaling-->
  <presentation strategy="CommingledAppRoot" scalingType="Scheduled" >
    <scalingSchedule>
      <scheduleEvent day="Monday" time="12:00:00Z" instanceCount="5" />
      <scheduleEvent day="Monday" time="21:00:00Z" instanceCount="2" />
      <scheduleEvent day="Tuesday" time="12:00:00Z" instanceCount="5" />
      <scheduleEvent day="Tuesday" time="21:00:00Z" instanceCount="2" />
      <scheduleEvent day="Wednesday" time="12:00:00Z" instanceCount="5" />
      <scheduleEvent day="Wednesday" time="21:00:00Z" instanceCount="2" />
      <scheduleEvent day="Thursday" time="12:00:00Z" instanceCount="5" />
      <scheduleEvent day="Thursday" time="21:00:00Z" instanceCount="2" />
      <scheduleEvent day="Friday" time="12:00:00Z" instanceCount="5" />
      <scheduleEvent day="Friday" time="21:00:00Z" instanceCount="1" />
    </scalingSchedule>
  </presentation>

</appManifest>

 

Resource Policy Assignment

If Resource Throttling is enabled on your Platform, you can assign specific Resource Policies to your application's components as follows:

Sample DeploymentManifest.xml for Resource Policy Assignment

<?xml version="1.0" encoding="utf-8"?>
<appManifest xmlns="http://schemas.apprenda.com/DeploymentManifest"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://schemas.apprenda.com/DeploymentManifest http://apprenda.com/schemas/platform/7.0/DeploymentManifest.xsd">
 
  <presentation throttlingPolicy="Test Compute Policy" strategy="CommingledAppRoot"  />
   
  <persistence defaultSchema="dbo" strategy="IsolatedDB" throttlingPolicy="Test Compute Policy" storageQuotaName="Test Storage Policy" storageQuotaBlockSize="2" />
  
  <services>
    <service name="Taskr.Admin.Service" throttlingPolicy="Test Compute Policy" />
    <service name="Taskr.Core.Service"  throttlingPolicy="Test Compute Policy" />
  </services>

  <windowsServices>
    <service name="MyWindowsService.WindowsService" requires32Bit="false" nameOfExecutable="MyWindowsService.WindowsService.exe" ports="55555,55556" throttlingPolicy="Test Compute Policy" />
  </windowsServices> 
     
</appManifest>

Please note: If an application is patched with an archive containing a Deployment Manifest that does not specify Resource Policy/Storage Quota assignments, the patched version's Policy/Quota assignments will be reset to the Platform defaults (if automatic policy assignment is enabled) or null (if auto-assignment is not enabled).

 

User Account Specification for Application Components

User credentials under which deployed instances of your application's components will run can be assigned through a Deployment Manifest to individual application components (.NET services, Windows Services, Java Web Applications, and user interfaces). 

Sample DeploymentManifest.xml for Credential Assignment for .NET service, Windows Service, and user interface components

<?xml version="1.0" encoding="utf-8"?>
<appManifest xmlns="http://schemas.apprenda.com/DeploymentManifest"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://schemas.apprenda.com/DeploymentManifest http://apprenda.com/schemas/platform/7.0/DeploymentManifest.xsd" >


  <services>
    <service name="Taskr.Admin.Service" domain="APPRENDA" userAccount="WCF Service User" password="password" />
  </services>
 
  <windowsServices>
    <service name="Apprenda.Testing.WinService" nameOfExecutable="Apprenda.Test.WindowsService.exe" domain="APPRENDA" userAccount="Windows Service User" password="password" />
  </windowsServices>
 
  <presentation domain="APPRENDA" userAccount="UI User" password="password" />

</appManifest>

 

Sample DeploymentManifest.xml for Credential Assignment for a Java Web Application component

<?xml version="1.0" encoding="utf-8"?>
<appManifest xmlns="http://schemas.apprenda.com/DeploymentManifest"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://schemas.apprenda.com/DeploymentManifest http://apprenda.com/schemas/platform/7.0/DeploymentManifest.xsd" >


    <wars>
        <war name="Apprenda.Taskr.War" userAccount="notroot" userToken="mytoken" />
    </wars>
 
</appManifest>

 

Event Log Overrides

Certain types of Event Log overrides can be set through a Deployment Manifest. Tenant and User based overrides cannot be configured this way and must be configured in the Developer Portal.

Sample DeploymentManifest.xml for Event Log Override Configuration

<?xml version="1.0" encoding="utf-8"?>
<appManifest xmlns="http://schemas.apprenda.com/DeploymentManifest"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://schemas.apprenda.com/DeploymentManifest http://apprenda.com/schemas/platform/7.0/DeploymentManifest.xsd" >

  <logOverrides>
    <logOverride type="Version" level="Warn">
      <recipients>
        <recipient email="test@apprenda.com" />
      </recipients>
    </logOverride>
    <logOverride type="Source" level="Debug" text="hello*">
      <recipients>
        <recipient email="test1@apprenda.com" />
      </recipients>
    </logOverride>
    <logOverride type="Version" level="Info" text="not valid"/>
  </logOverrides>
  
</appManifest>

 

Patching with a Deployment Manifest

Database patching scripts can be included in the Scripts folder within the Persistence folder in an application archive.  In order to take effect, they must be listed in the Deployment Manifest with the proper path and script type information as per the example below.  If more than one patching script is included, they must be listed in the order in which they should be executed. When patching an application that leverages Oracle 12c, rollback scripts must also be included in the archive and specified in the Deployment Manifest as described in the Working with Data section.

In addition, constructive changes can be made to Features, Securables, and Entitlement Definitions. If no changes from the previous version are required but it is necessary to publish an Entitlement Definition for a patched version (e.g., if patching were done via the ACS tool), this can be done as per the example below.

Sample DeploymentManifest.xml for DB Patching and Entitlement Definition Publication

<?xml version="1.0" encoding="utf-8"?>
<appManifest xmlns="http://schemas.apprenda.com/DeploymentManifest"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://schemas.apprenda.com/DeploymentManifest http://apprenda.com/schemas/platform/7.0/DeploymentManifest.xsd" >

<!--Valid values for persistencPatch type: "SchemaScript", "DataScript", "SharedSchemaScript" (mssql only), "SharedDataScript" (mssql only), "Binary" -->
  <persistencePatches>
    <persistencePatch path="\Persistence\Scripts\Schema\SchemaPatch.sql" type="SchemaScript"/>
    <persistencePatch path="\Persistence\Scripts\Data\DataPatch.sql" type="DataScript"/>
  </persistencePatches>
	
  <entitlementDefinitions>
    <entitlementDefinition name="Standard" isPublished="true" />
  </entitlementDefinitions>	
  
</appManifest>