Kontextabhängige Proxys entwickeln

Verwenden Sie einen Arbeitsmanager als Kontextservice (ContextService), um den Aufruf einer Schnittstelle in einen Kontext zu bringen.

Informationen zu diesem Vorgang

Anwendungskomponenten, die voraussetzen, dass Threadkontext vorhanden ist, wenn Methoden eines Objekts aufgerufen werden, können einen Arbeitsmanager verwenden, der javax.enterprise.concurrent.ContextService implementiert, um einen kontextabhängigen Proxy für das Objekt zu erstellen. Der Threadkontext wird gemäß den Einstellungen des Arbeitsmanagers erfasst, wenn der kontextabhängige Proxy erstellt wird. Wenn Schnittstellenmethoden im kontextabhängigen Proxy aufgerufen werden, wird der zuvor erfasste Threadkontext vor dem Aufruf angewendet und anschließend wiederhergestellt.

Vorgehensweise

  1. Definieren Sie eine Schnittstelle mit den Methoden, die Threadkontext voraussetzen (oder wählen Sie eine passende vorhandene Schnittstelle aus).
    public interface AddressFinder {
        Address getAddress(Person p) throws Exception;
    }
  2. Stellen Sie eine Implementierung der Schnittstelle bereit:
    public class DatabaseAddressFinder implements AddressFinder {
        private final String resRefLookupName;
        public DatabaseAddressFinder(String resRefLookupName) {
            this.resRefLookupName = resRefLookupName;
        }
        public Address getAddress(Person p) throws Exception {
            // Voraussetzung für den Lookup der Ressourcenreferenz ist der Threadkontext
            // der Anwendungskomponente, die die Ressourcenreferenz definiert.
            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. Verwenden Sie einen Kontextservice, um Kontext aus dem aktuellen Thread zu erfassen, und schließen Sie eine Instanz in diesen Kontext ein, wenn Sie eine Gruppe Ausführungseigenschaften anwenden:
    ContextService contextService = (ContextService) new InitialContext().lookup(
        "java:comp/DefaultContextService");
    AddressFinder addressFinder = contextService.createContextualProxy(
        new DatabaseAddressFinder("java:comp/env/jdbc/MyDataSourceRef"),
        AddressFinder.class);
  4. Verwenden Sie in einem anderen Thread den kontextabhängigen Proxy, um Methoden im Kontext des ursprünglichen Threads aufzurufen.
    Address myAddress = addressFinder.getAddress(me);

Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tasb_cproxies
Dateiname:tasb_cproxies.html