

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Déploiement des applications Java
<a name="layers-java-deploy"></a>

**Important**  
Le AWS OpsWorks Stacks service a pris fin le 26 mai 2024 et a été désactivé tant pour les nouveaux clients que pour les clients existants. Nous recommandons vivement aux clients de migrer leurs charges de travail vers d'autres solutions dès que possible. Si vous avez des questions sur la migration, contactez l' AWS Support équipe sur [AWS Re:Post](https://repost.aws/) ou via le [AWS Support](https://aws.amazon.com/support) Premium.

Les rubriques suivantes décrivent comment déployer des applications sur les instances d'une couche Java App Server. Les exemples concernent des applications JSP, mais vous pouvez, pour l'essentiel, utiliser la même procédure pour installer d'autres types d'applications Java.

Vous pouvez déployer des pages JSP à partir de n'importe lequel des référentiels pris en charge. Si vous souhaitez déployer des fichiers WAR, notez que OpsWorks Stacks extrait automatiquement les fichiers WAR déployés depuis une archive Amazon S3 ou HTTP, mais pas depuis un dépôt Git ou Subversion. Si vous souhaitez utiliser Git ou Subversion pour les fichiers WAR, vous pouvez effectuer l'une des actions suivantes :
+ Stocker l'archive extraite dans le référentiel.
+ Stocker le fichier WAR dans le référentiel et utiliser un hook de déploiement Chef pour extraire l'archive, comme décrit dans l'exemple suivant.

Vous pouvez utiliser les raccordements de déploiement Chef pour exécuter les applications Ruby fournies par l'utilisateur sur une instance à n'importe laquelle des quatre étapes du déploiement. Le nom de l'application détermine l'étape. Voici un exemple d'application Ruby nommée `before_migrate.rb`, qui extrait un fichier WAR déployé à partir d'un référentiel Git ou Subversion. Comme le nom associe l'application au hook de déploiement Checkout, il s'exécute au début de l'opération de déploiement, une fois que le code a été vérifié, mais avant la migration. Pour plus d'informations sur l'utilisation de cet exemple, consultez [Utilisation des raccordements de déploiement Chef](workingcookbook-extend-hooks.md).

```
::Dir.glob(::File.join(release_path, '*.war')) do |archive_file|
  execute "unzip_#{archive_file}" do
    command "unzip #{archive_file}"
    cwd release_path
  end
end
```

**Note**  
Lorsque vous déployez une mise à jour sur une application JSP, il est possible que Tomcat ne reconnaisse pas la mise à jour et continue à exécuter la version d'application existante. Cela peut se produire, par exemple, si vous déployez votre application en tant que fichier .zip qui contient uniquement une page JSP. Afin de garantir que Tomcat exécute la version la plus récemment déployée, le répertoire racine du projet doit inclure un répertoire WEB-INF qui contient un fichier `web.xml`. Un fichier `web.xml` peut contenir une grande variété de contenus, mais ce qui suit est suffisant pour veiller à ce que Tomcat reconnaisse les mises à jour et exécute la version d'application actuellement déployée. Vous n'avez pas à changer la version pour chaque mise à jour. Tomcat reconnaît la mise à jour même si la version n'a pas changé.  

```
<context-param>
  <param-name>appVersion</param-name>
  <param-value>0.1</param-value>
</context-param>
```

**Topics**
+ [Déploiement d'une application JSP](#layers-java-deploy-jsp)
+ [Déploiement d'une application JSP avec une base de données principale](#layers-java-deploy-jsp-db)

## Déploiement d'une application JSP
<a name="layers-java-deploy-jsp"></a>

Pour déployer une application JSP, spécifiez le nom et le référentiel. Vous pouvez aussi, le cas échéant, spécifier des domaines et des paramètres SSL. Pour plus d'informations sur la création d'une application, consultez [Ajout d'applications](workingapps-creating.md). La procédure suivante explique comment créer et déployer une page JSP simple à partir d'une archive Amazon S3 publique. Pour plus d'informations sur l'utilisation d'autres types de référentiels, y compris les archives privées Amazon S3, consultez[Source de l'application](workingapps-creating.md#workingapps-creating-source).

L'exemple suivant montre la page JSP, qui affiche simplement quelques informations système.

```
<%@ page import="java.net.InetAddress" %>
<html>
<body>
<%
    java.util.Date date = new java.util.Date();
    InetAddress inetAddress = InetAddress.getLocalHost();
%>
The time is 
<%
    out.println( date );
    out.println("<br>Your server's hostname is "+inetAddress.getHostName());
%>
<br>
</body>
</html>
```

**Note**  
La procédure suivante suppose que vous maîtrisiez déjà les bases de la création de piles, d'ajout d'instances aux couches, et ainsi de suite. Si vous utilisez OpsWorks Stacks pour la première fois, vous devriez d'abord voir[Mise en route des piles Linux Chef 11](gettingstarted.md).

**Pour déployer une page JSP à partir d'une archive Amazon S3**

1. [Créez une pile](workingstacks-creating.md) avec une couche Java App Server, [ajoutez une instance 24 h/24](workinginstances-add.md) et 7 j/7 à la couche et [démarrez-la](workinginstances-starting.md). 

1. Copiez le code dans un fichier nommé `simplejsp.jsp`, placez le fichier dans un dossier nommé `simplejsp` et créez une archive `.zip` du dossier. Les noms sont arbitraires ; vous pouvez utiliser n'importe quels noms de fichier ou de dossier de votre choix. Vous pouvez aussi utiliser d'autres types d'archive, y compris gzip, bzip2, tarball ou Java WAR. Notez que OpsWorks Stacks ne prend pas en charge les archives non compressées. Pour déployer plusieurs pages JSP, incluez-les dans la même archive.

1. Téléchargez l'archive dans un compartiment Amazon S3 et rendez le fichier public. Copiez l'URL du fichier pour une utilisation ultérieure. Pour plus d'informations sur la création de compartiments et le chargement des fichiers, consultez [Mise en route avec Amazon Simple Storage Service](https://docs.aws.amazon.com/AmazonS3/latest/gsg/GetStartedWithS3.html).

1. [Ajoutez une application](workingapps-creating.md#workingapps-creating-general) à la pile et spécifiez les paramètres suivants :
   + **Nom** – `SimpleJSP`
   + **Type d'application** — `Java`
   + **Type de référentiel** — `Http Archive`
   + **URL du référentiel** : URL Amazon S3 de votre fichier d'archive.

   Utilisez les valeurs par défaut pour les paramètres restants, puis cliquez sur **Ajouter une application** pour créer l'application.

1. [Déployez l'application](workingapps-deploying.md) sur l'instance Java App Server.

Vous pouvez désormais accéder à l'URL de l'application et afficher l'application. Si vous n'avez pas spécifié de domaine, vous pouvez créer une URL en utilisant l'adresse IP publique de l'instance ou son nom DNS public. Pour obtenir l'adresse IP publique ou le nom DNS public d'une instance, accédez à la console OpsWorks Stacks et cliquez sur le nom de l'instance sur la page **Instances** pour ouvrir sa page de détails. 

Le reste de l'URL dépend du nom abrégé de l'application, qui est un nom en minuscules généré par OpsWorks Stacks à partir du nom de l'application que vous avez spécifié lors de sa création. Par exemple, le nom court de SimpleJSP est simplejsp. Vous pouvez obtenir le nom court d'une application à partir de la page des détails. 
+ Si le nom court est `root`, vous pouvez utiliser `http://public_DNS/appname.jsp` ou `http://public_IP/appname.jsp`.
+ Sinon, vous pouvez utiliser `http://public_DNS/app_shortname/appname.jsp` ou `http://public_IP/app_shortname/appname.jsp`. 

Si vous avez spécifié un domaine pour l'application, l'URL est `http://domain/appname.jsp`.

L'URL de l'exemple doit ressembler à quelque chose comme `http://192.0.2.0/simplejsp/simplejsp.jsp`.

Si vous souhaitez déployer plusieurs applications sur la même instance, vous ne devez pas utiliser `root` comme nom court. Il peut s'ensuivre des conflits d'URL qui empêchent que l'application ne fonctionne correctement. Au lieu de cela, attribuez un nom de domaine différent à chaque application.

## Déploiement d'une application JSP avec une base de données principale
<a name="layers-java-deploy-jsp-db"></a>

Les pages JSP peuvent utiliser un objet JDBC `DataSource` pour se connecter à une base de données principale. Vous créez et déployez une telle application à l'aide de la procédure de la section précédente, avec une étape supplémentaire pour configurer la connexion.

La page JSP suivante montre comment se connecter à un objet `DataSource`.

```
<html>
  <head>
    <title>DB Access</title>
  </head>
  <body>
    <%@ page language="java" import="java.sql.*,javax.naming.*,javax.sql.*" %>
    <%
      StringBuffer output = new StringBuffer();
      DataSource ds = null;
      Connection con = null;
      Statement stmt = null;
      ResultSet rs = null;
      try {
        Context initCtx = new InitialContext();
        ds = (DataSource) initCtx.lookup("java:comp/env/jdbc/mydb");
        con = ds.getConnection();
        output.append("Databases found:<br>");
        stmt = con.createStatement();
        rs = stmt.executeQuery("show databases");
        while (rs.next()) {
          output.append(rs.getString(1));
          output.append("<br>");
        }
      }
      catch (Exception e) {
        output.append("Exception: ");
        output.append(e.getMessage());
        output.append("<br>");
      }
      finally {
        try {
          if (rs != null) {
            rs.close();
          }
          if (stmt != null) {
            stmt.close();
          }
          if (con != null) {
            con.close();
          }
        }
        catch (Exception e) {
          output.append("Exception (during close of connection): ");
          output.append(e.getMessage());
          output.append("<br>");
        }
      }
    %>
    <%= output.toString() %>
  </body>
</html>
```

OpsWorks Stacks crée et initialise l'`DataSource`objet, le lie à un nom logique et enregistre le nom auprès d'un service de dénomination Java Naming and Directory Interface (JNDI). Le nom logique complet est `java:comp/env/user-assigned-name`. Vous devez spécifier la partie du nom assignée par l'utilisateur en ajoutant des attributs personnalisés JSON aux attributs de configuration et de déploiement de la pile pour définir l'attribut `['opsworks_java']['datasources']`, comme décrit dans ce qui suit. 

**Pour déployer une page JSP qui se connecte à une base de données MySQL**

1. [Créez une pile](workingstacks-creating.md) avec une couche Java App Server, [ajoutez des instances 24 h/24 et 7 j/7](workinginstances-add.md) à chaque couche, puis [démarrez-la](workinginstances-starting.md). 

1. Ajoutez une couche base de données à la pile. Les détails dépendent de la base de données que vous utilisez.

   Pour utiliser une instance MySQL dans cet exemple, [ajoutez une couche MySQL](workinglayers-db-mysql.md) à la pile, [ajoutez une instance 24 h/24 et 7 j/7](workinginstances-add.md) à la couche et [démarrez-la](workinginstances-starting.md#workinginstances-starting-start).

   Pour utiliser une instance Amazon RDS (MySQL) dans l'exemple, procédez comme suit :
   + Spécifiez un moteur de base de données MySQL pour l'instance.
   + Attribuez les **groupes de sécurité AWS- OpsWorks -DB-Master-Server () *security\$1group\$1id* et **AWS- OpsWorks -Java-App-Server**** () à l'instance. *security\$1group\$1id* OpsWorks Stacks crée ces groupes de sécurité pour vous lorsque vous créez votre première pile dans la région.
   + Créez une base de données nommée `simplejspdb`.
   + Assurez-vous que le nom et le mot de passe de l'utilisateur principal ne contiennent pas le caractère `&` ou autres caractères susceptibles d'entraîner une erreur Tomcat.

     En particulier, au moment du démarrage Tomcat doit analyser le fichier de contexte d'application web, lequel est un fichier XML incluant le nom d'utilisateur principal et le mot de passe principal. Si l'une ou l'autre des chaînes inclut un caractère `&`, l'analyseur XML le traite comme une entité XML mal formée et lève une exception d'analyse, ce qui empêche le démarrage de Tomcat. Pour plus d'informations sur le fichier de contexte d'application web, consultez [tomcat::context](create-custom-configure.md#create-custom-configure-context).
   + [Ajoutez un pilote MySQL](workingapps-connectdb.md) à la couche Java App Server.
   + [Enregistrez l'instance RDS](workinglayers-db-rds.md#workinglayers-db-rds-register) auprès de votre pile. 

   Pour plus d'informations sur l'utilisation des instances Amazon RDS avec OpsWorks Stacks, consultez. [Couche de service Amazon RDS](workinglayers-db-rds.md)

1. Copiez l'exemple de code dans un fichier nommé `simplejspdb.jsp`, placez le fichier dans un dossier nommé `simplejspdb` et créez une archive `.zip` du dossier. Les noms sont arbitraires ; vous pouvez utiliser n'importe quels noms de fichier ou de dossier de votre choix. Vous pouvez également utiliser d'autres types d'archives, y compris gzip, bzip2 et tarball. Pour déployer plusieurs pages JSP, incluez-les dans la même archive. Pour plus d'informations sur le déploiement d'applications à partir d'autres types de référentiel, consultez [Source de l'application](workingapps-creating.md#workingapps-creating-source).

1. Téléchargez l'archive dans un compartiment Amazon S3 et rendez le fichier public. Copiez l'URL du fichier pour une utilisation ultérieure. Pour plus d'informations sur la création de compartiments et le chargement des fichiers, consultez [Mise en route avec Amazon Simple Storage Service](https://docs.aws.amazon.com/AmazonS3/latest/gsg/GetStartedWithS3.html).

1. [Ajoutez une application](workingapps-creating.md#workingapps-creating-general) à la pile et spécifiez les paramètres suivants :
   + **Nom** – `SimpleJSPDB`
   + **Type d'application** — `Java`
   + **Type de source de données** — **OpsWorks**(pour une instance MySQL) ou **RDS** (pour une instance Amazon RDS).
   + **Instance de base** **de données — L'instance MySQL que vous avez créée précédemment, généralement nommée **db-master1 (mysql)**, ou l'instance Amazon RDS, qui sera nommée *DB\$1instance\$1name* (mysql).**
   + **Nom de la base de données** —`simplejspdb`.
   + **Type de référentiel** — `Http Archive`
   + **URL du référentiel** : URL Amazon S3 de votre fichier d'archive.

   Utilisez les valeurs par défaut pour les paramètres restants, puis cliquez sur **Ajouter une application** pour créer l'application.

1. Ajoutez les attributs suivants du JSON personnalisé aux attributs de configuration de la pile, où simplejspdb correspond au nom court de l'application.

   ```
   {
     "opsworks_java": {
       "datasources": {
         "simplejspdb": "jdbc/mydb" 
       }
     }
   }
   ```

   OpsWorks Stacks utilise ce mappage pour générer un fichier de contexte contenant les informations de base de données nécessaires.

   Pour plus d'informations sur l'ajout d'attributs de JSON personnalisé aux attributs de configuration de la pile, consultez [Utilisation du JSON personnalisé](workingstacks-json.md).

1. [Déployez l'application](workingapps-deploying.md) sur l'instance Java App Server.

Vous pouvez désormais utiliser l'URL de l'application pour afficher l'application elle-même. Pour une description de la construction de l'URL, consultez [Déploiement d'une application JSP](#layers-java-deploy-jsp). 

L'URL de l'exemple doit ressembler à quelque chose comme `http://192.0.2.0/simplejspdb/simplejspdb.jsp`.

**Note**  
L'attribut `datasources` peut contenir plusieurs attributs. Chaque attribut est nommé avec un nom court d'application et défini avec la partie appropriée, assignée par l'utilisateur, d'un nom logique. Si vous avez plusieurs applications, vous pouvez utiliser des noms logiques distincts, ce qui nécessite un JSON personnalisé tel que celui qui suit.  

```
{
  "opsworks_java": {
    "datasources": {
      "myjavaapp": "jdbc/myappdb",
      "simplejsp": "jdbc/myjspdb",
      ...
    }
  }
}
```