Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: oracle/weblogic-monitoring-exporter
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v2.2.3
Choose a base ref
...
head repository: oracle/weblogic-monitoring-exporter
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v2.3.0
Choose a head ref
  • 5 commits
  • 32 files changed
  • 2 contributors

Commits on Feb 27, 2025

  1. Copy the full SHA
    f46cda0 View commit details

Commits on Mar 3, 2025

  1. Dependency updates

    rjeberhard committed Mar 3, 2025
    Copy the full SHA
    0f2deec View commit details

Commits on Mar 13, 2025

  1. Generate jakarta servlets

    russgold authored and rjeberhard committed Mar 13, 2025
    Copy the full SHA
    3a5a750 View commit details
  2. Merge branch 'add-jakarta-support' into 'main'

    Generate jakarta servlets
    
    See merge request weblogic-cloud/weblogic-monitoring-exporter!300
    rjeberhard committed Mar 13, 2025
    Copy the full SHA
    c765af7 View commit details
  3. Prepare for WME 2.3.0

    rjeberhard committed Mar 13, 2025
    Copy the full SHA
    ad849c5 View commit details
Showing with 731 additions and 166 deletions.
  1. +18 −2 build-helper-mojo/pom.xml
  2. +146 −0 build-helper-mojo/src/main/java/com/oracle/wls/buildhelper/JavaxToJakartaMojo.java
  3. +146 −33 build-helper-mojo/src/test/java/com/oracle/wls/buildhelper/InMemoryFileSystem.java
  4. +142 −0 build-helper-mojo/src/test/java/com/oracle/wls/buildhelper/InMemoryFileSystemTest.java
  5. +146 −0 build-helper-mojo/src/test/java/com/oracle/wls/buildhelper/JavaxToJakartaMojoTest.java
  6. +9 −3 pom.xml
  7. +12 −2 wls-exporter-core/pom.xml
  8. +1 −7 wls-exporter-core/src/main/java/com/oracle/wls/exporter/{webapp → }/CallFactoryServletImpl.java
  9. +2 −2 wls-exporter-core/src/main/java/com/oracle/wls/exporter/LiveConfiguration.java
  10. +3 −3 wls-exporter-core/src/main/java/com/oracle/wls/exporter/{webapp → javax}/ConfigurationServlet.java
  11. +2 −3 wls-exporter-core/src/main/java/com/oracle/wls/exporter/{webapp → javax}/ExporterServlet.java
  12. +1 −1 wls-exporter-core/src/main/java/com/oracle/wls/exporter/{webapp → javax}/LogServlet.java
  13. +2 −2 wls-exporter-core/src/main/java/com/oracle/wls/exporter/{webapp → javax}/MainServlet.java
  14. +3 −3 wls-exporter-core/src/main/java/com/oracle/wls/exporter/{webapp → javax}/MessagesServlet.java
  15. +8 −3 wls-exporter-core/src/main/java/com/oracle/wls/exporter/{ → javax}/ServletInvocationContext.java
  16. +5 −2 wls-exporter-core/src/main/java/com/oracle/wls/exporter/{webapp → javax}/ServletUtils.java
  17. +11 −1 wls-exporter-core/src/test/java/com/oracle/wls/exporter/ExporterCallTest.java
  18. +11 −37 wls-exporter-core/src/test/java/com/oracle/wls/exporter/ExporterServletTest.java
  19. +4 −4 ...ter-core/src/test/java/com/oracle/wls/exporter/{InMemoryFileSystem.java → InMemoryResources.java}
  20. +8 −8 wls-exporter-core/src/test/java/com/oracle/wls/exporter/LiveConfigurationTest.java
  21. +5 −5 wls-exporter-core/src/test/java/com/oracle/wls/exporter/MetricsStreamTest.java
  22. +2 −2 wls-exporter-core/src/test/java/com/oracle/wls/exporter/MultipartContentParserTest.java
  23. +3 −3 wls-exporter-core/src/test/java/com/oracle/wls/exporter/MultipartTestUtils.java
  24. +9 −10 ...xporter-core/src/test/java/com/oracle/wls/exporter/{webapp → javax}/ConfigurationServletTest.java
  25. +2 −2 wls-exporter-core/src/test/java/com/oracle/wls/exporter/{webapp → javax}/HttpServletRequestStub.java
  26. +2 −2 ...exporter-core/src/test/java/com/oracle/wls/exporter/{webapp → javax}/HttpServletResponseStub.java
  27. +4 −4 wls-exporter-core/src/test/java/com/oracle/wls/exporter/{webapp → javax}/LogServletTest.java
  28. +9 −9 wls-exporter-core/src/test/java/com/oracle/wls/exporter/{webapp → javax}/MainServletTest.java
  29. +4 −4 wls-exporter-core/src/test/java/com/oracle/wls/exporter/{webapp → javax}/MessagesServletTest.java
  30. +8 −6 ...ter-core/src/test/java/com/oracle/wls/exporter/{webapp → javax}/ServletInvocationContextTest.java
  31. +2 −2 wls-exporter-sidecar/pom.xml
  32. +1 −1 wls-exporter-war/pom.xml
