Skip to content

Releases: JeffersonLab/smoothness

v5.1.0

22 Jan 17:09

Choose a tag to compare

What's Changed

Full Changelog: v5.0.2...v5.1.0

v5.0.2

18 Sep 18:53

Choose a tag to compare

Full Changelog: v5.0.1...v5.0.2

Full Changelog: v5.0.1...v5.0.2

v5.0.1

11 Sep 15:31

Choose a tag to compare

What's Changed

Migration Note:

Search and replace http://java.sun.com/jsp/jstl/ with jakarta.tags.

Also, replaced smoothness URI http://jlab.org/smoothness with simply jlab.tags.smoothness to follow spirit of Jakarta tag URI change. Do a search and replace.

Finally, update your web.xml to indicate Servlet 6. Should look like:

<web-app version="6.0"
         xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd">

Full Changelog: v5.0.0...v5.0.1

v5.0.0

09 Sep 19:34

Choose a tag to compare

What's Changed

  • Build for Wildfly v37 (Jakarta EE 10) by @slominskir in #51
  • Bump org.apache.poi:poi-ooxml from 5.2.3 to 5.4.0 in the gradle group across 1 directory by @dependabot[bot] in #49

Migration Notes

This is a major backwards incompatible release in that the lib is jumping from Java EE 8 to Jakarta EE 10. In particular:

  1. Most javax.* classes are moved to package jakarta.*. Search and replace your source files.
  2. Update your build.gradle file to replace javax package dependencies with jakarta equivalents. See demo app build.gradle.
  3. Update your Dockerfile to use v2.2.0 of JeffersonLab/wildfly image.
  4. Remove <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle12cDialect"/> from src/main/resources/META-INF/persistence.xml

Full Changelog: v4.13.1...v5.0.0

v4.13.1

18 Aug 17:21

Choose a tag to compare

  • Bump Gradle to v9
  • Use JDK21 compiled to Java 17 bytecode
  • Use new Maven Central API as released in java-workflows v2.4.0

Full Changelog: v4.13.0...v4.13.1

v4.13.0

02 Jun 19:04

Choose a tag to compare

  • Improved Exception Handling
    • Don't log 400 Bad Request Stack Trace

Migration Notes

In web.xml replace:

    <error-page>
        <error-code>500</error-code>
        <location>/error</location>
    </error-page>
    <error-page>
        <error-code>404</error-code>
        <location>/error</location>
    </error-page>
    <error-page>
        <exception-type>java.lang.Throwable</exception-type>
        <location>/error</location>
    </error-page>

with:

    <error-page>
        <location>/error</location>
    </error-page>

Wrap URL Parameter Conversion/Validation with separate try/catch and send status 400 on error. On GET use:

      response.sendError(HttpServletResponse.SC_BAD_REQUEST);
      return;

On POST often returning JSON (avoid HTML Error page) so use:

      errorReason = "Bad Request";
      response.setStatus(HttpServletResponse.SC_BAD_REQUEST);

Full Changelog: v4.12.2...v4.13.0

v4.12.2

28 Apr 18:46

Choose a tag to compare

  • Bug Fix: Regression preventing authenticated users from editing fixed.

Full Changelog: v4.12.1...v4.12.2

v4.12.1

28 Apr 18:19

Choose a tag to compare

  • Bug Fix: getMemberUsernameCsv now returns more than the first result, plus is now sorted for consistent repeatibility

Full Changelog: v4.12.0...v4.12.1

v4.12.0

28 Apr 13:03

Choose a tag to compare

What's Changed

  • IpReadFilter by @slominskir in #46
  • Set break-word on Settings columns (#45)
  • Refresh Cache Settings before calling ChangeAction
  • Format Settings page
  • Show admins in Help page if logged in
  • Smoothness lib version now read from build
  • Help page config now comes from Settings instead of env
  • Notifications config now comes from Settings instead of env
  • Email config now comes from Settings instead of env

Oracle DB Migration Notes

-- OPTIONAL: IP READ FILTER (ACL)
insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('IP_READ_FILTER_ENABLED', 'N', 'BOOLEAN', 'Whether to enable IP filtering of pages requiring auth to view.  You must redeploy the app for this setting change to take effect.', 'ACL', 1);
insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT, CHANGE_ACTION_JNDI) values ('IP_READ_ALLOWLIST_PATTERN', '127\.0.*', 'STRING', 'Java REGEX Pattern of allowed IPs for unauthenticated access to view IpReadFilter pages', 'ACL', 2, 'java:global/sim/IpReadAllowlistReconfigureService');
insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('IP_READ_URL_PATTERN', '/*', 'STRING', 'URL patterns to match when applying the IP Read Filter.  You must redeploy the app for this setting change to take effect.', 'ACL', 3);

-- OPTIONAL: Notification Banner
insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('NOTIFICATION_ENABLED', 'Y', 'BOOLEAN', 'Notification banner enabled', 'NOTIFICATION', 1);
insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('NOTIFICATION_MESSAGE', 'Development Environment', 'STRING', 'Notification message', 'NOTIFICATION', 2);
insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('NOTIFICATION_LINK_NAME', 'Home', 'STRING', 'Notification link name', 'NOTIFICATION', 3);
insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('NOTIFICATION_LINK_URL', 'https://github.com/JeffersonLab/smoothness', 'STRING', 'Notification link URL', 'NOTIFICATION', 4);

