Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions builders/html/assets/sass/mixin/_utilities.scss
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,5 @@
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
margin-left: 240px;
}
2 changes: 1 addition & 1 deletion builders/html/assets/sass/theme/_header.scss
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
4 changes: 4 additions & 0 deletions docs/recipes/breaking-changes-7.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
```
Expand All @@ -67,18 +68,21 @@ 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
```

**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

Expand Down
15 changes: 14 additions & 1 deletion docs/recipes/heap-dumps.md
Original file line number Diff line number Diff line change
Expand Up @@ -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/
Expand All @@ -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"
Expand All @@ -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
Expand All @@ -86,6 +89,7 @@ chown tomcat:tomcat /var/lucee/heapdumps
#### CommandBox

Add to your `server.json`:

```json
{
"jvm": {
Expand All @@ -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
Expand All @@ -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;

Expand Down Expand Up @@ -182,12 +189,13 @@ echo('<a href="?create=1">Create Heap Dump</a>');
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
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down
8 changes: 8 additions & 0 deletions docs/recipes/release-cycle.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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.
Expand All @@ -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
Expand Down
26 changes: 13 additions & 13 deletions s3_website.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down