Développement de proxy contextuels qui utilisent des propriétés d'exécution

Utilisez un gestionnaire de travaux en tant que ContextService pour contextualiser l'appel d'une interface et spécifiez des propriétés d'exécution pour contrôler le mode de capture du contexte d'unité d'exécution et son mode d'application à l'unité d'exécution.

Pourquoi et quand exécuter cette tâche

Les composants d'application qui requièrent la présence d'un contexte d'unité d'exécution lorsque les méthodes d'un objet sont appelées peuvent utiliser un gestionnaire de travaux, lequel implémente javax.enterprise.concurrent.ContextService, pour construire un proxy contextuel pour l'objet. Le contexte d'unité d'exécution est capturé en fonction des paramètres du gestionnaire de travaux, lorsque le proxy contextuel est créé. Lorsque les méthodes d'interface sont appelées sur le proxy contextuel, le contexte d'unité d'exécution précédemment capturé est appliqué avant l'appel et restauré ensuite.

Vous pouvez spécifier des propriétés d'exécution pour un proxy contextuel afin de contrôler le mode de capture et d'application du contexte d'unité d'exécution. Par exemple, les méthodes de proxy contextuel sont appelées avec n'importe quelle transaction qui figure déjà sur l'unité d'exécution suspendue, sauf si une propriété d'exécution est utilisée pour remplacer ce comportement.

Procédure

  1. Définissez une interface (ou sélectionnez une interface existante appropriée) avec les méthodes qui requièrent un contexte d'unité d'exécution.
    public interface AddressFinder {
        Address getAddress(Person p) throws Exception;
    }
  2. Fournissez l'implémentation de l'interface :
    public class DatabaseAddressFinder implements AddressFinder {
        private final String resRefLookupName;
        public DatabaseAddressFinder(String resRefLookupName) {
            this.resRefLookupName = resRefLookupName;
        }
        public Address getAddress(Person p) throws Exception {
            // Resource reference lookup requires the thread context of the
            // application component that defines the resource reference.
            DataSource ds = (DataSource) new InitialContext().lookup(
                resRefLookupName);
            Connection con = ds.getConnection();
            try {
                ResultSet r = con.createStatement().executeQuery(
                    "SELECT STREETADDR, CITY, STATE, ZIP " +
                    "FROM ADDRESSES WHERE PERSONID=" + p.id);
                if (r.next())
                    return new Address(r.getString(1), r.getString(2),
                        r.getString(3), r.getInt(4));
                else
                    return null;
            } finally {
                con.close();
            }
        }
    }
  3. Utilisez un service contextuel pour capturer un contexte à partir de l'unité d'exécution en cours et encapsulez une instance avec ce contexte tout en appliquant un ensemble de propriétés d'exécution :
    ContextService contextService = (ContextService) new InitialContext().lookup(
        "java:comp/DefaultContextService");
    Map<String, String> executionProperties =Collections.singletonMap(
        ManagedTask.TRANSACTION,
        ManagedTask.USE_TRANSACTION_OF_EXECUTION_THREAD)
    AddressFinder addressFinder = contextService.createContextualProxy(
        new DatabaseAddressFinder("java:comp/env/jdbc/MyDataSourceRef"),
        executionProperties,
        AddressFinder.class);
  4. A partir d'une autre unité d'exécution, utilisez le proxy contextuel pour appeler des méthodes dans le contexte de l'unité d'exécution d'origine.
    transaction.begin();
    try {
        Address myAddress = addressFinder.getAddress(me);
        updateShippingInfo(myAddress);
    } finally {
        transaction.commit();
    }

Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tasb_execprops_cproxies
Nom du fichier : tasb_execprops_cproxies.html