Développement de proxy contextuels

Utilisez un gestionnaire de travaux en tant que ContextService pour contextualiser l'appel d'une interface.

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.

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 {
            // La recherche de référence de ressource requiert le contexte d'unité d'exécution du
            // composant d'application qui définit la référence de ressource.
            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 :
    ContextService contextService = (ContextService) new InitialContext().lookup(
        "java:comp/DefaultContextService");
    AddressFinder addressFinder = contextService.createContextualProxy(
        new DatabaseAddressFinder("java:comp/env/jdbc/MyDataSourceRef"),
        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.
    Address myAddress = addressFinder.getAddress(me);

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_cproxies
Nom du fichier : tasb_cproxies.html