diff --git a/builders/html/assets/sass/mixin/_utilities.scss b/builders/html/assets/sass/mixin/_utilities.scss index 72cb058f5..0758124c8 100644 --- a/builders/html/assets/sass/mixin/_utilities.scss +++ b/builders/html/assets/sass/mixin/_utilities.scss @@ -33,4 +33,5 @@ overflow: hidden; text-overflow: ellipsis; white-space: nowrap; + margin-left: 240px; } \ No newline at end of file diff --git a/builders/html/assets/sass/theme/_header.scss b/builders/html/assets/sass/theme/_header.scss index 79617d138..ec5418256 100644 --- a/builders/html/assets/sass/theme/_header.scss +++ b/builders/html/assets/sass/theme/_header.scss @@ -216,7 +216,7 @@ font-weight: 300; height: ($line-height * 2); line-height: $line-height-h4; - margin: 0; + // margin: 0; padding: (($line-height * 2 - $line-height-h4) / 2) $grid-gutter; &:focus, &:hover { diff --git a/docs/recipes/breaking-changes-7.0.md b/docs/recipes/breaking-changes-7.0.md index 5ac535add..d580d54ee 100644 --- a/docs/recipes/breaking-changes-7.0.md +++ b/docs/recipes/breaking-changes-7.0.md @@ -56,6 +56,7 @@ When upgrading to Lucee 7.0, you may encounter errors related to missing javax o #### Scenario 1: Running Lucee 7 on Jakarta Containers (Tomcat 10+) with Old Extensions **Symptom:** You see errors like: + ``` java.lang.ClassNotFoundException: javax.servlet.jsp.tagext.TryCatchFinally not found by redis.extension ``` @@ -67,6 +68,7 @@ java.lang.ClassNotFoundException: javax.servlet.jsp.tagext.TryCatchFinally not f #### Scenario 2: Running Lucee 7 on Javax Containers (Tomcat 9 or earlier) **Symptom:** You see errors about missing jakarta classes: + ``` java.lang.NoClassDefFoundError: jakarta/servlet/http/HttpServletRequest ``` @@ -74,11 +76,13 @@ java.lang.NoClassDefFoundError: jakarta/servlet/http/HttpServletRequest **Cause:** Lucee 7 requires Jakarta EE servlet APIs, which are not present in javax-based containers like Tomcat 9. **Recommended Solution:** Upgrade to a Jakarta-based servlet container: + - Tomcat 10.1+ (recommended) - Jetty 11+ - Other Jakarta EE 9+ compatible containers **Temporary Workaround:** If you cannot immediately upgrade your servlet container, you can add Jakarta servlet APIs to your classpath: + - Maven dependency: [jakarta.servlet-api on Maven Central](https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api) - Download the JAR and add it to your servlet container's `lib` directory diff --git a/docs/recipes/heap-dumps.md b/docs/recipes/heap-dumps.md index 2b8166316..576169819 100644 --- a/docs/recipes/heap-dumps.md +++ b/docs/recipes/heap-dumps.md @@ -58,6 +58,7 @@ The most common use case for heap dumps is capturing the memory state when an Ou ### JVM Configuration Add the following arguments to your JVM startup configuration: + ```bash -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/lucee/heapdumps/ @@ -68,6 +69,7 @@ Add the following arguments to your JVM startup configuration: #### Lucee with Tomcat (Linux/Unix) Edit your `setenv.sh` file (typically in `{tomcat}/bin/`): + ```bash # Existing CATALINA_OPTS export CATALINA_OPTS="$CATALINA_OPTS -Xms512m -Xmx2048m" @@ -78,6 +80,7 @@ export CATALINA_OPTS="$CATALINA_OPTS -XX:HeapDumpPath=/var/lucee/heapdumps/" ``` Ensure the dump directory exists and is writable: + ```bash mkdir -p /var/lucee/heapdumps chown tomcat:tomcat /var/lucee/heapdumps @@ -86,6 +89,7 @@ chown tomcat:tomcat /var/lucee/heapdumps #### CommandBox Add to your `server.json`: + ```json { "jvm": { @@ -99,11 +103,13 @@ Add to your `server.json`: ``` Or use CommandBox CLI: + ```bash server set jvm.args="-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dumps/" ``` ### Additional Useful JVM Arguments + ```bash # Generate heap dump on OutOfMemoryError and exit JVM (prevents zombie processes) -XX:+HeapDumpOnOutOfMemoryError -XX:+ExitOnOutOfMemoryError @@ -129,6 +135,7 @@ Sometimes you need to capture a heap dump proactively without waiting for an Out ### Implementation Here's a complete implementation for creating and managing heap dumps: + ```javascript setting requesttimeout=10000; @@ -182,12 +189,13 @@ echo('Create Heap Dump'); 1. **Java Integration**: The code uses Lucee's built-in `HeapDumper` class to access JVM heap dump functionality 2. **Timestamped Files**: Each dump is named with a timestamp for easy identification 3. **Automatic Compression**: Dumps are automatically compressed to ZIP format, saving significant disk space -4. **Web Interface**: Provides a simple UI to create, download, and delete heap dumps (never expose on production enviroments) +4. **Web Interface**: Provides a simple UI to create, download, and delete heap dumps (never expose on production environments) 5. **Live Objects Only**: The `dumpTo(res, true)` parameter ensures only reachable (live) objects are included, reducing file size ### Security Considerations This heap dump interface should be protected in production environments: + ```javascript // Add authentication @@ -208,6 +216,7 @@ This heap dump interface should be protected in production environments: ### Scheduled Heap Dumps You can automate heap dump creation using Lucee's scheduler for periodic memory analysis: + ```javascript // Create a scheduled task for nightly heap dumps @@ -264,21 +273,25 @@ Steps for effective heap dump analysis: ### Common Issues **Heap dump file is too large** + - Use the `true` parameter in `HeapDumper.dumpTo(res, true)` to include only live objects - Enable compression in your implementation - Consider using `-XX:HeapDumpSegmentSize` JVM argument for very large heaps **Permission denied errors** + - Ensure the dump directory exists and is writable - Check file system permissions for the Lucee/Java process user - On Linux, verify SELinux policies if applicable **OutOfMemoryError when creating dump** + - Creating a dump requires additional memory - Ensure you have adequate memory overhead (don't set `-Xmx` too close to system limits) - Consider reducing heap size or adding physical memory **Dumps not created on OutOfMemoryError** + - Verify JVM arguments are properly set - Check that only one dump per error is generated by default - Review JVM logs for errors during dump creation diff --git a/docs/recipes/release-cycle.md b/docs/recipes/release-cycle.md index d13cb289e..e60e031f4 100644 --- a/docs/recipes/release-cycle.md +++ b/docs/recipes/release-cycle.md @@ -52,6 +52,7 @@ When the team decides to prepare a release candidate, the following process occu ### Step 1: Create Release Branch A new release branch is created as a clone of the active branch: + ```bash # Clone active branch to new release branch git checkout 7.0 @@ -63,6 +64,7 @@ The release branch is named after the patch version being released (e.g., `7.0.1 ### Step 2: Bump Active Branch Version The active branch immediately moves to the next patch cycle: + ```bash # On branch 7.0 # Version changes from 7.0.1.52-SNAPSHOT to 7.0.2.0-SNAPSHOT @@ -83,9 +85,11 @@ The release branch (`7.0.1`) enters stabilization phase: A release branch follows this lifecycle: ### Active Phase + **Duration:** From branch creation until the release is published **Activities:** + - Regression testing - Security fixes - Bug fixes for the upcoming release @@ -94,14 +98,17 @@ A release branch follows this lifecycle: **Merge policy:** All changes made to the release branch are merged back into the active branch (`7.0`) ### Maintenance Phase + **Duration:** From release publication until the next patch version is released **Activities:** + - Urgent security fixes only **Example:** Branch `7.0.1` enters maintenance phase when version `7.0.1` is released, and remains in maintenance until version `7.0.2` is released. ### End of Life + **Trigger:** When the next patch version is released **Example:** Branch `7.0.1` reaches end of life when `7.0.2` is released. @@ -111,6 +118,7 @@ A release branch follows this lifecycle: **Critical Rule:** Any change committed to a release branch **must** be merged back into the active branch. This ensures that bug fixes and security patches are not lost in future releases. + ```bash # Example: Merge changes from release branch to active branch git checkout 7.0 diff --git a/s3_website.yml b/s3_website.yml index e4327e677..cde2bd216 100644 --- a/s3_website.yml +++ b/s3_website.yml @@ -3,19 +3,19 @@ s3_secret: <%= ENV['AWS_SECRET_ACCESS_KEY'] %> s3_bucket: lucee-docs site: builds/artifacts gzip: - - .html - - .css - - .js - - .map - - .json - - .xml - - .md - - .eot - - .svg - - .ttf - - .woff - - .woff2 - - .otf + - .html + - .css + - .js + - .map + - .json + - .xml + - .md + - .eot + - .svg + - .ttf + - .woff + - .woff2 + - .otf # Cache control: default 1 hour for HTML, longer for static assets max_age: