[
https://issues.apache.org/jira/browse/GEODE-10516?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jinwoo Hwang updated GEODE-10516:
---------------------------------
Description:
h2. Summary
Restore and stabilize the aggregate Javadoc build
({{{}:geode-assembly:docs{}}}) under Gradle 7 by implementing a three-layered
approach: minimal stub classes for surgical symbol resolution, legacy Tomcat 6
JARs for broad coverage, and modern Tomcat 9 dependencies for current APIs.
This eliminates unresolved symbol errors while preventing third-party API
documentation leakage.
h2. Description
h3. Problem Statement
The aggregate Javadoc build task ({{{}:geode-assembly:docs{}}}) fails under
Gradle 7 due to unresolved Tomcat 6/7 API symbols. Geode's session management
modules reference legacy Tomcat classes ({{{}LifecycleSupport{}}},
{{{}SerializablePrincipal{}}}, etc.) that no longer exist in modern Tomcat
versions, causing Javadoc compilation to fail with "symbol not found" errors.
*Current Failure:*
{noformat}
Task :geode-assembly:docs FAILED
error: cannot find symbol
[javadoc] import org.apache.catalina.ha.session.SerializablePrincipal;
[javadoc] ^
[javadoc] symbol: class SerializablePrincipal
[javadoc] location: package org.apache.catalina.ha.session
error: cannot find symbol
[javadoc] import org.apache.catalina.util.LifecycleSupport;
[javadoc] ^
[javadoc] symbol: class LifecycleSupport
[javadoc] location: package org.apache.catalina.util
... (30+ similar unresolved symbols)
{noformat}
h3. Historical Context
h4. Previous State
*Before Refactoring:*
* Aggregate Javadoc task worked with older Gradle versions
* Dependencies implicitly resolved Tomcat symbols
* No explicit version conflicts managed
*After Gradle 7 Migration:*
* Stricter classpath resolution broke implicit dependencies
* Legacy Tomcat symbols no longer automatically available
* Build failures blocking documentation generation
h4. Previous Workaround Attempts
|Approach|Implementation|Problem|
|Global {{failOnError=false}}|Disable all Javadoc error checking|Masks real
documentation issues, defeats purpose|
|Class exclusions|{{exclude 'org/apache/geode/modules/session/**'}}|Removes
session management from documentation|
|Legacy extraction only|Extract Tomcat 6 distribution JARs|Brittle, noisy,
conflicts with modern APIs|
|Stubs only|Create minimal placeholders|Insufficient coverage (30+ classes
needed)|
*None of these approaches were satisfactory:*
* Quality compromise (ignoring errors or excluding content)
* Maintenance burden (extensive stub creation)
* Brittle dependencies (full legacy distribution extraction)
h3. Current Behavior
*Build Failure:*
{code:bash}
./gradlew :geode-assembly:docs
# Result: FAILED
# Reason: Unresolved symbols from legacy Tomcat APIs
# Impact: No aggregate Javadoc generated
{code}
*Specific Symbol Resolution Failures:*
|Symbol|Package|Usage in Geode|Tomcat Version|
|LifecycleSupport|org.apache.catalina.util|Session lifecycle management|Tomcat
6/7 only|
|SerializablePrincipal|org.apache.catalina.ha.session|Delta session
replication|Tomcat 6/7 only|
|ManagerBase|org.apache.catalina.session|Session manager base class|Removed in
Tomcat 9|
|SecurityUtil|org.apache.catalina.security|Security utilities|Changed in Tomcat
9|
|GenericPrincipal|org.apache.catalina.realm|Authentication principal|Signature
changed|
*Code Example (DeltaSession.java):*
{code:java}
package org.apache.geode.modules.session.internal.filter;
import org.apache.catalina.ha.session.SerializablePrincipal; // NOT FOUND
import org.apache.catalina.util.LifecycleSupport; // NOT FOUND
public class DeltaSession extends Session {
private SerializablePrincipal principal; // Compilation fails
private LifecycleSupport lifecycle; // Compilation fails
}
{code}
h3. Scope of Issue
h4. Affected Modules
{noformat}
geode-assembly/
├── build.gradle (Javadoc task configuration)
└── src/javadocStubs/java/ (NEW - stub classes)
└── org/apache/catalina/
├── util/LifecycleSupport.java
├── ha/session/SerializablePrincipal.java
├── LifecycleListener.java
├── Realm.java
└── realm/GenericPrincipal.java
geode-modules/
├── geode-modules-session-internal/ (Uses legacy Tomcat 6 APIs)
├── geode-modules-tomcat7/ (Uses Tomcat 7 APIs)
├── geode-modules-tomcat8/ (Uses Tomcat 8 APIs)
└── geode-modules-tomcat9/ (Uses modern Tomcat 9 APIs)
{noformat}
h4. Symbol Count Analysis
*Tomcat Class References in Geode:*
* Total {{org.apache.catalina.*}} imports: 30+ unique classes
* Legacy-only classes (Tomcat 6/7): 26+ classes
* Modern-only classes (Tomcat 9+): 8+ classes
* Classes with API changes between versions: 4+ classes
*Coverage Breakdown:*
* Stub classes created: 5 (surgical fixes)
* Legacy JAR coverage: 26+ classes (broad coverage)
* Modern dependencies: 8+ classes (current API support)
h3. Root Cause Analysis
h4. Multi-Version Tomcat Support Challenge
Geode supports multiple Tomcat versions simultaneously:
{noformat}
geode-modules-tomcat7 → Tomcat 7.x APIs
geode-modules-tomcat8 → Tomcat 8.x APIs
geode-modules-tomcat9 → Tomcat 9.x APIs
geode-modules-session → Legacy Tomcat 6/7 APIs
{noformat}
*The Fundamental Problem:*
* Legacy code requires Tomcat 6/7 classes (removed in Tomcat 9)
* Modern code requires Tomcat 9 classes (different from Tomcat 6)
* Aggregate Javadoc must compile ALL modules together
* No single Tomcat version satisfies all requirements
h4. Gradle 7 Strictness
*What Changed:*
* Gradle 7+ enforces stricter classpath validation
* Unresolved symbols cause immediate build failure
* {{-Xwerror}} flag enforced by default for quality
* Previous implicit dependency resolution no longer works
*Impact:*
* Build that worked in Gradle 6 now fails
* Cannot ignore errors without compromising quality
* Must explicitly resolve ALL symbol dependencies
h3. API Leakage Prevention
*Problem:* Don't want Tomcat internal APIs in published Javadoc
*Solution:*
{code:groovy}
task docs(type: Javadoc) {
// Exclude all Tomcat packages from generated documentation
exclude 'org/apache/catalina/**'
exclude 'org/apache/tomcat/**'
exclude 'org/apache/coyote/**'
}
{code}
*Result:*
* Tomcat classes used for compilation/type checking only
* No Tomcat packages appear in published Javadoc HTML
* Only Geode classes documented
h2. Benefits of This Enhancement
h3. Build Stability
* *Complete symbol resolution* - All 30+ Tomcat references resolved
* *No error suppression* - {{-Xwerror}} remains enabled for quality
* *Gradle 7+ compatible* - Works with strict validation
* *Deterministic builds* - Consistent results across environments
h3. Documentation Quality
* *Full coverage* - Session management included in documentation
* *No content loss* - All Geode modules documented
* *Clean output* - No third-party API leakage
* *Professional appearance* - Complete, error-free Javadoc
h3. Maintainability
* *Layered approach* - Each layer has clear purpose
* *Minimal custom code* - Only 5 stub classes needed
* *Low maintenance* - Stubs are minimal, unlikely to change
* *Clear intent* - Each layer documented and justified
h3. Compliance and Quality
* *RAT compliant* - All stub files have ASF license headers
* *Quality gates enabled* - {{-Xwerror}} catches real issues
* *Future-proof* - Ready for stricter enforcement
* *Best practices* - Follows Gradle documentation patterns
h2. Success Criteria
When this enhancement is implemented, the following should be true:
# *Build Success:* {{:geode-assembly:docs}} completes with exit code 0
# *Symbol Resolution:* All 30+ Tomcat references resolve without errors
# *Quality Gates:* {{-Xwerror}} remains enabled, catching real issues
# *Content Coverage:* Session management modules included in documentation
# *API Isolation:* No Tomcat packages appear in published Javadoc
# *License Compliance:* All stub files pass RAT checks with ASF headers
# *No Regressions:* All 15 CI checks passing
h2. Risk Assessment
h3. Risk of NOT Fixing
*Documentation Risk: HIGH*
* Aggregate Javadoc cannot be generated
* Session management undocumented
* API documentation incomplete
* User/developer confusion
*Quality Risk: MEDIUM*
* Cannot enable strict error checking
* Real documentation issues masked
* Professional appearance compromised
*Maintenance Risk: MEDIUM*
* Workarounds accumulate over time
* Technical debt increases
* Future Gradle versions may break completely
h3. Risk of Fixing
*Implementation Risk: LOW*
* Pure build configuration changes
* No runtime code modifications
* Well-tested approach
*Compatibility Risk: VERY LOW*
* Only affects Javadoc generation
* No published artifact changes
* No API modifications
*Maintenance Risk: LOW*
* 5 minimal stub files (unlikely to change)
* Clear documentation of approach
* Layered strategy easy to understand
*Overall Risk: LOW*
* High benefit (documentation restored)
* Minimal risk (build infrastructure only)
* Reversible (can revert if issues arise)
h2. Compliance and Standards
h3. Apache License Compliance
*RAT (Release Audit Tool) Validation:*
* All 5 stub files include full ASF license headers
* Copyright notices present
* License references correct
* {{./gradlew rat}} passes cleanly
*Stub File Header Example:*
{code:java}
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
{code}
h3. Documentation Standards
*Javadoc Quality:*
* {{-Xwerror}} flag enabled (strict mode)
* All documentation warnings treated as errors
* Real issues caught during build
* Professional output quality
*API Surface Control:*
* Third-party APIs excluded from published docs
* Only Geode public APIs documented
* Clear separation of internal vs external
* User-facing documentation clean
h2. Related Work
* Gradle 7 migration efforts
* Documentation infrastructure modernization
* Tomcat version support strategy
* Build system quality improvements
was:
h2. Summary
Add input validation and filtering capabilities to the Geode session management
module. This enhancement introduces a validation framework based on
industry-standard security practices (ysoserial, OWASP) while maintaining full
backward compatibility.
h3. Blocklist Methodology
The blocklist is based on authoritative security research:
*Primary Sources:*
# [ysoserial|https://github.com/frohoff/ysoserial] - Canonical gadget chain
database (40+ exploits)
# [OWASP Deserialization Cheat
Sheet|https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html]
- Industry best practices
# CVE Database - Known vulnerabilities with proof-of-concept exploits
# Security advisories from Apache, Spring, Oracle
*Blocked Categories:*
|Category|Examples|Reason|CVE References|
|Commons Collections|InvokerTransformer, ChainedTransformer|Arbitrary method
invocation|CVE-2015-7501|
|Spring Internals|ObjectFactory, BeanFactory|Bean instantiation
exploits|CVE-2016-1000027|
|JDK Classes|TemplatesImpl, Proxy|Bytecode loading, dynamic
proxies|CVE-2015-4852|
|Scripting Engines|Groovy closures, JavaScript|Script execution
capabilities|Various|
|Connection Pools|C3P0, DBCP|JNDI injection vectors|CVE-2019-5427|
|RMI/JNDI|UnicastRef, ReferenceWrapper|Remote object lookups|CVE-2016-3427|
h3. Allowlist Methodology
The allowlist includes classes proven safe for deserialization:
*Included Categories:*
# Standard Java types (String, primitives, Collections)
# Immutable data structures (UUID, LocalDate, Optional)
# Geode internal classes (PDX, Region, etc.)
# Framework classes with no gadget chains
*NOT Included (and why):*
{*}Jackson ({{{}com.fasterxml..jackson.{}}}{*}):*
* *Should NOT be blocked* - Jackson is not a gadget chain
* Different vulnerability domain (JSON parsing vs Java serialization)
* Extensively used in Geode (96+ usages in core, GFSH, management API)
* Zero entries in ysoserial's 40+ exploit payloads
* Blocking would break legitimate functionality
h2. Security Research References
h3. Primary Sources
*ysoserial Project:*
* URL: [https://github.com/frohoff/ysoserial]
* Description: Canonical collection of Java deserialization exploits
* Content: 40+ proven gadget chain payloads
* Usage: Defines our blocklist of dangerous classes
*OWASP Deserialization Cheat Sheet:*
* URL:
[https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html]
* Description: Industry best practices for secure deserialization
* Guidance: Defense-in-depth, allowlisting, monitoring
*OWASP Top 10:*
* URL:
[https://owasp.org/www-project-top-ten/2017/A8_2017-Insecure_Deserialization]
* Status: A8:2017 - Insecure Deserialization
* Severity: Critical
h3. CVE References
|CVE ID|Component|Description|Exploitability|
|CVE-2015-7501|Commons Collections|InvokerTransformer RCE|Widely exploited|
|CVE-2015-4852|WebLogic/TemplatesImpl|Bytecode injection RCE|Active
exploitation|
|CVE-2016-1000027|Spring Framework|JtaTransactionManager RCE|Known exploits|
|CVE-2019-5427|C3P0|JNDI injection RCE|Proof-of-concept available|
|CVE-2017-5638|Apache Struts|OGNL deserialization|Equifax breach (2017)|
h3. Academic Research
*"Marshalling Pickles" (Black Hat 2017):*
* Comprehensive analysis of serialization vulnerabilities
* Surveyed 30+ libraries for gadget chains
* Established classification framework
*"Serial Killer" (Code White Security):*
* Open-source deserialization firewall
* Reference implementation for filtering
* URL: [https://github.com/ikkisoft/SerialKiller]
*Foxglove Security Research:*
* Original disclosure of Commons Collections exploit
* Real-world impact analysis
* URL:
[https://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/]
h3. Risk of Implementing
*Compatibility Risk: LOW*
* Fully backward compatible design
* No API changes required
* Comprehensive test coverage
*Performance Risk: LOW*
* Measured overhead < 2ms
* Negligible impact on session operations
* One-time initialization cost
*Operational Risk: LOW*
* Secure defaults require no configuration
* Clear documentation and examples
* Monitoring capabilities included
*Overall Implementation Risk: LOW*
h2. Compliance and Standards
h3. Security Frameworks
*OWASP Compliance:*
* Addresses A8:2017 - Insecure Deserialization
* Implements recommended defense-in-depth
* Follows input validation best practices
*NIST Cybersecurity Framework:*
* Identify: Recognizes deserialization as attack vector
* Protect: Implements filtering controls
* Detect: Provides logging and monitoring
* Respond: Enables security incident investigation
*CWE Mitigation:*
* CWE-502: Deserialization of Untrusted Data
* Implements recommended safeguards
* Defense-in-depth approach
h3. Industry Standards
*PCI-DSS 3.2.1:*
* Requirement 6.5.8: Secure coding practices
* Input validation on untrusted data
* Protection against common vulnerabilities
*SOC 2 Type II:*
* CC6.1: Logical and physical access controls
* CC7.2: System monitoring and detection
* CC9.2: Risk mitigation procedures
h3. Estimated Timeline
* Code review completion: 1-2 weeks
* Merge to develop: Immediately after approval
* Next release: According to Geode release schedule
* Backporting: Consider for supported versions (if critical)
h2. Related Work
* GEODE-10466: Jakarta EE 10 migration (related PR #7940)
> Java Documentation Modernization: Stable Aggregation, Legacy Tomcat
> Neutralization, and Compliance Readiness
> ------------------------------------------------------------------------------------------------------------
>
> Key: GEODE-10516
> URL: https://issues.apache.org/jira/browse/GEODE-10516
> Project: Geode
> Issue Type: Improvement
> Reporter: Jinwoo Hwang
> Assignee: Jinwoo Hwang
> Priority: Major
> Fix For: 2.1.0
>
>
> h2. Summary
> Restore and stabilize the aggregate Javadoc build
> ({{{}:geode-assembly:docs{}}}) under Gradle 7 by implementing a three-layered
> approach: minimal stub classes for surgical symbol resolution, legacy Tomcat
> 6 JARs for broad coverage, and modern Tomcat 9 dependencies for current APIs.
> This eliminates unresolved symbol errors while preventing third-party API
> documentation leakage.
> h2. Description
> h3. Problem Statement
> The aggregate Javadoc build task ({{{}:geode-assembly:docs{}}}) fails under
> Gradle 7 due to unresolved Tomcat 6/7 API symbols. Geode's session management
> modules reference legacy Tomcat classes ({{{}LifecycleSupport{}}},
> {{{}SerializablePrincipal{}}}, etc.) that no longer exist in modern Tomcat
> versions, causing Javadoc compilation to fail with "symbol not found" errors.
> *Current Failure:*
> {noformat}
> Task :geode-assembly:docs FAILED
> error: cannot find symbol
> [javadoc] import org.apache.catalina.ha.session.SerializablePrincipal;
> [javadoc] ^
> [javadoc] symbol: class SerializablePrincipal
> [javadoc] location: package org.apache.catalina.ha.session
> error: cannot find symbol
> [javadoc] import org.apache.catalina.util.LifecycleSupport;
> [javadoc] ^
> [javadoc] symbol: class LifecycleSupport
> [javadoc] location: package org.apache.catalina.util
> ... (30+ similar unresolved symbols)
> {noformat}
> h3. Historical Context
> h4. Previous State
> *Before Refactoring:*
> * Aggregate Javadoc task worked with older Gradle versions
> * Dependencies implicitly resolved Tomcat symbols
> * No explicit version conflicts managed
> *After Gradle 7 Migration:*
> * Stricter classpath resolution broke implicit dependencies
> * Legacy Tomcat symbols no longer automatically available
> * Build failures blocking documentation generation
> h4. Previous Workaround Attempts
> |Approach|Implementation|Problem|
> |Global {{failOnError=false}}|Disable all Javadoc error checking|Masks real
> documentation issues, defeats purpose|
> |Class exclusions|{{exclude 'org/apache/geode/modules/session/**'}}|Removes
> session management from documentation|
> |Legacy extraction only|Extract Tomcat 6 distribution JARs|Brittle, noisy,
> conflicts with modern APIs|
> |Stubs only|Create minimal placeholders|Insufficient coverage (30+ classes
> needed)|
> *None of these approaches were satisfactory:*
> * Quality compromise (ignoring errors or excluding content)
> * Maintenance burden (extensive stub creation)
> * Brittle dependencies (full legacy distribution extraction)
> h3. Current Behavior
> *Build Failure:*
> {code:bash}
> ./gradlew :geode-assembly:docs
> # Result: FAILED
> # Reason: Unresolved symbols from legacy Tomcat APIs
> # Impact: No aggregate Javadoc generated
> {code}
> *Specific Symbol Resolution Failures:*
> |Symbol|Package|Usage in Geode|Tomcat Version|
> |LifecycleSupport|org.apache.catalina.util|Session lifecycle
> management|Tomcat 6/7 only|
> |SerializablePrincipal|org.apache.catalina.ha.session|Delta session
> replication|Tomcat 6/7 only|
> |ManagerBase|org.apache.catalina.session|Session manager base class|Removed
> in Tomcat 9|
> |SecurityUtil|org.apache.catalina.security|Security utilities|Changed in
> Tomcat 9|
> |GenericPrincipal|org.apache.catalina.realm|Authentication
> principal|Signature changed|
>
> *Code Example (DeltaSession.java):*
> {code:java}
> package org.apache.geode.modules.session.internal.filter;
> import org.apache.catalina.ha.session.SerializablePrincipal; // NOT FOUND
> import org.apache.catalina.util.LifecycleSupport; // NOT FOUND
> public class DeltaSession extends Session {
> private SerializablePrincipal principal; // Compilation fails
> private LifecycleSupport lifecycle; // Compilation fails
> }
> {code}
> h3. Scope of Issue
> h4. Affected Modules
> {noformat}
> geode-assembly/
> ├── build.gradle (Javadoc task configuration)
> └── src/javadocStubs/java/ (NEW - stub classes)
> └── org/apache/catalina/
> ├── util/LifecycleSupport.java
> ├── ha/session/SerializablePrincipal.java
> ├── LifecycleListener.java
> ├── Realm.java
> └── realm/GenericPrincipal.java
> geode-modules/
> ├── geode-modules-session-internal/ (Uses legacy Tomcat 6 APIs)
> ├── geode-modules-tomcat7/ (Uses Tomcat 7 APIs)
> ├── geode-modules-tomcat8/ (Uses Tomcat 8 APIs)
> └── geode-modules-tomcat9/ (Uses modern Tomcat 9 APIs)
> {noformat}
> h4. Symbol Count Analysis
> *Tomcat Class References in Geode:*
> * Total {{org.apache.catalina.*}} imports: 30+ unique classes
> * Legacy-only classes (Tomcat 6/7): 26+ classes
> * Modern-only classes (Tomcat 9+): 8+ classes
> * Classes with API changes between versions: 4+ classes
> *Coverage Breakdown:*
> * Stub classes created: 5 (surgical fixes)
> * Legacy JAR coverage: 26+ classes (broad coverage)
> * Modern dependencies: 8+ classes (current API support)
> h3. Root Cause Analysis
> h4. Multi-Version Tomcat Support Challenge
> Geode supports multiple Tomcat versions simultaneously:
> {noformat}
> geode-modules-tomcat7 → Tomcat 7.x APIs
> geode-modules-tomcat8 → Tomcat 8.x APIs
> geode-modules-tomcat9 → Tomcat 9.x APIs
> geode-modules-session → Legacy Tomcat 6/7 APIs
> {noformat}
> *The Fundamental Problem:*
> * Legacy code requires Tomcat 6/7 classes (removed in Tomcat 9)
> * Modern code requires Tomcat 9 classes (different from Tomcat 6)
> * Aggregate Javadoc must compile ALL modules together
> * No single Tomcat version satisfies all requirements
> h4. Gradle 7 Strictness
> *What Changed:*
> * Gradle 7+ enforces stricter classpath validation
> * Unresolved symbols cause immediate build failure
> * {{-Xwerror}} flag enforced by default for quality
> * Previous implicit dependency resolution no longer works
> *Impact:*
> * Build that worked in Gradle 6 now fails
> * Cannot ignore errors without compromising quality
> * Must explicitly resolve ALL symbol dependencies
> h3. API Leakage Prevention
> *Problem:* Don't want Tomcat internal APIs in published Javadoc
> *Solution:*
> {code:groovy}
> task docs(type: Javadoc) {
> // Exclude all Tomcat packages from generated documentation
> exclude 'org/apache/catalina/**'
> exclude 'org/apache/tomcat/**'
> exclude 'org/apache/coyote/**'
> }
> {code}
> *Result:*
> * Tomcat classes used for compilation/type checking only
> * No Tomcat packages appear in published Javadoc HTML
> * Only Geode classes documented
> h2. Benefits of This Enhancement
> h3. Build Stability
> * *Complete symbol resolution* - All 30+ Tomcat references resolved
> * *No error suppression* - {{-Xwerror}} remains enabled for quality
> * *Gradle 7+ compatible* - Works with strict validation
> * *Deterministic builds* - Consistent results across environments
> h3. Documentation Quality
> * *Full coverage* - Session management included in documentation
> * *No content loss* - All Geode modules documented
> * *Clean output* - No third-party API leakage
> * *Professional appearance* - Complete, error-free Javadoc
> h3. Maintainability
> * *Layered approach* - Each layer has clear purpose
> * *Minimal custom code* - Only 5 stub classes needed
> * *Low maintenance* - Stubs are minimal, unlikely to change
> * *Clear intent* - Each layer documented and justified
> h3. Compliance and Quality
> * *RAT compliant* - All stub files have ASF license headers
> * *Quality gates enabled* - {{-Xwerror}} catches real issues
> * *Future-proof* - Ready for stricter enforcement
> * *Best practices* - Follows Gradle documentation patterns
> h2. Success Criteria
> When this enhancement is implemented, the following should be true:
> # *Build Success:* {{:geode-assembly:docs}} completes with exit code 0
> # *Symbol Resolution:* All 30+ Tomcat references resolve without errors
> # *Quality Gates:* {{-Xwerror}} remains enabled, catching real issues
> # *Content Coverage:* Session management modules included in documentation
> # *API Isolation:* No Tomcat packages appear in published Javadoc
> # *License Compliance:* All stub files pass RAT checks with ASF headers
> # *No Regressions:* All 15 CI checks passing
> h2. Risk Assessment
> h3. Risk of NOT Fixing
> *Documentation Risk: HIGH*
> * Aggregate Javadoc cannot be generated
> * Session management undocumented
> * API documentation incomplete
> * User/developer confusion
> *Quality Risk: MEDIUM*
> * Cannot enable strict error checking
> * Real documentation issues masked
> * Professional appearance compromised
> *Maintenance Risk: MEDIUM*
> * Workarounds accumulate over time
> * Technical debt increases
> * Future Gradle versions may break completely
> h3. Risk of Fixing
> *Implementation Risk: LOW*
> * Pure build configuration changes
> * No runtime code modifications
> * Well-tested approach
> *Compatibility Risk: VERY LOW*
> * Only affects Javadoc generation
> * No published artifact changes
> * No API modifications
> *Maintenance Risk: LOW*
> * 5 minimal stub files (unlikely to change)
> * Clear documentation of approach
> * Layered strategy easy to understand
> *Overall Risk: LOW*
> * High benefit (documentation restored)
> * Minimal risk (build infrastructure only)
> * Reversible (can revert if issues arise)
> h2. Compliance and Standards
> h3. Apache License Compliance
> *RAT (Release Audit Tool) Validation:*
> * All 5 stub files include full ASF license headers
> * Copyright notices present
> * License references correct
> * {{./gradlew rat}} passes cleanly
> *Stub File Header Example:*
> {code:java}
> /*
> * Licensed to the Apache Software Foundation (ASF) under one or more
> * contributor license agreements. See the NOTICE file distributed with
> * this work for additional information regarding copyright ownership.
> * The ASF licenses this file to You under the Apache License, Version 2.0
> * (the "License"); you may not use this file except in compliance with
> * the License. You may obtain a copy of the License at
> *
> * http://www.apache.org/licenses/LICENSE-2.0
> *
> * Unless required by applicable law or agreed to in writing, software
> * distributed under the License is distributed on an "AS IS" BASIS,
> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> * See the License for the specific language governing permissions and
> * limitations under the License.
> */
> {code}
> h3. Documentation Standards
> *Javadoc Quality:*
> * {{-Xwerror}} flag enabled (strict mode)
> * All documentation warnings treated as errors
> * Real issues caught during build
> * Professional output quality
> *API Surface Control:*
> * Third-party APIs excluded from published docs
> * Only Geode public APIs documented
> * Clear separation of internal vs external
> * User-facing documentation clean
>
> h2. Related Work
> * Gradle 7 migration efforts
> * Documentation infrastructure modernization
> * Tomcat version support strategy
> * Build system quality improvements
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)