Skip to content

Commit a064a1c

Browse files
committed
Ready for Lyon JUG
1 parent ddf09c1 commit a064a1c

21 files changed

Lines changed: 2030 additions & 179 deletions

File tree

README

Lines changed: 83 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -31,31 +31,31 @@ export PATH=$JAVA_HOME/bin:$PATH
3131

3232
Rem. : le script doit subir quelques améliorations, par exemple pour la copie de jboss-module.jar
3333

34-
Démo 1 : classpath & bootclasspath
34+
Démo 1 : classpath
3535
-----------
3636

3737
# Build with maven
3838
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
3939
../classpath-demo/scripts/prepare-classpath.sh
4040

4141
# Ça ne marche pas
42-
java fr.sewatech.classpath.Count 40 45
42+
java fr.sewatech.classpath.example.Count 40 45
4343

4444
# Ça marche
45-
java -cp lib/message-launcher.jar fr.sewatech.classpath.Count 40 45
45+
java -cp lib/misc-example.jar fr.sewatech.classpath.example.Count 40 45
46+
47+
Démo 2 : bootclasspath
48+
-----------
4649

4750
# Court-circuiter le Integer par défaut
48-
java -Xbootclasspath/p:lib/message-launcher.jar fr.sewatech.classpath.Count 40 45
51+
java -Xbootclasspath/p:lib/misc-example.jar fr.sewatech.classpath.example.Count 40 45
4952

5053
# En théorie, le endorsed ne devrait pas avoir d'effet sur Integer. En réalité,...
51-
java -Djava.endorsed.dirs=lib fr.sewatech.classpath.Count 40 45
54+
java -Djava.endorsed.dirs=lib fr.sewatech.classpath.example.Count 40 45
5255

53-
Démo 2 : URLClassLoader & custom ClassLoader
56+
Démo 3 : URLClassLoader
5457
-----------
5558

56-
# Build (dans le bon répertoire)
57-
cd ../classpath-demo; mvn install; cd ../classpath-demo-work
58-
5959
# Ça ne marche pas
6060
java -cp lib/message-launcher.jar fr.sewatech.classpath.Hello
6161

@@ -68,6 +68,12 @@ java -cp lib/message-launcher.jar fr.sewatech.classpath.HelloViaURL
6868
# Ça ne marche pas
6969
java -cp lib/message-launcher.jar:lib/message-service.jar fr.sewatech.classpath.HelloViaURL
7070

71+
Démo 4 : Custom ClassLoader
72+
-----------
73+
74+
# Build (dans le bon répertoire)
75+
cd ../classpath-demo; mvn install; cd ../classpath-demo-work
76+
7177
# Ça marche
7278
java -cp lib/message-launcher.jar fr.sewatech.classpath.HelloViaMvnRepo 2.0-SNAPSHOT
7379
# Ça marche
@@ -78,13 +84,13 @@ java -cp lib/message-launcher.jar:lib/message-service.jar fr.sewatech.classpath.
7884
# Ça marche
7985
java -cp lib/message-launcher.jar:lib/message-service.jar fr.sewatech.classpath.HelloViaMvnRepo 2.0-SNAPSHOT local
8086

81-
Démo 3 : jar hell
87+
Démo 5 : jar hell
8288
-----------
8389

8490
# Ça ne marche pas
8591
java -cp "lib/*" fr.sewatech.classpath.Hello log
8692

87-
Démo 4 : jboss modules
93+
Démo 6 : jboss modules
8894
-----------
8995

9096
# Build (dans le bon répertoire)
@@ -95,19 +101,76 @@ java -jar jboss-modules/jboss-modules.jar -mp jboss-modules fr.sewatech.message-
95101
# Ça marche, mieux qu'avant
96102
java -jar jboss-modules/jboss-modules.jar -mp jboss-modules fr.sewatech.message-launcher log
97103

98-
Démo 5a : java 9 - mode classpath
104+
Démo 7 : jigsaw
105+
-----------
106+
107+
# OK
108+
java --module-path jigsaw-modules -m message.launcher/fr.sewatech.classpath.Hello
109+
# KO
110+
java --module-path jigsaw-modules -m message.launcher/fr.sewatech.classpath.Hello log
111+
112+
Démo 8 : modular JDK
99113
-----------
100114

101-
export JAVA_HOME=~/Projet/hasalex/jigsaw/jdk-9b134.jdk/Contents/Home
115+
# compiler misc-example sans "requires java.xml.bind"
116+
117+
Démo 9 : jigsaw - mode classpath
118+
-----------
102119

