private DataAdapter<?> getAdapterInternal(final ByteArrayId adapterId) {
    // first try to get it from the job context
    DataAdapter<?> adapter = getDataAdapter(context, adapterId);
    if (adapter == null) {
      // then try to get it from the persistent store
      adapter = persistentAdapterStore.getAdapter(adapterId);
    }

    if (adapter != null) {
      adapterCache.put(adapterId, adapter);
    }
    return adapter;
  }
  @Override
  public CloseableIterator<DataAdapter<?>> getAdapters() {
    final CloseableIterator<DataAdapter<?>> it = persistentAdapterStore.getAdapters();
    // cache any results
    return new CloseableIteratorWrapper<DataAdapter<?>>(
        it,
        IteratorUtils.transformedIterator(
            it,
            new Transformer() {

              @Override
              public Object transform(final Object obj) {
                if (obj instanceof DataAdapter) {
                  adapterCache.put(((DataAdapter) obj).getAdapterId(), (DataAdapter) obj);
                }
                return obj;
              }
            }));
  }
 public void addAdapter(DataAdapter<?> adapter) {
   adapterCache.addAdapter(adapter);
 }