Moderne OnlyThis recipe is proprietary to Moderne and runs on the Moderne platform or CLI — it isn’t part of the open-source catalog. Available with a Moderne subscription.
Create Tomcat server source file
Recipe ID
io.moderne.java.server.jboss.tomcat.CreateTomcatSourceFileArtifact
io.moderne.recipe:rewrite-java-application-serverOptions
Examples
java
| Parameter | Value |
|---|---|
| packageName | com.example |
| contextPath | /myapp |
| port | 9090 |
Unchanged
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<context-root>/myapp</context-root>
</jboss-web>
- java
New file
package com.example;
import org.apache.catalina.Context;
import org.apache.catalina.WebResourceRoot;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.webresources.DirResourceSet;
import org.apache.catalina.webresources.JarResourceSet;
import org.apache.catalina.webresources.StandardRoot;
import java.io.File;
import java.net.URL;
public class TomcatServer {
private static final int DEFAULT_PORT = 9090;
private static final String CONTEXT_PATH = "/myapp";
public static void main(String[] args) throws Exception {
Tomcat tomcat = new Tomcat();
tomcat.setPort(DEFAULT_PORT);
tomcat.getConnector();
File baseDir = new File(System.getProperty("java.io.tmpdir"), "tomcat-" + DEFAULT_PORT);
baseDir.mkdirs();
tomcat.setBaseDir(baseDir.getAbsolutePath());
URL resource = TomcatServer.class.getClassLoader().getResource("webapp");
if (resource == null) {
throw new IllegalStateException("webapp directory not found on classpath");
}
File docBase = new File(baseDir, "docBase");
docBase.mkdirs();
Context ctx = tomcat.addWebapp(CONTEXT_PATH, docBase.getAbsolutePath());
WebResourceRoot resources = new StandardRoot(ctx);
if ("file".equals(resource.getProtocol())) {
resources.addPreResources(new DirResourceSet(resources, "/",
new File(resource.toURI()).getAbsolutePath(), "/"));
} else {
String jarPath = resource.getPath();
jarPath = jarPath.substring(jarPath.indexOf(":") + 1, jarPath.indexOf("!"));
resources.addPreResources(new JarResourceSet(resources, "/", jarPath, "/webapp"));
}
ctx.setResources(resources);
tomcat.start();
tomcat.getServer().await();
}
}
Usage
Run this recipe
You will need to have configured the Moderne CLI on your machine before you can run the following command.
shell
mod run . --recipe CreateTomcatSourceFile --recipe-option "packageName=com.example.tomcat" --recipe-option "contextPath=/myapp" --recipe-option "port=8080"
If the recipe is not available locally, then you can install it using:
mod config recipes jar install io.moderne.recipe:rewrite-java-application-server:0.7.3
Data tables
Source files that had results
org.openrewrite.table.SourcesFileResultsSource files that were modified by the recipe run.
| Column | Description |
|---|---|
| Source path before the run | The source path of the file before the run. null when a source file was created during the run. |
| Source path after the run | A recipe may modify the source path. This is the path after the run. null when a source file was deleted during the run. |
| Parent of the recipe that made changes | In a hierarchical recipe, the parent of the recipe that made a change. Empty if this is the root of a hierarchy or if the recipe is not hierarchical at all. |
| Recipe that made changes | The specific recipe that made a change. |
| Estimated time saving | An estimated effort that a developer to fix manually instead of using this recipe, in unit of seconds. |
| Cycle | The recipe cycle in which the change was made. |
Source files that had search results
org.openrewrite.table.SearchResultsSearch results that were found during the recipe run.
| Column | Description |
|---|---|
| Source path of search result before the run | The source path of the file with the search result markers present. |
| Source path of search result after run the run | A recipe may modify the source path. This is the path after the run. null when a source file was deleted during the run. |
| Result | The trimmed printed tree of the LST element that the marker is attached to. |
| Description | The content of the description of the marker. |
| Recipe that added the search marker | The specific recipe that added the Search marker. |
Source files that errored on a recipe
org.openrewrite.table.SourcesFileErrorsThe details of all errors produced by a recipe run.
| Column | Description |
|---|---|
| Source path | The file that failed to parse. |
| Recipe that made changes | The specific recipe that made a change. |
| Stack trace | The stack trace of the failure. |
Recipe performance
org.openrewrite.table.RecipeRunStatsStatistics used in analyzing the performance of recipes.
| Column | Description |
|---|---|
| The recipe | The recipe whose stats are being measured both individually and cumulatively. |
| Source file count | The number of source files the recipe ran over. |
| Source file changed count | The number of source files which were changed in the recipe run. Includes files created, deleted, and edited. |
| Cumulative scanning time (ns) | The total time spent across the scanning phase of this recipe. |
| Max scanning time (ns) | The max time scanning any one source file. |
| Cumulative edit time (ns) | The total time spent across the editing phase of this recipe. |
| Max edit time (ns) | The max time editing any one source file. |