Project-X v21.01 - Release Notes

AdroitLogic Project-X

Copyright © 2010-2021
AdroitLogic Private Ltd. All Rights Reserved

** Changes for 21.01 ** [2021-01-29]
------------------------------------
(aggregated summary since 17.07.4)

core platform:

* Changed production bundle to use Elasticsearch REST-based metrics publishing, instead of running a TCP/transport client
* Improved classloader compatibility on Windows
* Fixes for Java 9+ compatibility: not yet supported on default launch scripts, can be enabled by removing `-Djava.endorsed.dirs` parameter
* Updated core to use a single Jackson version, v1 (org.codehaus)
* Option to prevent locking on a fetch reference in polling ingress transports, via `ScheduledMessageInjector#shouldAcquireLock()`
* Avoid scheduler name conflicts between multiple projects
* Fixes related to passing project name in log context
* Integration project/XPR builder plugin (x-project-plugin):
  - documented (javadocs passed through to plugin.xml) for all parameters
  - `allowPropertyOverrides` flag to allow temporarily overriding property values in the project context using sys. props or env. vars, at build
    (e.g. use a different database URL/credentials for a connection pool defined in project.xpml)
  - `excludeSources` flag to exclude source files (src/main/java/) from built XPR
* Made XContainer shutdown graceful by default:
  - graceful time window (default 3000ms) can be tuned using `XEnvironment#shutdownGracePeriod` property
  - can be disabled by setting above property to 0


UltraStudio IDE plugin:

* Compatibility up to IDEA 2020.3
* Restricted the plugin support to IDEA versions equal or newer than 2020.1
* Improved in-place update of properties files
* Fixed debugger URL to be compatible with newer Chrome versions
* dependency versions will fall-back to current plugin version (if missing in published remote repository JSON)
* Auto-reload flow views with custom processors when a build completes
* Capturing JS failures during flow render (e.g. during reopening after a JXBrowser crash/freeze)
* Reduced UI freezes during flow rendering and artifact scan
* Parallelizing and (informational) progress bars for artifact scan
* Added default DEBUG logger configuration for current project's base package


logging:

* New `x-logging-all` POM artifact to conveniently pull in a full log4j2-based logging stack into custom runtime bundles;
  includes `x-logging-log4j2` and various log4j2 bridges (JCL, JUL, SLF4J, ..)
* API method `LogContextProvider#clearLogContext()` to clear the Logger Context from a thread
* Java 9+ compatibility changes


libraries:

* New Log4J2 Slack appender:
  - publishes chosen logs as formatted, color-coded alert messages to a configured Slack webhook URL
  - `LogCodePrefixes` flag to report only a subset of log codes
  - `MinRepeatInterval` (seconds) flag to skip/throttle frequently-repeating alerts based on their log codes
  - `SkipTokens` option to completely skip chosen alerts based on their text content (tokens for sub-string matches)


features:

* `as2`: misc. enhancements and fixes, kudos as2gateway.com
  - support sending of pre-composed S/MIME payloads (skipping multipart composition and compression),
    when supplied as a single attachment with ".smime" extension
  - MIC calculation: use configured sign algorithm, instead of default sha1/md5; fix compute time/phase for unsigned messages
  - MIC matching: tolerate variations in "value, algorithm" MIC strings sent by different systems
  - made MDN disposition check case-insensitive


transports:

* `nio-http`
  - ability to run custom logic using a `PrePayloadVerifier` before reading payload (e.g. to reject requests lacking a required HTTP header)
  - ability to run custom logic using an `ExpectationVerifier` for 100-Continue requests
  - reject unacceptably large (`Content-Length > maxPayloadSize`) requests early in the process (as soon as Content-Length is available)
    with a HTTP error, instead of reading up to `maxPayloadSize` and then terminating the connection
  - include `E-S-IOSession-Socket-Timeout` in client/sender (ClientConnectionDebug) logs
  - ability to disable/hide "method not allowed" error logs from listener
* `file`:
  - follow symlinks during local file scanning
  - fix to copy-and-delete completion behavior
* `aws-s3`:
  - ability to filter S3 objects using a Regex pattern within client side (not natively supported by S3 API)
  - fix: clear local-fetched temp file if message is rejected due to execution limit exceeding
* `timer`: removed unused jsch dependency
* `db`: deciding whether to enforce a lock on DB fetch reference, based on the concurrent polling count
  (e.g. to prevent queries that already obtain a DB-level lock, from running concurrently)


connectors:

* `as2`: kudos as2gateway.com
  - early header validations for incoming AS2 messages; e.g. reject if AS2-To missing or non-existent station
  - improved 'partner not found' error message; suggests alternative URL  (e.g. "try prod" when hitting test URL)
* `nio-http`: config to skip "method not allowed" error logs (ref. transport)
* `aws-s3`:
  - allows externalizing ingress connector's *Bucket Name* param
  - ability to filter objects using a Regex pattern (ref. transport)
* `file`: fix compatibility with Windows
* `db`: show row locking suggestion on ingress connector's *SQL Query* parameter


processors:

* New JOLT based JSON->JSON transformer
* New MTOM processor (MIME-based transmission optimization for binary data within SOAP messages) with attachment support
* `regular-attachment`: double-check target dir existence when saving files (tolerate if a parallel process creates the dir)