

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.

# Implémentation d'activité
<a name="activityimpl"></a>

L'implémentation de l'interface `@Activities` permet d'implémenter les activités. AWS Flow Framework for Java utilise les instances d'implémentation d'activité configurées sur le travailleur pour traiter les tâches d'activité au moment de l'exécution. L'exécuteur recherche automatiquement l'implémentation de l'activité du type approprié. 

Vous pouvez utiliser des propriétés et des champs pour transmettre des ressources à des instances d'activité, par exemple à des connexions de base de données. Étant donné que l'objet d'implémentation de l'activité est accessible à partir de plusieurs threads, les ressources partagées doivent être sûres pour les threads. 

Notez que l'implémentation de l'activité n'accepte pas les paramètres de type `Promise<>` ou les objets de retour de ce type. En effet, l'implémentation de l'activité ne doit pas dépendre de la manière dont elle a été invoquée (de manière synchrone ou asynchrone). 

L'interface des activités ci-dessus peut être implémentée comme suit : 

```
public class MyActivitiesImpl implements MyActivities {

   @Override
   @ManualActivityCompletion
   public int activity1(){
      //implementation
   }

   @Override
   public void activity2(int foo){
     //implementation
   }
}
```

Un contexte local de thread est disponible pour l'implémentation de l'activité utilisable pour récupérer l'objet de tâche, l'objet convertisseur de données utilisé, etc. Le contexte actuel est accessible via `ActivityExecutionContextProvider.getActivityExecutionContext()`. Pour plus de détails, consultez la AWS SDK pour Java documentation `ActivityExecutionContext` et la section[Contexte d'exécution](executioncontext.md). 

## Finalisation manuelle des activités
<a name="activityimpl.complete"></a>

Dans l'exemple ci-dessus, l'annotation `@ManualActivityCompletion` est facultative. Elle est autorisée uniquement sur les méthodes qui implémentent une activité. Elle est utilisée pour configurer l'activité afin qu'elle ne se termine pas automatiquement lorsque la méthode d'activité est renvoyée. Cela peut être utile lorsque vous souhaitez effectuer l'activité de manière asynchrone, par exemple manuellement une fois qu'une action humaine est terminée.

Par défaut, l'infrastructure considère que l'activité est terminée lorsque votre méthode d'activité est renvoyée. Cela signifie que le responsable de l'activité signale l'achèvement des tâches d'activité à Amazon SWF et lui fournit les résultats (le cas échéant). Dans certains cas d'utilisation, vous ne souhaitez pas que la tâche d'activité soit marquée comme terminée lorsque la méthode d'activité est renvoyée. Cette approche est utile lorsque vous modélisez des tâches manuelles. Par exemple, la méthode d'activité peut envoyer un e-mail à une personne qui doit terminer un travail avant la fin de la tâche d'activité. Dans ces cas, vous pouvez annoter la méthode d'activité avec `@ManualActivityCompletion` pour indiquer à l'exécuteur d'activité qu'il ne doit pas terminer l'activité automatiquement. Pour effectuer l'activité manuellement, vous pouvez soit utiliser la méthode `ManualActivityCompletionClient` fournie dans le framework, soit utiliser la `RespondActivityTaskCompleted` méthode du client Java Amazon SWF fourni dans le SDK Amazon SWF. Pour plus de détails, consultez la AWS SDK pour Java documentation. 

Pour mettre fin à la tâche d'activité, vous devez fournir un jeton de tâche. Le jeton de tâche est utilisé par Amazon SWF pour identifier les tâches de manière unique. Vous pouvez accéder à ce jeton à partir de `ActivityExecutionContext` dans l'implémentation de votre activité. Vous devez transmettre ce jeton à la personne chargée de mettre fin à la tâche. Vous pouvez extraire le jeton de `ActivityExecutionContext` en appelant `ActivityExecutionContextProvider.getActivityExecutionContext().getTaskToken()`.

L'activité `getName` de l'exemple Hello World peut être implémentée pour envoyer un e-mail demandant à quelqu'un de proposer un message d'accueil :

```
@ManualActivityCompletion
@Override
public String getName() throws InterruptedException {
    ActivityExecutionContext executionContext
         = contextProvider.getActivityExecutionContext();
    String taskToken = executionContext.getTaskToken();
    sendEmail("abc@xyz.com",
         "Please provide a name for the greeting message and close task with token: " + taskToken);
    return "This will not be returned to the caller";
}
```

L'extrait de code suivant peut être utilisé pour fournir le message d'accueil et fermer la tâche en utilisant `ManualActivityCompletionClient`. Vous pouvez également faire échouer la tâche :

```
public class CompleteActivityTask {

    public void completeGetNameActivity(String taskToken) {

        AmazonSimpleWorkflow swfClient
           = new AmazonSimpleWorkflowClient(...); // use AWS access keys
        ManualActivityCompletionClientFactory manualCompletionClientFactory
           = new ManualActivityCompletionClientFactoryImpl(swfClient);
        ManualActivityCompletionClient manualCompletionClient
           = manualCompletionClientFactory.getClient(taskToken);
        String result = "Hello World!";
        manualCompletionClient.complete(result);
    }

    public void failGetNameActivity(String taskToken, Throwable failure) {
        AmazonSimpleWorkflow swfClient
           = new AmazonSimpleWorkflowClient(...); // use AWS access keys
        ManualActivityCompletionClientFactory manualCompletionClientFactory
           = new ManualActivityCompletionClientFactoryImpl(swfClient);
        ManualActivityCompletionClient manualCompletionClient
           = manualCompletionClientFactory.getClient(taskToken);
        manualCompletionClient.fail(failure);
    }
}
```