JarReader getJarReader() {
    if (jarReader == null) {

      ClassFactoryContext cfc =
          (ClassFactoryContext) ContextService.getContextOrNull(ClassFactoryContext.CONTEXT_ID);

      jarReader = cfc.getJarReader();
    }
    return jarReader;
  }
  private String getClasspath() throws StandardException {

    ClassFactoryContext cfc =
        (ClassFactoryContext) ContextService.getContextOrNull(ClassFactoryContext.CONTEXT_ID);

    PersistentSet ps = cfc.getPersistentSet();

    String classpath = PropertyUtil.getServiceProperty(ps, Property.DATABASE_CLASSPATH);

    //
    // In per database mode we must always have a classpath. If we do not
    // yet have one we make one up.
    if (classpath == null) classpath = "";

    return classpath;
  }
  private boolean lockClassLoader(ShExQual qualifier) throws StandardException {

    if (lf == null) return false;

    ClassFactoryContext cfc =
        (ClassFactoryContext) ContextService.getContextOrNull(ClassFactoryContext.CONTEXT_ID);

    // This method can be called from outside of the database
    // engine, in which case tc will be null. In that case
    // we lock the class loader only for the duration of
    // the loadClass().
    CompatibilitySpace lockSpace = null;

    if (cfc != null) {
      lockSpace = cfc.getLockSpace();
    }
    if (lockSpace == null) lockSpace = compat;

    Object lockGroup = lockSpace.getOwner();

    lf.lockObject(lockSpace, lockGroup, classLoaderLock, qualifier, C_LockFactory.TIMED_WAIT);

    return (lockGroup == this);
  }