20 changes: 18 additions & 2 deletions build-helper-mojo/pom.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 2019, 2024, Oracle and/or its affiliates.
Copyright (c) 2019, 2025, Oracle and/or its affiliates.
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
@@ -9,21 +9,37 @@
<parent>
<artifactId>wls-exporter-parent</artifactId>
<groupId>com.oracle.wls.exporter</groupId>
<version>2.2.3</version>
<version>2.3.0</version>
</parent>

<artifactId>build-helper-mojo</artifactId>
<packaging>maven-plugin</packaging>

<name>Exporter Build Helper Maven Mojo</name>

<properties>
<maven.compiler.release>17</maven.compiler.release>
</properties>

<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.9.9</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>3.9.9</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-artifact</artifactId>
<version>3.9.9</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-model</artifactId>
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
// Copyright (c) 2025, Oracle and/or its affiliates.
// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.

package com.oracle.wls.buildhelper;

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;

import java.io.BufferedWriter;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Stream;

/**
* Supports generation of web applications that work on both javax-dependent and jakarta-dependent WebLogic Server
* instances. It depends on several things:
* 1. The Exporter web application uses annotations rather than an XML file to configure its servlets,
* 2. WebLogic will ignore servlets whose dependencies it cannot load
* 3. Common code in this application does not depend on classes that depend on the EE version.
* <br/>
* The plugin will look for source files that reference javax.servlet; it will report a failure if any such
* files are in packages whose last element is not "javax." It will then generate corresponding source files
* that reference the corresponding jakarta.servlet classes and place them in a package with "jakarta" instead
* of "javax" in a separate directory, and add the directory to the compiler source roots.
*/
@Mojo(name = "transform", defaultPhase = LifecyclePhase.GENERATE_SOURCES)
public class JavaxToJakartaMojo extends AbstractMojo {
/**
* The source directories containing the sources to be processed.
*/
@Parameter(defaultValue = "${project.compileSourceRoots}", required = true)
List<String> compileSourceRoots;

/**
* Specify where to place generated jakarta-based files created by this mojo.
*/
@Parameter(defaultValue = "${project.build.directory}/generated-sources/jakarta")
File generatedSourcesDirectory;

/**
* The project used as an interface to Maven internals.
*/
@Parameter(defaultValue = "${project}", readonly = true)
MavenProject project;

static Function<String, Path> toPath = Path::of;


@Override
public void execute() throws MojoExecutionException, MojoFailureException {
project.addCompileSourceRoot(generatedSourcesDirectory.getPath());

try {
getFilesToTransform().forEach(this::transformFile);
} catch (RuntimeException e) {
throw new MojoExecutionException(e);
}
}

private void transformFile(Path inputFile) {
Path outputFile = getOutputFile(inputFile);
try {
Files.createDirectories(outputFile.getParent());
transformFile(inputFile, outputFile);
} catch (IOException e) {
throw new RuntimeException("Unable to transform files", e);
}
}

private static void transformFile(Path inputFile, Path outputFile) throws IOException {
try (BufferedWriter bufferedWriter = Files.newBufferedWriter(outputFile);
Stream<String> lines = Files.lines(inputFile)) {
lines.forEach(l -> transformLine(l, bufferedWriter));
}
}

private static void transformLine(String line, BufferedWriter bufferedWriter) {
try {
bufferedWriter.write(line.replaceAll("javax", "jakarta"));
bufferedWriter.newLine();
} catch (IOException e) {
throw new RuntimeException(e.getMessage(), e);
}
}

private Path getGeneratedSourceRoot() {
return toPath.apply(generatedSourcesDirectory.getPath());
}

Stream<Path> getFilesToTransform() throws MojoFailureException {
final List<Path> selectedFiles = new ArrayList<>();

try (Stream<Path> files = Files.walk(getCompileSourceRoot())) {
files.filter(Files::isRegularFile).filter(this::containsTransformedJavaxPackage).forEach(selectedFiles::add);
} catch (IOException e) {
throw new RuntimeException(e);
}

verifySelectedFilesHaveJavaxPackage(selectedFiles);
return selectedFiles.stream();
}

private void verifySelectedFilesHaveJavaxPackage(List<Path> selectedFiles) throws MojoFailureException {
List<String> badPaths = selectedFiles.stream().filter(this::lacksJavaxFinalPackage).map(Path::toString).toList();

if (!badPaths.isEmpty())
throw new MojoFailureException("Cannot do transformation. The following classes reference javax.servlet packages " +
"but are not in a package name ending in .javax: " + String.join(", ", badPaths));
}

private boolean lacksJavaxFinalPackage(Path path) {
return !path.getParent().endsWith("javax");
}

private Path toRelativePath(Path p) {
return getCompileSourceRoot().relativize(p);
}

private Path getCompileSourceRoot() {
return toPath.apply(compileSourceRoots.get(0));
}

private boolean containsTransformedJavaxPackage(Path path) {
try {
return Files.readAllLines(path).stream().anyMatch(s -> s.contains("javax.servlet"));
} catch (IOException e) {
return false;
}
}

public Path getOutputFile(Path inputPath) {
final Path fileName = inputPath.getFileName();
final Path relativePath = toRelativePath(inputPath).getParent().getParent().resolve("jakarta");
return getGeneratedSourceRoot().resolve(relativePath).resolve(fileName);
}
}
Loading