103-
# Ça ne marche toujours pas
104-
java fr.sewatech.classpath.Count 40 45
105120
# Ça marche encore
106-
java -cp lib/message-launcher.jar fr.sewatech.classpath.Count 40 45
121+
java -cp jigsaw-modules/misc-examples.jar fr.sewatech.classpath.example.Count 40 45
122+
java -cp "jigsaw-modules/*" fr.sewatech.classpath.Hello
123+
124+
# Ça ne marche plus
125+
java -cp lib/misc-examples.jar fr.sewatech.classpath.example.JaxBExample
126+
# Ça marche
127+
java --add-modules java.xml.bind -cp lib/misc-examples.jar fr.sewatech.classpath.example.JaxBExample
128+
129+
Démo 10 : requires
130+
-----------
131+
132+
# Montrer le code
133+
# - automatic module
134+
135+
# Dans message-service
136+
# virer "requires message.common"
137+
# => compile HS
138+
139+
# Dans message-printer
140+
# passer "requires message.common" en transitive
141+
142+
# static / optional
143+
java --module-path jigsaw-modules -m misc.examples/fr.sewatech.classpath.example.JaxBExample
144+
# dans misc-example, mettre "requires java.xml.bind" en static
145+
java --module-path jigsaw-modules -m misc.examples/fr.sewatech.classpath.example.JaxBExample
146+
java --add-modules java.xml.bind --module-path jigsaw-modules -m misc.examples/fr.sewatech.classpath.example.JaxBExample
147+
148+
Démo 11 : export
149+
-----------
150+
151+
# Patch slf4j with scripts/prepare-slf4j.sh
152+
java --module-path jigsaw-modules -m message.launcher/fr.sewatech.classpath.Hello log
153+
# l'erreur est plus explicite ; si on avait eu ce jar à la compilation,l'erreur aurait eu lieu à la compilation
154+
155+
Démo 12 : classloader
156+
-----------
157+
158+
# OK
159+
java -cp jigsaw-modules/message-launcher.jar fr.sewatech.classpath.HelloViaURL
160+
# KO
161+
java -cp jigsaw-modules/message-launcher.jar:lib/message-service.jar fr.sewatech.classpath.HelloViaURL
162+
107163
# Erreur : -Xbootclasspath/p is no longer a supported option
108-
java -Xbootclasspath/p:lib/message-launcher.jar fr.sewatech.classpath.Count 40 45
164+
java -Xbootclasspath/p:jigsaw-modules/misc-examples.jar fr.sewatech.classpath.example.Count 40 45
109165
# Erreur : -Djava.endorsed.dirs=lib is not supported
110-
java -Djava.endorsed.dirs=lib fr.sewatech.classpath.Count 40 45
166+
java -Djava.endorsed.dirs=lib fr.sewatech.classpath.example.Count 40 45
167+
168+
# Prepare patch with scripts/prepare-patch.sh
169+
java --module-path jigsaw-modules -m misc.examples/fr.sewatech.classpath.example.Count
170+
java --patch-module java.base=../classpath-demo/misc-examples/target/patch-classes --module-path jigsaw-modules -m misc.examples/fr.sewatech.classpath.example.Count
171+
172+
Annexe
173+
-----------
111174

112175
# KO
113176
java -cp lib/message-launcher.jar fr.sewatech.classpath.Hello
@@ -132,15 +195,10 @@ java -cp "lib/*" fr.sewatech.classpath.Hello log
132195
java -cp lib/misc-examples.jar fr.sewatech.classpath.example.StandardClassLoading
133196
java --add-modules java.xml.bind -cp lib/misc-examples.jar fr.sewatech.classpath.example.StandardClassLoading
134197

135-
Démo 5b : java 9 - jigsaw
136-
-----------
137-
138-
# Build (dans le bon répertoire) avec JDK 9 mais pas plus que build 134
139-
export JAVA_HOME=~/Projet/hasalex/jigsaw/jdk-9b134.jdk/Contents/Home
198+
# Build (dans le bon répertoire) avec JDK 9 avec jigsaw-nightly
199+
export JAVA_HOME=~/Projet/hasalex/jigsaw/jdk-9b138.jdk/Contents/Home
140200
cd ../classpath-demo; mvn clean install -Pjigsaw; cd ../classpath-demo-work
141201

142-
# OK
143-
java --module-path jigsaw-modules -m message.launcher/fr.sewatech.classpath.Hello
144202
# OK
145203
java --module-path jigsaw-modules -m message.launcher/fr.sewatech.classpath.HelloViaURL
146204
# OK
@@ -149,16 +207,7 @@ java --module-path jigsaw-modules -m message.launcher/fr.sewatech.classpath.Hell
149207
# KO
150208
java --module-path jigsaw-modules -m message.launcher/fr.sewatech.classpath.Hello log
151209

152-
# => expliquer les modules, requires, exports
153-
# => expliquer les modules automatiques
154-
155210
# Modules vs Classpath : aucun changement visible
156211
# classpath = unnamed module
157212
java --add-modules java.xml.bind -cp lib/misc-examples.jar fr.sewatech.classpath.example.StandardClassLoading
158213
java --module-path jigsaw-modules -m misc.examples/fr.sewatech.classpath.example.StandardClassLoading
159-
160-
Démo 6 : java 9 - jigsaw++
161-
-----------
162-
163-
# JDK 9 b136 - avec jigsaw nightly
164-
export JAVA_HOME=~/Projet/hasalex/jigsaw/jdk-9b136.jdk/Contents/Home

