Skyve 7.0 Released

This release of Skyve finally upgrades the version of Java from 8 to 11. This required a lot of changes under the hood, particularly around content management, but moving past Java 8 brings performance, memory and security improvements to the entire Skyve platform.

Java 11

This was a major upgrade, but Skyve is now finally compatable with Java 11. Later JDK versions should also work, but the minimum supported version from Skyve 7 onwards will be Java 11.

This should be a seamless change for cloud projects using Foundry, but requires changes for local development (see Notes for Upgrading below).

New Content Manager

Prior to Skyve 7, Skyve shipped with a bundled Elastic Search implementation. This was becoming increasingly outdated, and the latest versions of Elastic no longer support being bundled and need to be installed stand-alone.

Skyve 7 now uses Apache Lucence as its default content manager. To reduce the size of Skyve applications and to reduce conflicts with shared libraries, this is now packed and installed as a Skyve addin (see Notes for Upgrading below).

The contentManagerClass setting inside your project json configuration file can be used to specify an alternate content manager.

Framework

  • Log when Util.i18n() would have thrown MissingResourceException.
  • Enable configuration of the add-in directory through the json config.
  • Add TextExtractor.sniffLanguage().
  • Sanitize the password reset token to prevent XSS.
  • Replace bundled Elastic Search with Lucene addin for default content management.
  • Fixed issue with scaffolded document factory where it was not including the fixture type.
  • Fixed issue with scaffolded document factory where it was not using the correct DataBuilder method.
  • Add a more descriptive error message when a ContentManager cannot be instantiated.
  • Use base href in device.xhtml.

Admin

  • Add DocumentNumber permission to admin.Anonymous role.
  • Fix DataMaintenance ContentModel to have a unique PK in its row set.
  • Exclude admin.User ResendActivation action from test generation.
  • Update DeleteBackup when external backups are enabled to check if the backup exists externally before trying to delete.

Notes for Upgrading

Warning: this is a major upgrade. Depending on the size of your existing application, it may be easier to use Foundry or Project Creator to create a new project and migrate your existing module(s) into the new project.

Note to Eclipse users:

Since Skyve 7 is now Java 11 compatible, you may need a new Eclipse or to download a new JDK. To build you updated Skyve project, you will need to update Eclipse's default installed JRE to a version of Java 11 or higher. This can be perfomed by going into Eclipse preferences -> Java -> Installed JREs and changing the default version.

Your Wildfly application server used for local development will also need to be told to use a version of Java 11 or higher. This can be changed by double clicking on your Wildfly in your Servers panel, and clicking the link for Runtime Environment and changing the Execution Environemnt or Alternate JRE to use Java 11 or higher.

Similar changes will need to be made if using IDEA or alternate IDE.

Make the following changes to your projects pom.xml:

  • Update Skyve version to 7.0.3
  • Change skyve-maven-plugin vesion to be ${skyve.version} instead of a version number, and the <dependencies> section of this plugin can be removed:
    <artifactId>skyve-maven-plugin</artifactId>
      <version>${skyve.version}</version>
  • Change maven-compiler-plugin version to 3.8.1 and the source and target version from 1.8 to 11
    <version>3.8.1</version>
        <configuration>
            <source>11</source>
            <target>11</target>
        </configuration>
  • Change the build-helper-maven plugin to 3.2.0
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>3.2.0</version>
  • Find the maven-dependency-plugin declared in your pom.xml, and replace the entire plugin with the new declaration below:
    <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>3.1.2</version>
          <executions>
              <execution>
                  <id>copy-content-addin-dependency</id>
                  <phase>compile</phase>
                  <goals>
                      <goal>copy</goal>
                  </goals>
                  <configuration>
                      <artifactItems>
                          <artifactItem>
                              <groupId>org.skyve</groupId>
                              <artifactId>skyve-content</artifactId>
                              <type>zip</type>
                              <version>${skyve.version}</version>
                              <outputDirectory>target</outputDirectory>
                              <destFileName>skyve-content.zip</destFileName>
                          </artifactItem>
                      </artifactItems>
                  </configuration>
              </execution>
          </executions>
      </plugin>
    The following dependency can be removed from the dependencies section of your pom.xml:
    <dependency>
          <groupId>com.atlassian.commonmark</groupId>
          <artifactId>commonmark</artifactId>
          <version>0.10.0</version>
      </dependency>
  • the h2, mysql and postgresql dockerfiles need to be updated as the ds.xml is no longer used
  • the ds.xml for h2, mysql and postgresql need to be removed
  • the .json for your database needs to be updated to include the content stanza in the docker directory
    // Add-ins settings
      addins: {
        // Where to look for add-ins - defaults to <content.directory>/addins/
        directory: "${SKYVE_ADDINS:null}"
      },
  • The old src/main/webapp/WEB-INF/spring/security.xml can be removed from the project, it is not longer used. Changes to your application security will now be made in code in the new SpringSecurityConfig class which is part of your project.
  • Compile your upgraded project, then take skyve-content.zip out of /target and drop into /content/addins/ folder for your application, or put it in a common location for all Skyve 7+ projects
  • Update your project json configuration file to include the addins stanza, if you leave it null it will look inside your project content/addins directory for skyve-content.zip, or you can specify an absolute path on your hard drive to a common location
    // Add-ins settings
      addins: {
        // Where to look for add-ins - defaults to <content.directory>/addins/
        directory: "${SKYVE_ADDINS:null}"
      },
    See the complete upgrade instructions on GitHub.