code: @Override
      public boolean getSwappableListeners(short requestedListener) {
          short thisListenerFlag = getListenerFlag();
          boolean rc = false;
          // check session's listenrCnt to see if it has any of the type we want
          // input listener is either BINDING or ACTIVATION, so if the session has both, its a match
          if (thisListenerFlag == requestedListener || thisListenerFlag == HTTP_SESSION_BINDING_AND_ACTIVATION_LISTENER) {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                  Tr.debug(this, tc, "loading data because we have listener match for " + requestedListener);
  
              rc = true;
              if (!populatedAppData) {
                  try {
                      getSessions().getIStore().setThreadContext();
                      getMultiRowAppData();
                  } finally {
                      getSessions().getIStore().unsetThreadContext();
                  }
              }
          }
          return rc;
      }
docs: Copied from DatabaseSession.getSwappableListeners.
  Get the swappable listeners
  Called to load session attributes if the session contains Activation or Binding listeners
  Note, we always load ALL attributes here since we can't tell which are listeners until they
  are loaded.
  
  @see com.ibm.ws.session.store.common.BackedSession#getSwappableListeners(short)