Skyve 4.1 released

This Skyve release adds a host of minor improvements across the framework such as query timeouts to prevent long running queries starving system resources. This release also adds several performance improvements and many bug fixes.

Admin

  • Session count and other configuration statuses added to System Dashboard

  • Review of Quick Import/Export layout and on-screen instructions

  • Fast import option (minimal logging) for Quick Import/Export

  • Review layout of Communication views

  • Add support for multiple email address list recipients in Communications

  • Update Data Maintenance edit view to reduce backup button widths so they don't overlap on lower screen resolutions

  • Add user agent header and device type to UserMonthlyHits

  • Rename "Refresh" tab in Data Maintenance to "Data Refresh" to avoid confusion

  • Add default query for DocumentNumber for sorting

  • Null handling of formatMessage for Communications

Framework

  • Set admin.User.passwordLastChanged to current date/time when creating the bootstrap user

  • Handle null values in SQLMetaDataUtil.populateUser()

  • Ensure password is never required on the public user

  • Fix arithmetic underflow calculating password expiry

  • Evict UserProxy bean if its been cached on admin.User save and delete

  • Trim unsecured URL prefixes in the router.xml and web.xml

  • Implement query timeout

  • Update SpringSecurityListener SQL statements to enable best performance

  • Reduce chances of database page locking in the database during post login processing

  • Added new date helper methods to Time/TimeUtil

  • Update AbstractH2TestDispose to re-create caches before each test and AbstractH2TestTruncate to evict all caches after each test

  • Add Decimal10DollarsAndCents converter

  • Fixed potential EmptyStackException triggered during persistence.delete if an exception was thrown before any elements were pushed onto the stack

  • Add extra information in query projected column number error messages

  • Add greaterThanOrEqual() and lessThanOrEqual() comparison methods to Decimal classes

  • Manufacture a filename for serving content from the Skyve REST Service if one does not exist

  • Only update ADM_SecurityUser in SpringSecurityListener.resetLoginFailure() if the database needs to be reset

  • Allow programmatic jobs to run when a Skyve instance has jobScheduler: false in its JSON

  • Do not add bizCustomer filter condition to meta-data and bizQL queries unless the Skyve installation is multi-tenant

PrimeFaces

  • Add refresh button for Backup list, fix column width on job schedules

  • Fix list grid filter binding when binding is an association

  • Add support for vertical radio buttons

  • Protect FacesView.selectGridRow() from NPEs

  • Use the Skyve context URL property instead of the current context from the web container to redirect when no security principal exists or faces view cannot be restored

SmartClient

  • Ensure all enum values display in the filter line for query columns in list grids with variant or dynamic domain values

  • Ensure the filterEditorType is set text for filter rows with variant or dynamic domain values

  • Fix list grid canZoom condition to take into account aggregate queries

  • Ensure that variant and dynamic domain values on a scalar attributes are not rendered as enums/combos in list grids

  • Add disabled condition name to payload for contentLink and contentImage widgets

NOTES FOR UPGRADING

To upgrade your Skyve project to this version, change the Skyve version in your pom.xml to 4.1.0 and change your skyve-maven-plugin version to 1.25.

Your project pom.xml’s repositories will need to be updated to remove the Jasper repository if it is present:

<repository>
  <id>Jasper</id>         
  <url>https://jaspersoft.artifactoryonline.com/jaspersoft/jr-ce-releases/</url>         
</repository>

and change the boundlessgeo url from https://repo.boundlessgeo.com/main to https://repo.osgeo.org/repository/release/.

The web.xml file will also need to be updated to add a new listener:

<listener>
    <listener-class>org.skyve.impl.web.SkyveSessionListener</listener-class>
</listener>

And your project's json configuration file will need to be updated. Replace

// Datastore definitions
dataStores: {
    // Skyve data store
    "skyve": {
        // JNDI name
        jndi: "java:/H2Demo", 
        // Dialect
            dialect: "org.skyve.impl.persistence.hibernate.dialect.H2SpatialDialect"
    }
},

with

// Datastore definitions
dataStores: {
    // Skyve data store
    "skyve": {
        // JNDI name
        jndi: "java:/H2Demo", 
        // Dialect
        dialect: "org.skyve.impl.persistence.hibernate.dialect.H2SpatialDialect",
        // Timeout for data store connections employed in general UI/forms processing - 0 indicates no timeout
        oltpConnectionTimeoutInSeconds: 30,
        // Timeout for data store connections employed when running jobs and background tasks - 0 indicates no timeout
        asyncConnectionTimeoutInSeconds: 300
    }
},

See the complete upgrade instructions on GitHub.