Пример #1
0
  /**
   * Try and automatically update, if automatic updating is enabled.
   *
   * @param forceUpdate
   * @return true if LWC was updated
   */
  public boolean tryAutoUpdate(boolean forceUpdate) {
    if (!forceUpdate) {
      // do we qualify for an automatic update?
      if (!shouldAutoUpdate()) {
        return false;
      }
    }

    // we shouldn't update if the current version is the same as the latest, or their build numbers
    // are equal
    Version current = LWCInfo.FULL_VERSION;
    if (current.equals(latestVersion)
        || (current.getBuildNumber() > 0
            && latestVersion.getBuildNumber() > 0
            && current.getBuildNumber() == latestVersion.getBuildNumber())) {
      return false;
    }

    logger.info(Colors.Red + "LWC update found!");

    // make sure all class files are loaded in our jar file before we overwrite it
    loadAllClasses();

    // update_site/version/LWC.jar
    UpdaterFile file = new UpdaterFile("plugins/LWC.jar", getLatestDownloadURL());

    // queue it
    fileQueue.offer(file);

    // immediately download
    downloadFiles();
    return true;
  }
  /**
   * Parse the persistence unit definitions based on persistence_2_0.xsd.
   *
   * @param reader
   * @return
   * @throws XMLStreamException
   */
  private static PersistenceUnitMetadata parsePU(XMLStreamReader reader, Version version)
      throws XMLStreamException {
    PersistenceUnitMetadata pu = new PersistenceUnitMetadataImpl();
    List<String> classes = new ArrayList<String>(1);
    List<String> jarfiles = new ArrayList<String>(1);
    List<String> mappingFiles = new ArrayList<String>(1);
    Properties properties = new Properties();

    // set defaults
    pu.setTransactionType(PersistenceUnitTransactionType.JTA);
    pu.setValidationMode(ValidationMode.AUTO);
    pu.setSharedCacheMode(SharedCacheMode.UNSPECIFIED);
    pu.setPersistenceProviderClassName(
        "org.hibernate.ejb.HibernatePersistence"); // TODO: move to domain.xml?
    if (version.equals(Version.JPA_1_0)) {
      pu.setPersistenceXMLSchemaVersion("1.0");
    } else {
      pu.setPersistenceXMLSchemaVersion("2.0");
    }

    final int count = reader.getAttributeCount();
    for (int i = 0; i < count; i++) {
      final String value = reader.getAttributeValue(i);
      if (traceEnabled) {
        JPA_LOGGER.tracef("parse persistence.xml: attribute value(%d) = %s", i, value);
      }
      final String attributeNamespace = reader.getAttributeNamespace(i);
      if (attributeNamespace != null && !attributeNamespace.isEmpty()) {
        continue;
      }
      final Attribute attribute = Attribute.forName(reader.getAttributeLocalName(i));
      switch (attribute) {
        case NAME:
          pu.setPersistenceUnitName(value);
          break;
        case TRANSACTIONTYPE:
          if (value.equalsIgnoreCase("RESOURCE_LOCAL"))
            pu.setTransactionType(PersistenceUnitTransactionType.RESOURCE_LOCAL);
          break;
        default:
          throw unexpectedAttribute(reader, i);
      }
    }

    // until the ending PERSISTENCEUNIT tag
    while (reader.hasNext() && reader.nextTag() != END_ELEMENT) {
      final Element element = Element.forName(reader.getLocalName());
      if (traceEnabled) {
        JPA_LOGGER.tracef("parse persistence.xml: element=%s", element.getLocalName());
      }
      switch (element) {
        case CLASS:
          classes.add(Util.resolveSystemProperty(reader.getElementText()));
          break;

        case DESCRIPTION:
          final String description = Util.resolveSystemProperty(reader.getElementText());
          break;

        case EXCLUDEUNLISTEDCLASSES:
          String text = Util.resolveSystemProperty(reader.getElementText());
          if (text == null || text.isEmpty()) {
            // the spec has examples where an empty
            // exclude-unlisted-classes element has the same
            // effect as setting it to true
            pu.setExcludeUnlistedClasses(true);
          } else {
            pu.setExcludeUnlistedClasses(Boolean.valueOf(text));
          }
          break;

        case JARFILE:
          String file = Util.resolveSystemProperty(reader.getElementText());
          jarfiles.add(file);
          break;

        case JTADATASOURCE:
          pu.setJtaDataSourceName(Util.resolveSystemProperty(reader.getElementText()));
          break;

        case NONJTADATASOURCE:
          pu.setNonJtaDataSourceName(Util.resolveSystemProperty(reader.getElementText()));
          break;

        case MAPPINGFILE:
          mappingFiles.add(Util.resolveSystemProperty(reader.getElementText()));
          break;

        case PROPERTIES:
          parseProperties(reader, properties);
          break;

        case PROVIDER:
          pu.setPersistenceProviderClassName(Util.resolveSystemProperty(reader.getElementText()));
          break;

        case SHAREDCACHEMODE:
          String cm = Util.resolveSystemProperty(reader.getElementText());
          pu.setSharedCacheMode(SharedCacheMode.valueOf(cm));
          break;

        case VALIDATIONMODE:
          String validationMode = Util.resolveSystemProperty(reader.getElementText());
          pu.setValidationMode(ValidationMode.valueOf(validationMode));
          break;

        default:
          throw unexpectedElement(reader);
      }
    }
    if (traceEnabled) {
      JPA_LOGGER.trace("parse persistence.xml: reached ending persistence-unit tag");
    }
    pu.setManagedClassNames(classes);
    pu.setJarFiles(jarfiles);
    pu.setMappingFiles(mappingFiles);
    pu.setProperties(properties);
    return pu;
  }