protected synchronized void initializeJar() {

      //Check to see if we are already initialized
      if(isInitialized()) return;

      //we can't initialize non-jar non-zip resources
      if(!isJar() && !isZip()) {
         initialized_flag = true;
         return;
      }

      try {
         File f = null;
         if(resourceURL.getProtocol().equals("file")){
            f = new File(resourceURL.getFile());
         }
         else {
            f = Boot.getCacheManager().getCachedFileForURL(resourceURL);
         }
         if(!f.exists()) {
            logger.log(Level.WARNING, "*** Resource file:"+f.toString()+" was not found!");
            return;
         }
         jarFile = new JarFile(f);
         
         jarEntryNames.clear();
         Enumeration<JarEntry> entries = jarFile.entries();
         while(entries.hasMoreElements()) {
            JarEntry entry = entries.nextElement();
            jarEntryNames.put(entry.getName(), entry);
         }

         manifest = jarFile.getManifest();
         if(manifest != null) {
            Attributes mainAttrs = manifest.getMainAttributes();
            if(mainAttrs != null) {
               defaultSpecTitle = mainAttrs.getValue("Specification-Title");
               defaultSpecVersion = mainAttrs.getValue("Specification-Version");
               defaultSpecVendor = mainAttrs.getValue("Specification-Vendor");
               defaultImplTitle = mainAttrs.getValue("Implementation-Title");
               defaultImplVersion = mainAttrs.getValue("Implementation-Version");
               defaultImplVendor = mainAttrs.getValue("Implementation-Vendor");
               defaultSealed = Boolean.valueOf(mainAttrs.getValue("Sealed")).booleanValue();         
            }
         }
      }
      catch(Exception ioExp) {
         logger.log(Level.SEVERE, ioExp.getMessage(), ioExp);
      }
      finally {
         initialized_flag = true;
      }
   }