Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoakim Erdfelt2013-08-22 21:21:52 +0000
committerJoakim Erdfelt2013-08-22 21:21:52 +0000
commitb8e1f42b379e3c046660da7e0dd79f322d824675 (patch)
treeaf1a80879a1954b58aa84d1ad2ff72559a816d3f
parent5b2d9bc825826598b450db44c483acb1b69aee0c (diff)
downloadorg.eclipse.jetty.project-b8e1f42b379e3c046660da7e0dd79f322d824675.tar.gz
org.eclipse.jetty.project-b8e1f42b379e3c046660da7e0dd79f322d824675.tar.xz
org.eclipse.jetty.project-b8e1f42b379e3c046660da7e0dd79f322d824675.zip
414635 Modular start.d and jetty.base property
+ More mod cleanup + Adding cyclic module reference detection and reporting
-rw-r--r--jetty-jndi/src/main/config/modules/jndi.mod3
-rw-r--r--jetty-plus/src/main/config/modules/plus.mod2
-rw-r--r--jetty-servlet/pom.xml17
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/Modules.java39
-rw-r--r--jetty-start/src/test/java/org/eclipse/jetty/start/ModulesTest.java11
-rw-r--r--jetty-start/src/test/resources/assert-home-with-jvm.txt21
-rw-r--r--jetty-start/src/test/resources/assert-home.txt21
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/jndi.mod3
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/plus.mod2
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/proxy.mod1
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/security.mod7
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/server.mod1
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/servlet.mod7
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/spdy.mod2
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/webapp.mod2
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/websocket.mod1
16 files changed, 114 insertions, 26 deletions
diff --git a/jetty-jndi/src/main/config/modules/jndi.mod b/jetty-jndi/src/main/config/modules/jndi.mod
index de3087bd26..cfdcc52614 100644
--- a/jetty-jndi/src/main/config/modules/jndi.mod
+++ b/jetty-jndi/src/main/config/modules/jndi.mod
@@ -3,10 +3,7 @@
#
DEPEND=server
-DEPEND=plus
LIB=lib/jetty-jndi-${jetty.version}.jar
LIB=lib/jndi/*.jar
-# Annotations needs annotations configuration
-etc/jetty-server.xml
diff --git a/jetty-plus/src/main/config/modules/plus.mod b/jetty-plus/src/main/config/modules/plus.mod
index 31d8e76b95..caa799376a 100644
--- a/jetty-plus/src/main/config/modules/plus.mod
+++ b/jetty-plus/src/main/config/modules/plus.mod
@@ -3,6 +3,8 @@
#
DEPEND=server
+DEPEND=security
+DEPEND=jndi
LIB=lib/jetty-plus-${jetty.version}.jar
diff --git a/jetty-servlet/pom.xml b/jetty-servlet/pom.xml
index c93342fc71..2fb71301dc 100644
--- a/jetty-servlet/pom.xml
+++ b/jetty-servlet/pom.xml
@@ -54,6 +54,23 @@
</executions>
</plugin>
<plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <configuration>
+ <descriptorRefs>
+ <descriptorRef>config</descriptorRef>
+ </descriptorRefs>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<configuration>
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/Modules.java b/jetty-start/src/main/java/org/eclipse/jetty/start/Modules.java
index d72c943c74..25291aedd4 100644
--- a/jetty-start/src/main/java/org/eclipse/jetty/start/Modules.java
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/Modules.java
@@ -29,6 +29,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.Stack;
/**
* Access for all modules declared, as well as what is enabled.
@@ -59,8 +60,6 @@ public class Modules implements Iterable<Module>
*/
public void buildGraph()
{
- // TODO: Validate / Enforce Directed Acyclic Graph
-
// Connect edges
for (Module module : modules.values())
{
@@ -75,6 +74,15 @@ public class Modules implements Iterable<Module>
}
}
+ // Verify there is no cyclic references
+ Stack<String> refs = new Stack<>();
+ for (Module module : modules.values())
+ {
+ refs.push(module.getName());
+ assertNoCycle(module,refs);
+ refs.pop();
+ }
+
// Calculate depth of all modules for sorting later
for (Module module : modules.values())
{
@@ -85,6 +93,33 @@ public class Modules implements Iterable<Module>
}
}
+ private void assertNoCycle(Module module, Stack<String> refs)
+ {
+ for (Module parent : module.getParentEdges())
+ {
+ if (refs.contains(parent.getName()))
+ {
+ // Cycle detected.
+ StringBuilder err = new StringBuilder();
+ err.append("A cyclic reference in the modules has been detected: ");
+ for (int i = 0; i < refs.size(); i++)
+ {
+ if (i > 0)
+ {
+ err.append(" -> ");
+ }
+ err.append(refs.get(i));
+ }
+ err.append(" -> ").append(parent.getName());
+ throw new IllegalStateException(err.toString());
+ }
+
+ refs.push(parent.getName());
+ assertNoCycle(parent,refs);
+ refs.pop();
+ }
+ }
+
public Integer count()
{
return modules.size();
diff --git a/jetty-start/src/test/java/org/eclipse/jetty/start/ModulesTest.java b/jetty-start/src/test/java/org/eclipse/jetty/start/ModulesTest.java
index 83307347f1..0d6addd7ec 100644
--- a/jetty-start/src/test/java/org/eclipse/jetty/start/ModulesTest.java
+++ b/jetty-start/src/test/java/org/eclipse/jetty/start/ModulesTest.java
@@ -39,7 +39,7 @@ public class ModulesTest
Modules modules = new Modules();
modules.registerAll(basehome);
- Assert.assertThat("Module count",modules.count(),is(24));
+ Assert.assertThat("Module count",modules.count(),is(26));
}
@Test
@@ -63,6 +63,7 @@ public class ModulesTest
// Assert names are correct, and in the right order
List<String> expectedNames = new ArrayList<>();
expectedNames.add("base");
+ expectedNames.add("xml");
expectedNames.add("server");
expectedNames.add("http");
@@ -78,6 +79,7 @@ public class ModulesTest
List<String> expectedLibs = new ArrayList<>();
expectedLibs.add("lib/jetty-util-${jetty.version}.jar");
expectedLibs.add("lib/jetty-io-${jetty.version}.jar");
+ expectedLibs.add("lib/jetty-xml-${jetty.version}.jar");
expectedLibs.add("lib/servlet-api-3.1.jar");
expectedLibs.add("lib/jetty-schemas-3.1.jar");
expectedLibs.add("lib/jetty-http-${jetty.version}.jar");
@@ -118,8 +120,11 @@ public class ModulesTest
// Assert names are correct, and in the right order
List<String> expectedNames = new ArrayList<>();
expectedNames.add("base");
+ expectedNames.add("xml");
expectedNames.add("server");
expectedNames.add("http");
+ expectedNames.add("jndi");
+ expectedNames.add("security");
expectedNames.add("plus");
expectedNames.add("annotations");
expectedNames.add("websocket");
@@ -136,11 +141,15 @@ public class ModulesTest
List<String> expectedLibs = new ArrayList<>();
expectedLibs.add("lib/jetty-util-${jetty.version}.jar");
expectedLibs.add("lib/jetty-io-${jetty.version}.jar");
+ expectedLibs.add("lib/jetty-xml-${jetty.version}.jar");
expectedLibs.add("lib/servlet-api-3.1.jar");
expectedLibs.add("lib/jetty-schemas-3.1.jar");
expectedLibs.add("lib/jetty-http-${jetty.version}.jar");
expectedLibs.add("lib/jetty-continuation-${jetty.version}.jar");
expectedLibs.add("lib/jetty-server-${jetty.version}.jar");
+ expectedLibs.add("lib/jetty-jndi-${jetty.version}.jar");
+ expectedLibs.add("lib/jndi/*.jar");
+ expectedLibs.add("lib/jetty-security-${jetty.version}.jar");
expectedLibs.add("lib/jetty-plus-${jetty.version}.jar");
expectedLibs.add("lib/jetty-annotations-${jetty.version}.jar");
expectedLibs.add("lib/annotations/*.jar");
diff --git a/jetty-start/src/test/resources/assert-home-with-jvm.txt b/jetty-start/src/test/resources/assert-home-with-jvm.txt
index 18337a5d69..03d38cea2d 100644
--- a/jetty-start/src/test/resources/assert-home-with-jvm.txt
+++ b/jetty-start/src/test/resources/assert-home-with-jvm.txt
@@ -8,18 +8,23 @@ XML|${jetty.home}/etc/jetty-websockets.xml
XML|${jetty.home}/etc/jetty-logging.xml
# The LIBs we expect (order is irrelevant)
-LIB|${jetty.home}/lib/jetty-http-TEST.jar
-LIB|${jetty.home}/lib/jetty-util-TEST.jar
-LIB|${jetty.home}/lib/jetty-schemas-3.1.jar
-LIB|${jetty.home}/lib/jetty-jmx-TEST.jar
LIB|${jetty.home}/lib/annotations/javax.annotation-api-1.2.jar
-LIB|${jetty.home}/lib/servlet-api-3.1.jar
+LIB|${jetty.home}/lib/annotations/org.objectweb.asm-TEST.jar
LIB|${jetty.home}/lib/jetty-annotations-TEST.jar
-LIB|${jetty.home}/lib/jetty-plus-TEST.jar
-LIB|${jetty.home}/lib/jetty-io-TEST.jar
LIB|${jetty.home}/lib/jetty-continuation-TEST.jar
-LIB|${jetty.home}/lib/annotations/org.objectweb.asm-TEST.jar
+LIB|${jetty.home}/lib/jetty-http-TEST.jar
+LIB|${jetty.home}/lib/jetty-io-TEST.jar
+LIB|${jetty.home}/lib/jetty-jmx-TEST.jar
+LIB|${jetty.home}/lib/jetty-jndi-TEST.jar
+LIB|${jetty.home}/lib/jetty-plus-TEST.jar
+LIB|${jetty.home}/lib/jetty-schemas-3.1.jar
+LIB|${jetty.home}/lib/jetty-security-TEST.jar
LIB|${jetty.home}/lib/jetty-server-TEST.jar
+LIB|${jetty.home}/lib/jetty-util-TEST.jar
+LIB|${jetty.home}/lib/jetty-xml-TEST.jar
+LIB|${jetty.home}/lib/jndi/javax.activation-1.1.jar
+LIB|${jetty.home}/lib/jndi/javax.transaction-api-1.2.jar
+LIB|${jetty.home}/lib/servlet-api-3.1.jar
# The Properties we expect (order is irrelevant)
# PROP|jetty.port=9090
diff --git a/jetty-start/src/test/resources/assert-home.txt b/jetty-start/src/test/resources/assert-home.txt
index a0c1a8eaf3..1349723c15 100644
--- a/jetty-start/src/test/resources/assert-home.txt
+++ b/jetty-start/src/test/resources/assert-home.txt
@@ -7,18 +7,23 @@ XML|${jetty.home}/etc/jetty-annotations.xml
XML|${jetty.home}/etc/jetty-websockets.xml
# The LIBs we expect (order is irrelevant)
-LIB|${jetty.home}/lib/jetty-http-TEST.jar
-LIB|${jetty.home}/lib/jetty-util-TEST.jar
-LIB|${jetty.home}/lib/jetty-schemas-3.1.jar
-LIB|${jetty.home}/lib/jetty-jmx-TEST.jar
LIB|${jetty.home}/lib/annotations/javax.annotation-api-1.2.jar
-LIB|${jetty.home}/lib/servlet-api-3.1.jar
+LIB|${jetty.home}/lib/annotations/org.objectweb.asm-TEST.jar
LIB|${jetty.home}/lib/jetty-annotations-TEST.jar
-LIB|${jetty.home}/lib/jetty-plus-TEST.jar
-LIB|${jetty.home}/lib/jetty-io-TEST.jar
LIB|${jetty.home}/lib/jetty-continuation-TEST.jar
-LIB|${jetty.home}/lib/annotations/org.objectweb.asm-TEST.jar
+LIB|${jetty.home}/lib/jetty-http-TEST.jar
+LIB|${jetty.home}/lib/jetty-io-TEST.jar
+LIB|${jetty.home}/lib/jetty-jmx-TEST.jar
+LIB|${jetty.home}/lib/jetty-jndi-TEST.jar
+LIB|${jetty.home}/lib/jetty-plus-TEST.jar
+LIB|${jetty.home}/lib/jetty-schemas-3.1.jar
+LIB|${jetty.home}/lib/jetty-security-TEST.jar
LIB|${jetty.home}/lib/jetty-server-TEST.jar
+LIB|${jetty.home}/lib/jetty-util-TEST.jar
+LIB|${jetty.home}/lib/jetty-xml-TEST.jar
+LIB|${jetty.home}/lib/jndi/javax.activation-1.1.jar
+LIB|${jetty.home}/lib/jndi/javax.transaction-api-1.2.jar
+LIB|${jetty.home}/lib/servlet-api-3.1.jar
# The Properties we expect (order is irrelevant)
PROP|jetty.port=9090
diff --git a/jetty-start/src/test/resources/usecases/home/modules/jndi.mod b/jetty-start/src/test/resources/usecases/home/modules/jndi.mod
index de3087bd26..cfdcc52614 100644
--- a/jetty-start/src/test/resources/usecases/home/modules/jndi.mod
+++ b/jetty-start/src/test/resources/usecases/home/modules/jndi.mod
@@ -3,10 +3,7 @@
#
DEPEND=server
-DEPEND=plus
LIB=lib/jetty-jndi-${jetty.version}.jar
LIB=lib/jndi/*.jar
-# Annotations needs annotations configuration
-etc/jetty-server.xml
diff --git a/jetty-start/src/test/resources/usecases/home/modules/plus.mod b/jetty-start/src/test/resources/usecases/home/modules/plus.mod
index 31d8e76b95..caa799376a 100644
--- a/jetty-start/src/test/resources/usecases/home/modules/plus.mod
+++ b/jetty-start/src/test/resources/usecases/home/modules/plus.mod
@@ -3,6 +3,8 @@
#
DEPEND=server
+DEPEND=security
+DEPEND=jndi
LIB=lib/jetty-plus-${jetty.version}.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/proxy.mod b/jetty-start/src/test/resources/usecases/home/modules/proxy.mod
index 9e2bc46db8..5ab6e70a88 100644
--- a/jetty-start/src/test/resources/usecases/home/modules/proxy.mod
+++ b/jetty-start/src/test/resources/usecases/home/modules/proxy.mod
@@ -3,6 +3,7 @@
#
DEPEND=server
+DEPEND=client
LIB=lib/jetty-proxy-${jetty.version}.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/security.mod b/jetty-start/src/test/resources/usecases/home/modules/security.mod
new file mode 100644
index 0000000000..5a3c4a368a
--- /dev/null
+++ b/jetty-start/src/test/resources/usecases/home/modules/security.mod
@@ -0,0 +1,7 @@
+#
+# Jetty Security Module
+#
+
+DEPEND=server
+
+LIB=lib/jetty-security-${jetty.version}.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/server.mod b/jetty-start/src/test/resources/usecases/home/modules/server.mod
index 06bf6772f5..aa6cad6b0e 100644
--- a/jetty-start/src/test/resources/usecases/home/modules/server.mod
+++ b/jetty-start/src/test/resources/usecases/home/modules/server.mod
@@ -3,6 +3,7 @@
#
DEPEND=base
+DEPEND=xml
LIB=lib/servlet-api-3.1.jar
LIB=lib/jetty-schemas-3.1.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/servlet.mod b/jetty-start/src/test/resources/usecases/home/modules/servlet.mod
new file mode 100644
index 0000000000..a427eed547
--- /dev/null
+++ b/jetty-start/src/test/resources/usecases/home/modules/servlet.mod
@@ -0,0 +1,7 @@
+#
+# Jetty Servlet Module
+#
+
+DEPEND=server
+
+LIB=lib/jetty-servlet-${jetty.version}.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/spdy.mod b/jetty-start/src/test/resources/usecases/home/modules/spdy.mod
index 4a70136f55..1f3d5e9961 100644
--- a/jetty-start/src/test/resources/usecases/home/modules/spdy.mod
+++ b/jetty-start/src/test/resources/usecases/home/modules/spdy.mod
@@ -1,5 +1,7 @@
DEPEND=server
+LIB=lib/spdy/*.jar
+
etc/jetty-ssl.xml
etc/jetty-spdy.xml
diff --git a/jetty-start/src/test/resources/usecases/home/modules/webapp.mod b/jetty-start/src/test/resources/usecases/home/modules/webapp.mod
index 187db774b6..c39d5aae06 100644
--- a/jetty-start/src/test/resources/usecases/home/modules/webapp.mod
+++ b/jetty-start/src/test/resources/usecases/home/modules/webapp.mod
@@ -2,6 +2,6 @@
# Base server
#
-DEPEND=deploy
+DEPEND=servlet
LIB=lib/jetty-webapp-${jetty.version}.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/websocket.mod b/jetty-start/src/test/resources/usecases/home/modules/websocket.mod
index b8571fb12a..e61ec33e18 100644
--- a/jetty-start/src/test/resources/usecases/home/modules/websocket.mod
+++ b/jetty-start/src/test/resources/usecases/home/modules/websocket.mod
@@ -11,3 +11,4 @@ LIB=lib/websockets/*.jar
# WebSocket needs websocket configuration
etc/jetty-websockets.xml
+

Back to the top