Desarrollo de proxys contextuales

Use un gestor de trabajo como un ContextService (servicio contextual) para contextualizar la invocación de una interfaz.

Acerca de esta tarea

Los componentes de aplicación que necesiten que haya un contexto de hilo cuando se invocan los métodos de un objeto pueden usar un gestor de trabajo, que implementa javax.enterprise.concurrent.ContextService, para construir un proxy contextual del objeto. Cuando se crea el proxy contextual, se captura el contexto de hilos conforme a la configuración del gestor de trabajo. Cuando se invocan los métodos de interfaz en el proxy contextual, el contexto de hilos capturado se aplica antes de la invocación y se restaura después.

Procedimiento

  1. Defina una interfaz (o elija una interfaz existente que resulte adecuada) con los métodos que requieran un contexto de hilos.
    public interface AddressFinder {
        Address getAddress(Person p) throws Exception;
    }
  2. Proporcione una implementación de la interfaz:
    public class DatabaseAddressFinder implements AddressFinder {
        private final String resRefLookupName;
        public DatabaseAddressFinder(String resRefLookupName) {
            this.resRefLookupName = resRefLookupName;
        }
        public Address getAddress(Person p) throws Exception {
            // La búsqueda de referencias de recurso requiere el contexto de hilos del
            // componente de aplicación que define la referencia de recurso.
            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. Utilice un servicio de contexto para capturar el contexto del hilo actual y envolver una instancia con ese contexto:
    ContextService contextService = (ContextService) new InitialContext().lookup(
        "java:comp/DefaultContextService");
    AddressFinder addressFinder = contextService.createContextualProxy(
        new DatabaseAddressFinder("java:comp/env/jdbc/MyDataSourceRef"),
        AddressFinder.class);
  4. Desde otro hilo, utilice el proxy contextual para invocar métodos en el contexto del hilo original.
    Address miDireccion = addressFinder.getAddress(me);

Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tasb_cproxies
File name: tasb_cproxies.html