-- OPTIONAL: Help Page
insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('HELP_CONTENT_CONTACT', 'John Doe (jdoe)', 'STRING', 'Content Contact for help page', 'HELP', 1);
insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('HELP_TECHNICAL_CONTACT', 'John Doe (jdoe)', 'STRING', 'Technical Contact for help page', 'HELP', 2);
insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('HELP_DOC_CSV', 'https://github.com/JeffersonLab/smoothness|Home', 'CSV', 'CSV of documentation items where each item is a URL and a Label separated with the pipe symbol', 'HELP', 3);

-- OPTIONAL: Email
insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('EMAIL_ENABLED', 'Y', 'BOOLEAN', 'Emails (including Help/Feedback) enabled', 'EMAIL', 1);
insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('EMAIL_TESTING_ENABLED', 'N', 'BOOLEAN', 'Send all emails to testlead user group', 'EMAIL', 2);
insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('EMAIL_DOMAIN_NAME', '@jlab.org', 'STRING', 'The email domain to append to usernames, starting with and including the ampersat.', 'EMAIL', 3);
insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('EMAIL_SENDER_ADDRESS', 'smoothness@jlab.org', 'STRING', 'Email address to use as sender from emails generated in this app.  Note: this is not the same as "from".', 'EMAIL', 4);

-- rename key
update SETTING set KEY = 'SMOOTHNESS_CDN_ENABLED' where key = 'SMOOTHNESS_CDN';

-- remove key
delete from SETTING where KEY = 'SMOOTHNESS_VERSION';

web.xml changes

Add:

    <context-param>
        <param-name>smoothnessVersion</param-name>
        <param-value>@SMOOTHNESS_VERSION@</param-value>
        <description>Needed if you enable CDN.  Set once in build.gradle.</description>
    </context-param>
    <listener>
        <listener-class>org.jlab.smoothness.presentation.util.SettingsCacheInit</listener-class>
        <description>We don't use @WebListener because we want this listener to be first in case others use DB Setting Cache</description>
    </listener>

build.gradle changes

Add:

ext.smoothnessVersion = '4.12.0'
...
    implementation "org.jlab:smoothness-weblib:${smoothnessVersion}"
...
        filter {
            String line -> line.replaceAll("@SMOOTHNESS_VERSION@", smoothnessVersion)
        }
...

Full Changelog: v4.11.0...v4.12.0

v4.11.0

01 Apr 18:12

Choose a tag to compare

What's Changed

Oracle DB Migration Notes

Update app persistence.xml to include:

<class>org.jlab.smoothness.persistence.entity.Setting</class>

The persistence.xml persistence unit name is now expected to be fixed at webappPU (EntityManager injected in SettingService with this name). It's probably easiest to just search and replace to ensure it's this single value everywhere in each app. It's possible to have multiple persistence units, though untested and seems unnecessary.

Using the app specific schema account:

CREATE TABLE SETTING
(
    KEY                VARCHAR2(128 CHAR)  NOT NULL,
    VALUE              VARCHAR2(4000 BYTE) NOT NULL,
    TYPE               VARCHAR2(32 CHAR) DEFAULT 'STRING' NOT NULL,
    DESCRIPTION        VARCHAR2(2048 CHAR) NOT NULL,
    TAG                VARCHAR2(32 CHAR) DEFAULT 'OTHER' NOT NULL,
    WEIGHT             INTEGER DEFAULT 0 NOT NULL,
    CHANGE_ACTION_JNDI VARCHAR2(128 CHAR) NULL ,
    CONSTRAINT SETTING_PK PRIMARY KEY (KEY),
    CONSTRAINT SETTING_CK1 CHECK (TYPE IN ('STRING', 'BOOLEAN', 'CSV')),
    CONSTRAINT SETTING_CK2 CHECK ((VALUE in ('Y', 'N') AND TYPE = 'BOOLEAN') OR TYPE <> 'BOOLEAN')
);

-- Replace `smoothness-demo-admin` with app-specific admin role name
insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('ADMIN_ROLE_NAME', 'smoothness-demo-admin', 'STRING', 'App-specific Admin Role Name', 'AUTH', 1);
insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('SMOOTHNESS_CDN', 'N', 'BOOLEAN', 'Smoothness weblib resources from CDN.  Defaults to No = serve files locally. CDN is for minified/combined files on shared Content Delivery Network (CDN) server - Nice for when multiple apps use same resources to have warm cache.', 'CDN', 1);
insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('SMOOTHNESS_SERVER', 'ace.jlab.org/cdn', 'STRING', 'Host name and port of content delivery network host for shared smoothness resources. Only used if SMOOTHNESS_LOCATION=CDN', 'CDN', 2);
insert into SETTING (KEY, VALUE, TYPE, DESCRIPTION, TAG, WEIGHT) values ('SMOOTHNESS_VERSION', '4.11.0', 'STRING', 'Version of smoothness lib on CDN.  Only used if SMOOTHNESS_LOCATION=CDN', 'CDN', 3);
commit;

Taglib Migration Notes

To use the newly provided s:page.tag you'll need to update all references to t:page and use s:page instead. The new page tag requires you to add the following tags to the WEB-INF/tags dir:

  • app-script.tag
  • app-style.tag
  • footnote.tag
  • header-extra.tag
  • primary-nav.tag
  • user-extra.tag

To use the newly added s:setup-page.tag you'll need to update all references to t:setup-page and use s:setup-page instead. The new page tag requires you to add a setup-nav.tag to the WEB-INF/tags dir.

The new tags allow you to easily tap into the provided Setup/Settings and Setup/Directory Cache, plus users no longer need to provide a custom help.jsp.

Full Changelog: v4.10.4...v4.11.0