public InputSource resolveEntity(String publicId, String systemId)
     throws SAXException, IOException {
   // check for recognized ids
   if (((publicId != null) && RECOGNIZED_PUBLIC_ID.equals(publicId))
       || ((publicId == null) && (systemId != null) && RECOGNIZED_SYSTEM_ID.equals(systemId))) {
     // Substitute the dtd with the one from
     // com.sun.persistence.support.jdo.dtd, but only if the
     // publicId is equal to RECOGNIZED_PUBLIC_ID or there is no
     // publicID and the systemID is equal to RECOGNIZED_SYSTEM_ID.
     InputStream stream =
         (InputStream)
             AccessController.doPrivileged(
                 new PrivilegedAction() {
                   public Object run() {
                     return getClass()
                         .getClassLoader()
                         .getResourceAsStream("com/sun/persistence/support/jdo.dtd"); // NOI18N
                   }
                 });
     if (stream == null) {
       throw new RuntimeException(
           msg.msg(
               "EXC_MissingJDODTD", // NOI18N
               publicId,
               systemId));
     }
     return new InputSource(new InputStreamReader(stream));
   }
   return null;
 }
  /** {@inheritDoc} */
  @Override
  public void init(
      EjbBundleDescriptor ejbBundleDescriptor, EjbcContext ejbcContext, String bundlePathName)
      throws GeneratorException {
    logger.info(
        i18NHelper.msg(
            "MSG_JDOCodeGeneratorInit", // NOI18N
            JDOCodeGeneratorHelper.getModuleName(ejbBundleDescriptor)));

    this.ejbBundleDescriptor = ejbBundleDescriptor;
    if (ejbBundleDescriptor.containsCMPEntity()) {
      // do the pre EJB 3.0 related stuff here.
      super.init(ejbBundleDescriptor, ejbcContext, bundlePathName);
    }

    if (ejbBundleDescriptor.containsPersistenceEntity()) {
      // now do the EJB 3.0 specific task
      pjl = new PersistenceJarLoader();
      pjl.load(ejbBundleDescriptor);
    }
  }
  /** {@inheritDoc} */
  @Override
  public Collection cleanup() throws GeneratorException {
    logger.info(
        i18NHelper.msg(
            "MSG_JDOCodeGeneratorCleanup", // NOI18N
            JDOCodeGeneratorHelper.getModuleName(ejbBundleDescriptor)));

    Collection result = null;
    if (ejbBundleDescriptor.containsCMPEntity()) {
      // do the pre EJB 3.0 related stuff here.
      result = super.cleanup();
    }
    if (ejbBundleDescriptor.containsPersistenceEntity()) {
      // now do the EJB 3.0 specific task
      pjl.unload();
    }
    // we have nothing to return for 3.0 beans until we integrate
    // enhancer with deployment. So as per the contract,
    // we return an empty collection and not a null collection if
    // we have only 3.0 beans.
    return result == null ? Collections.emptyList() : result;
  }