message-launcher/src/main/java/fr/sewatech/classloader/MavenRepositoryLocalFirstClassLoader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package fr.sewatech.classloader;
22

3-
public class MavenRepositoryLocalFirstClassLoader extends MavenRepositoryClassLoader {
3+
public class MavenRepositoryLocalFirstClassLoader extends MavenRepositoryParentFirstClassLoader {
44
public MavenRepositoryLocalFirstClassLoader(String[] artefacts) {
55
super(artefacts);
66
}

message-launcher/src/main/java/fr/sewatech/classloader/MavenRepositoryClassLoader.java renamed to message-launcher/src/main/java/fr/sewatech/classloader/MavenRepositoryParentFirstClassLoader.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
import java.net.URL;
66
import java.net.URLClassLoader;
77

8-
public class MavenRepositoryClassLoader extends URLClassLoader {
9-
public MavenRepositoryClassLoader(String[] artefacts) {
8+
public class MavenRepositoryParentFirstClassLoader extends URLClassLoader {
9+
public MavenRepositoryParentFirstClassLoader(String[] artefacts) {
1010
super(new URL[]{});
1111
for (String artefact : artefacts) {
1212
try {

message-launcher/src/main/java/fr/sewatech/classpath/Hello.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@
44

55
public class Hello {
66
public static void main(String[] args) throws Exception {
7-
if (args.length > 0 && args[0].startsWith("log")) {
8-
new Service(System.out).hello(true);
9-
} else {
10-
new Service(System.out).hello(false);
11-
}
7+
boolean doLog = args.length > 0 && args[0].startsWith("log");
8+
new Service(System.out).hello(doLog);
129
}
1310
}

message-launcher/src/main/java/fr/sewatech/classpath/HelloViaMvnRepo.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package fr.sewatech.classpath;
22

3-
import fr.sewatech.classloader.MavenRepositoryClassLoader;
3+
import fr.sewatech.classloader.MavenRepositoryParentFirstClassLoader;
44
import fr.sewatech.classloader.MavenRepositoryLocalFirstClassLoader;
55

66
import java.io.OutputStream;
@@ -18,7 +18,7 @@ public static void main(String[] args) throws Exception {
1818
}
1919

2020
String[] artefacts = {
21-
"fr.sewatech.conference:message-main:" + version,
21+
"fr.sewatech.conference:message-service:" + version,
2222
"fr.sewatech.conference:message-common:" + version,
2323
"fr.sewatech.conference:message-printer:" + version,
2424
"org.slf4j:slf4j-api:1.5.11"
@@ -27,7 +27,7 @@ public static void main(String[] args) throws Exception {
2727
if (args.length > 1 && args[1].equals("local")) {
2828
classLoader = new MavenRepositoryLocalFirstClassLoader(artefacts);
2929
} else {
30-
classLoader = new MavenRepositoryClassLoader(artefacts);
30+
classLoader = new MavenRepositoryParentFirstClassLoader(artefacts);
3131
}
3232

3333
Class<?> mainClass = Class.forName("fr.sewatech.message.Service",
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
module message.printer {
22
requires message.common;
33
requires slf4j.api;
4-
exports fr.sewatech.message.printer;
4+
exports private fr.sewatech.message.printer;
55
}

message-service/src/main/java/fr/sewatech/message/Service.java

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,9 @@
99
import java.util.ArrayList;
1010
import java.util.List;
1111
import java.util.concurrent.ThreadLocalRandom;
12-
import java.util.stream.Collectors;
1312

1413
public class Service {
1514

16-
private static final String PREFIX = "Salut à toi";
17-
1815
private List<String> lines;
1916

2017
public static void main(String[] args) {
@@ -25,24 +22,20 @@ public static void main(String[] args) {
2522

2623
public Service(OutputStream outputStream) {
2724
this.outputStream = new PrintStream(outputStream);
28-
29-
lines = readAllLines("/lyrics.txt")
30-
.stream()
31-
.filter(line -> line.startsWith(PREFIX))
32-
.map(line -> line.substring(PREFIX.length() + 1))
33-
.collect(Collectors.toList());
25+
this.lines = readAllLines("/lyrics-lite.txt");
3426
}
3527

3628
public void hello(boolean withLog) {
3729
Printer printer = new MessagePrinter(outputStream);
3830
String line = lines.get(ThreadLocalRandom.current().nextInt(lines.size()));
39-
Message message = new Message(PREFIX + " {}", line);
31+
Message message = new Message("Salut à toi {}", line);
4032
printer.print(message);
41-
if (withLog) log(message);
33+
if (withLog) log(line);
4234
}
4335

44-
private void log(Message message) {
45-
System.err.println("*** LOG : " + MessageFormatter.arrayFormat(message.getTemplate(), message.getParams()).getMessage() + " ***\n");
36+
private void log(String... text) {
37+
System.err.println("*** LOG : " + MessageFormatter.arrayFormat("Message to \"{}\"", text)
38+
.getMessage() + " ***\n");
4639
}
4740

4841
private List<String> readAllLines(String path) {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
le monde

0 commit comments

Comments
 (0)