docs: @Trivial
      protected void activate(ComponentContext context) throws Exception {
          Dictionary<String, ?> props = context.getProperties();
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
              Tr.debug(this, tc, "activate", props);
  
          resourceAdapterID = (String) props.get("id");
          contextProviders.activate(context);
          bvalRef.activate(context);
          tranInflowManagerRef.activate(context);
          tranSyncRegistryRef.activate(context);
          jcaSecurityContextRef.activate(context);
          componentContext = context;
          properties = props;
          raMetaData = resourceAdapterSvc.getResourceAdapterMetaData();
          myAppName = raMetaData != null ? raMetaData.getJ2EEName().getApplication() : null;
  
          Object svc = bvalRef.getService();
          if (svc != null) {
              // Isolate and dynamic load BeanValidationHelpImpl class to avoid javax.validation bundle dependency
              //  when beanValidation feature is not deployed.
              if (System.getSecurityManager() == null)
                  bvalHelper = (BeanValidationHelper) componentContext.getBundleContext().getBundle().loadClass("com.ibm.ws.jca.internal.BeanValidationHelperImpl").newInstance();
              else
                  bvalHelper = AccessController.doPrivileged(new PrivilegedExceptionAction<BeanValidationHelper>() {
                      @Override
                      public BeanValidationHelper run() throws IllegalAccessException, ClassNotFoundException, InstantiationException {
                          return (BeanValidationHelper) componentContext.getBundleContext().getBundle().loadClass("com.ibm.ws.jca.internal.BeanValidationHelperImpl").newInstance();
                      }
                  });
              bvalHelper.setBeanValidationSvc(svc);
          }
  
          resourceAdapter = configureResourceAdapter();
          if (resourceAdapter != null) {
              propagateThreadContext = !"(service.pid=com.ibm.ws.context.manager)".equals(properties.get("contextService.target"));
              workManager = new WorkManagerImpl(this);
  
              // Normally it's a bad practice to do this in activate. But here we have a requirement to keep the
              // reference count until some subsequent processing occurs after deactivate.
              contextSvc = Utils.priv.getService(componentContext, contextSvcRef);
  
              jcasu = new JcaServiceUtilities();
              raThreadContextDescriptor = captureRaThreadContext(contextSvc);
              raClassLoader = resourceAdapterSvc.getClassLoader();
              raClassLoader = raClassLoader == null ? null : classLoadingSvc.createThreadContextClassLoader(raClassLoader);
  
              ArrayList<ThreadContext> threadContext = startTask(raThreadContextDescriptor);
              try {
                  beginContext(raMetaData);
                  try {
                      ClassLoader previousClassLoader = jcasu.beginContextClassLoader(raClassLoader);
                      try {
                          resourceAdapter.start(this);
                      } finally {
                          jcasu.endContextClassLoader(raClassLoader, previousClassLoader);
                      }
                  } finally {
                      endContext(raMetaData);
                  }
              } finally {
                  stopTask(raThreadContextDescriptor, threadContext);
              }
          }
  
          latches.put(resourceAdapterID, latch); // only add latch if activate is successful
      }