Skip to content

Commit a7a5871

Browse files
committed
rxjava module fix #350
1 parent 3633963 commit a7a5871

16 files changed

Lines changed: 780 additions & 12 deletions

File tree

coverage-report/pom.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
<source>${project.parent.basedir}/jooby-executor/src/main/java</source>
6969
<source>${project.parent.basedir}/jooby-querydsl/src/main/java</source>
7070
<source>${project.parent.basedir}/jooby-sitemap/src/main/java</source>
71+
<source>${project.parent.basedir}/jooby-rxjava/src/main/java</source>
7172
</sources>
7273
</configuration>
7374
</execution>
@@ -115,6 +116,7 @@
115116
<source>${project.parent.basedir}/jooby-executor/src/test/java</source>
116117
<source>${project.parent.basedir}/jooby-querydsl/src/test/java</source>
117118
<source>${project.parent.basedir}/jooby-sitemap/src/test/java</source>
119+
<source>${project.parent.basedir}/jooby-rxjava/src/test/java</source>
118120
</sources>
119121
</configuration>
120122
</execution>
@@ -341,6 +343,12 @@
341343
<version>${project.version}</version>
342344
</dependency>
343345

346+
<dependency>
347+
<groupId>org.jooby</groupId>
348+
<artifactId>jooby-rxjava</artifactId>
349+
<version>${project.version}</version>
350+
</dependency>
351+
344352
<!-- H2 database -->
345353
<dependency>
346354
<groupId>com.h2database</groupId>

coverage-report/src/test/java/org/jooby/executor/ExecFeature.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,6 @@ public class ExecFeature extends ServerFeature {
3232

3333
@Test
3434
public void forkJoinPool() throws Exception {
35-
request().get("/forkjoin").expect("forkjoin");
35+
request().get("/forkjoin").expect("forkjoin-1");
3636
}
3737
}

coverage-report/src/test/java/org/jooby/issues/Issue350.java renamed to coverage-report/src/test/java/org/jooby/issues/Issue349b.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import org.jooby.test.ServerFeature;
88
import org.junit.Test;
99

