docs: private void initializeChunkArtifacts() {
          String sourceMethod = "initializeChunkArtifacts";
          if (logger.isLoggable(Level.FINE))
              logger.entering(sourceClass, sourceMethod);
  
          ItemReader itemReader = chunk.getReader();
          List<Property> itemReaderProps = itemReader.getProperties() == null ? null : itemReader.getProperties().getPropertyList();
          try {
              InjectionReferences injectionRef = new InjectionReferences(runtimeWorkUnitExecution.getWorkUnitJobContext(), runtimeStepExecution, itemReaderProps);
  
              readerProxy = ProxyFactory.createItemReaderProxy(itemReader.getRef(), injectionRef, runtimeStepExecution);
  
              if (logger.isLoggable(Level.FINE)) {
                  logger.fine("Created ItemReaderProxy for " + itemReader.getRef());
              }
          } catch (ArtifactValidationException e) {
              throw new BatchContainerServiceException("Cannot create the ItemReader [" + itemReader.getRef() + "]", e);
          }
  
          ItemProcessor itemProcessor = chunk.getProcessor();
          if (itemProcessor != null) {
              List<Property> itemProcessorProps = itemProcessor.getProperties() == null ? null : itemProcessor.getProperties().getPropertyList();
              try {
  
                  InjectionReferences injectionRef = new InjectionReferences(runtimeWorkUnitExecution.getWorkUnitJobContext(), runtimeStepExecution, itemProcessorProps);
  
                  processorProxy = ProxyFactory.createItemProcessorProxy(itemProcessor.getRef(), injectionRef, runtimeStepExecution);
                  if (logger.isLoggable(Level.FINE)) {
                      logger.fine("Created ItemProcessorProxy for " + itemProcessor.getRef());
                  }
              } catch (ArtifactValidationException e) {
                  throw new BatchContainerServiceException("Cannot create the ItemProcessor [" + itemProcessor.getRef() + "]", e);
              }
          }
  
          ItemWriter itemWriter = chunk.getWriter();
          List<Property> itemWriterProps = itemWriter.getProperties() == null ? null : itemWriter.getProperties().getPropertyList();
          try {
              InjectionReferences injectionRef = new InjectionReferences(runtimeWorkUnitExecution.getWorkUnitJobContext(), runtimeStepExecution, itemWriterProps);
  
              writerProxy = ProxyFactory.createItemWriterProxy(itemWriter.getRef(), injectionRef, runtimeStepExecution);
              if (logger.isLoggable(Level.FINE)) {
                  logger.fine("Created ItemWriterProxy for " + itemWriter.getRef());
              }
          } catch (ArtifactValidationException e) {
              throw new BatchContainerServiceException("Cannot create the ItemWriter [" + itemWriter.getRef() + "]", e);
          }
  
          InjectionReferences injectionRef = new InjectionReferences(runtimeWorkUnitExecution.getWorkUnitJobContext(), runtimeStepExecution, null);
  
          this.chunkListeners = runtimeWorkUnitExecution.getListenerFactory().getChunkListeners(getStep(), injectionRef, runtimeStepExecution);
          this.skipProcessListeners = runtimeWorkUnitExecution.getListenerFactory().getSkipProcessListeners(getStep(), injectionRef, runtimeStepExecution);
          this.skipReadListeners = runtimeWorkUnitExecution.getListenerFactory().getSkipReadListeners(getStep(), injectionRef, runtimeStepExecution);
          this.skipWriteListeners = runtimeWorkUnitExecution.getListenerFactory().getSkipWriteListeners(getStep(), injectionRef, runtimeStepExecution);
          this.retryProcessListeners = runtimeWorkUnitExecution.getListenerFactory().getRetryProcessListeners(getStep(), injectionRef, runtimeStepExecution);
          this.retryReadListeners = runtimeWorkUnitExecution.getListenerFactory().getRetryReadListeners(getStep(), injectionRef, runtimeStepExecution);
          this.retryWriteListeners = runtimeWorkUnitExecution.getListenerFactory().getRetryWriteListeners(getStep(), injectionRef, runtimeStepExecution);
          this.itemReadListeners = runtimeWorkUnitExecution.getListenerFactory().getItemReadListeners(getStep(), injectionRef, runtimeStepExecution);
          this.itemProcessListeners = runtimeWorkUnitExecution.getListenerFactory().getItemProcessListeners(getStep(), injectionRef, runtimeStepExecution);
          this.itemWriteListeners = runtimeWorkUnitExecution.getListenerFactory().getItemWriteListeners(getStep(), injectionRef, runtimeStepExecution);
  
          if (logger.isLoggable(Level.FINE)) {
              logger.fine("Setting contexts for chunk artifacts");
          }
  
          skipHandler = new SkipHandler(chunk, runtimeStepExecution);
          skipHandler.addSkipProcessListener(skipProcessListeners);
          skipHandler.addSkipReadListener(skipReadListeners);
          skipHandler.addSkipWriteListener(skipWriteListeners);
  
          retryHandler = new RetryHandler(chunk, runtimeStepExecution);
  
          retryHandler.addRetryProcessListener(retryProcessListeners);
          retryHandler.addRetryReadListener(retryReadListeners);
          retryHandler.addRetryWriteListener(retryWriteListeners);
  
          if (logger.isLoggable(Level.FINE))
              logger.exiting(sourceClass, sourceMethod);
      }