10-
public class Issue350 extends ServerFeature {
10+
public class Issue349b extends ServerFeature {
1111
@Path("/mvc")
1212
public static class Resource {
1313

jooby-executor/src/main/java/org/jooby/exec/Exec.java

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
import java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory;
3636
import java.util.concurrent.ForkJoinWorkerThread;
3737
import java.util.concurrent.ThreadFactory;
38+
import java.util.concurrent.atomic.AtomicLong;
39+
import java.util.function.BiConsumer;
3840
import java.util.function.Supplier;
3941

4042
import org.jooby.Env;
@@ -169,6 +171,9 @@
169171
*/
170172
public class Exec implements Module {
171173

174+
private static final BiConsumer<String, Executor> NOOP = (n, e) -> {
175+
};
176+
172177
/** The logging system. */
173178
private final Logger log = LoggerFactory.getLogger(getClass());
174179

@@ -189,6 +194,16 @@ public class Exec implements Module {
189194
return new ForkJoinPool(n, fjwtf(name), null, asyncMode);
190195
});
191196

197+
private String namespace;
198+
199+
protected Exec(final String namespace) {
200+
this.namespace = namespace;
201+
}
202+
203+
public Exec() {
204+
this("executors");
205+
}
206+
192207
/**
193208
* Defined the default value for daemon. This value is used when a executor spec doesn't define a
194209
* value for daemon. Default is: <code>true</code>
@@ -216,14 +231,21 @@ public Exec priority(final int priority) {
216231

217232
@Override
218233
public Config config() {
219-
return ConfigFactory.empty("exec.conf").withValue("executors",
234+
return ConfigFactory.empty("exec.conf").withValue(namespace,
220235
ConfigValueFactory.fromAnyRef("fixed"));
221236
}
222237

223238
@Override
224239
public void configure(final Env env, final Config conf, final Binder binder) {
225-
List<Map<String, Object>> executors = executors(conf.getValue("executors"), daemon, priority,
226-
Runtime.getRuntime().availableProcessors());
240+
configure(env, conf, binder, NOOP);
241+
}
242+
243+
protected void configure(final Env env, final Config conf, final Binder binder,
244+
final BiConsumer<String, Executor> callback) {
245+
List<Map<String, Object>> executors = conf.hasPath(namespace)
246+
? executors(conf.getValue(namespace), daemon, priority,
247+
Runtime.getRuntime().availableProcessors())
248+
: Collections.emptyList();
227249
List<Entry<String, ExecutorService>> services = new ArrayList<>(executors.size());
228250
for (Map<String, Object> options : executors) {
229251
// thread factory options
@@ -246,6 +268,7 @@ public void configure(final Env env, final Config conf, final Binder binder) {
246268
options);
247269

248270
bind(binder, name, executor);
271+
callback.accept(name, executor);
249272

250273
services.add(Maps.immutableEntry(name, executor));
251274
}
@@ -292,18 +315,20 @@ private static Set<Class> collector(final Class type) {
292315

293316
private static ThreadFactory factory(final String name, final boolean daemon,
294317
final int priority) {
318+
AtomicLong id = new AtomicLong(0);
295319
return r -> {
296-
Thread thread = new Thread(r, name);
320+
Thread thread = new Thread(r, name + "-" + id.incrementAndGet());
297321
thread.setDaemon(daemon);
298322
thread.setPriority(priority);
299323
return thread;
300324
};
301325
}
302326

303327
private static ForkJoinWorkerThreadFactory fjwtf(final String name) {
328+
AtomicLong id = new AtomicLong();
304329
return pool -> {
305330
ForkJoinWorkerThread thread = ForkJoinPool.defaultForkJoinWorkerThreadFactory.newThread(pool);
306-
thread.setName(name);
331+
thread.setName(name + "-" + id.incrementAndGet());
307332
return thread;
308333
};
309334
}

jooby-executor/src/test/java/org/jooby/exec/ExecTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ public void threadFactory() throws Exception {
146146
.expect(unit -> {
147147
Thread t = unit.constructor(Thread.class)
148148
.args(Runnable.class, String.class)
149-
.build(unit.get(Runnable.class), "default");
149+
.build(unit.get(Runnable.class), "default-1");
150150
t.setDaemon(true);
151151
t.setPriority(Thread.NORM_PRIORITY);
152152
})
@@ -170,7 +170,7 @@ public void threadFactoryNotDaemonMaxPriority() throws Exception {
170170
.expect(unit -> {
171171
Thread t = unit.constructor(Thread.class)
172172
.args(Runnable.class, String.class)
173-
.build(unit.get(Runnable.class), "default");
173+
.build(unit.get(Runnable.class), "default-1");
174174
t.setDaemon(false);
175175
t.setPriority(Thread.MAX_PRIORITY);
176176
})

jooby-rxjava/pom.xml

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4+
5+
<parent>
6+
<groupId>org.jooby</groupId>
7+
<artifactId>jooby-project</artifactId>
8+
<version>1.0.0.CR2</version>
9+
</parent>
10+
11+
<modelVersion>4.0.0</modelVersion>
12+
<artifactId>jooby-rxjava</artifactId>
13+
14+
<name>RxJava module</name>
15+
16+
<build>
17+
<plugins>
18+
<!-- sure-fire -->
19+
<plugin>
20+
<groupId>org.apache.maven.plugins</groupId>
21+
<artifactId>maven-surefire-plugin</artifactId>
22+
<configuration>
23+
<includes>
24+
<include>**/*Test.java</include>
25+
<include>**/*Feature.java</include>
26+
<include>**/Issue*.java</include>
27+
</includes>
28+
</configuration>
29+
</plugin>
30+
31+
</plugins>
32+
</build>
33+
34+
<dependencies>
35+
<!-- Jooby executor-->
36+
<dependency>
37+
<groupId>org.jooby</groupId>
38+
<artifactId>jooby-executor</artifactId>
39+
</dependency>
40+
41+
<dependency>
42+
<groupId>io.reactivex</groupId>
43+
<artifactId>rxjava</artifactId>
44+
</dependency>
45+
46+
<!-- Test dependencies -->
47+
<dependency>
48+
<groupId>org.jooby</groupId>
49+
<artifactId>jooby</artifactId>
50+
<version>${project.version}</version>
51+
<scope>test</scope>
52+
<classifier>tests</classifier>
53+
</dependency>
54+
55+
<dependency>
56+
<groupId>junit</groupId>
57+
<artifactId>junit</artifactId>
58+
<scope>test</scope>
59+
</dependency>
60+
61+
<dependency>
62+
<groupId>org.easymock</groupId>
63+
<artifactId>easymock</artifactId>
64+
<scope>test</scope>
65+
</dependency>
66+
67+
<dependency>
68+
<groupId>org.powermock</groupId>
69+
<artifactId>powermock-api-easymock</artifactId>
70+
<scope>test</scope>
71+
</dependency>
72+
73+
<dependency>
74+
<groupId>org.powermock</groupId>
75+
<artifactId>powermock-module-junit4</artifactId>
76+
<scope>test</scope>
77+
</dependency>
78+
79+
<dependency>
80+
<groupId>org.jacoco</groupId>
81+
<artifactId>org.jacoco.agent</artifactId>
82+
<classifier>runtime</classifier>
83+
<scope>test</scope>
84+
</dependency>
85+
86+
</dependencies>
87+
88+
</project>

0 commit comments

Comments
 (0)