Skip to content

Commit 64114b4

Browse files
Merge pull request #43 from cryptomator/feature/remove-dagger
remove dagger
2 parents e3ed436 + 16ea3b4 commit 64114b4

12 files changed

+76
-328
lines changed

pom.xml

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -84,13 +84,6 @@
8484
<version>${slf4j.version}</version>
8585
</dependency>
8686

87-
<!-- DI -->
88-
<dependency>
89-
<groupId>com.google.dagger</groupId>
90-
<artifactId>dagger</artifactId>
91-
<version>${dagger.version}</version>
92-
</dependency>
93-
9487
<!-- Test -->
9588
<dependency>
9689
<groupId>org.junit.jupiter</groupId>
@@ -115,13 +108,6 @@
115108
<configuration>
116109
<release>11</release>
117110
<showWarnings>true</showWarnings>
118-
<annotationProcessorPaths>
119-
<path>
120-
<groupId>com.google.dagger</groupId>
121-
<artifactId>dagger-compiler</artifactId>
122-
<version>${dagger.version}</version>
123-
</path>
124-
</annotationProcessorPaths>
125111
</configuration>
126112
</plugin>
127113
<plugin>

src/main/java/module-info.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,6 @@
44
requires org.eclipse.jetty.servlet;
55
requires com.google.common;
66
requires org.slf4j;
7-
requires dagger;
8-
9-
// filename-based module required by dagger
10-
// we will probably need to live with this for a while:
11-
// https://github.com/javax-inject/javax-inject/issues/33
12-
// May be provided by another lib during runtime
13-
requires static javax.inject;
147

158
exports org.cryptomator.frontend.webdav;
169
exports org.cryptomator.frontend.webdav.mount;

src/main/java/org/cryptomator/frontend/webdav/DefaultServlet.java

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,30 +8,23 @@
88
*******************************************************************************/
99
package org.cryptomator.frontend.webdav;
1010

11-
import java.io.IOException;
12-
import java.util.Collection;
11+
import com.google.common.base.Splitter;
12+
import com.google.common.collect.Iterables;
1313

14-
import javax.inject.Inject;
15-
import javax.inject.Singleton;
1614
import javax.servlet.ServletException;
1715
import javax.servlet.http.HttpServlet;
1816
import javax.servlet.http.HttpServletRequest;
1917
import javax.servlet.http.HttpServletResponse;
18+
import java.io.IOException;
19+
import java.util.Collection;
2020

21-
import org.cryptomator.frontend.webdav.WebDavServerModule.ContextPaths;
22-
23-
import com.google.common.base.Splitter;
24-
import com.google.common.collect.Iterables;
25-
26-
@Singleton
2721
class DefaultServlet extends HttpServlet {
2822

2923
private static final String METHOD_PROPFIND = "PROPFIND";
3024
private static final int TARPIT_DELAY_MS = 5000;
3125
private final Collection<String> contextPaths;
3226

33-
@Inject
34-
public DefaultServlet(@ContextPaths Collection<String> contextPaths) {
27+
public DefaultServlet(Collection<String> contextPaths) {
3528
this.contextPaths = contextPaths;
3629
}
3730

@@ -60,7 +53,7 @@ protected void service(HttpServletRequest req, HttpServletResponse resp) throws
6053
}
6154

6255
@Override
63-
protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
56+
protected void doOptions(HttpServletRequest req, HttpServletResponse resp) {
6457
resp.addHeader("DAV", "1, 2");
6558
resp.addHeader("MS-Author-Via", "DAV");
6659
resp.addHeader("Allow", "OPTIONS, PROPFIND, GET, HEAD");
@@ -85,7 +78,7 @@ protected void doPropfind(HttpServletRequest req, HttpServletResponse resp) thro
8578
}
8679

8780
private boolean isRequestedResourcePathPartOfValidContextPath(String requestedResourcePath) {
88-
return contextPaths.stream().filter(cp -> isParentOrSamePath(cp, requestedResourcePath)).findAny().isPresent();
81+
return contextPaths.stream().anyMatch(cp -> isParentOrSamePath(cp, requestedResourcePath));
8982
}
9083

9184
private boolean isParentOrSamePath(String path, String potentialParent) {

src/main/java/org/cryptomator/frontend/webdav/WebDavServer.java

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,46 +8,41 @@
88
*******************************************************************************/
99
package org.cryptomator.frontend.webdav;
1010

11-
import java.net.InetSocketAddress;
12-
import java.nio.file.Path;
13-
import java.util.concurrent.ExecutorService;
14-
15-
import javax.inject.Inject;
16-
import javax.inject.Singleton;
17-
18-
import org.cryptomator.frontend.webdav.servlet.WebDavServletComponent;
1911
import org.cryptomator.frontend.webdav.servlet.WebDavServletController;
12+
import org.cryptomator.frontend.webdav.servlet.WebDavServletFactory;
2013
import org.eclipse.jetty.server.Server;
2114
import org.eclipse.jetty.server.ServerConnector;
15+
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
2216
import org.slf4j.Logger;
2317
import org.slf4j.LoggerFactory;
2418

19+
import java.net.InetSocketAddress;
20+
import java.nio.file.Path;
21+
import java.util.concurrent.ExecutorService;
22+
2523
/**
2624
* The WebDAV server, that WebDAV servlets can be added to using {@link #createWebDavServlet(Path, String)}.
2725
*
2826
* An instance of this class can be obtained via {@link #create()}.
2927
*/
30-
@Singleton
3128
public class WebDavServer {
3229

3330
private static final Logger LOG = LoggerFactory.getLogger(WebDavServer.class);
3431

3532
private final Server server;
3633
private final ExecutorService executorService;
3734
private final ServerConnector localConnector;
38-
private final WebDavServletFactory servletFactory;
35+
private final ContextHandlerCollection servletCollectionCtx;
3936

40-
@Inject
41-
WebDavServer(Server server, ExecutorService executorService, ServerConnector connector, WebDavServletFactory servletContextFactory) {
37+
WebDavServer(Server server, ExecutorService executorService, ServerConnector connector, ContextHandlerCollection servletCollectionCtx) {
4238
this.server = server;
4339
this.executorService = executorService;
4440
this.localConnector = connector;
45-
this.servletFactory = servletContextFactory;
41+
this.servletCollectionCtx = servletCollectionCtx;
4642
}
4743

4844
public static WebDavServer create() {
49-
WebDavServerComponent comp = DaggerWebDavServerComponent.create();
50-
return comp.server();
45+
return WebDavServerFactory.createWebDavServer();
5146
}
5247

5348
/**
@@ -135,8 +130,7 @@ public synchronized void terminate() throws ServerLifecycleException {
135130
* @return The controller object for this new servlet
136131
*/
137132
public WebDavServletController createWebDavServlet(Path rootPath, String contextPath) {
138-
WebDavServletComponent servletComp = servletFactory.create(rootPath, contextPath);
139-
return servletComp.servlet();
133+
return WebDavServletFactory.createServletController(rootPath, contextPath, localConnector, servletCollectionCtx);
140134
}
141135

142136
}

src/main/java/org/cryptomator/frontend/webdav/WebDavServerComponent.java

Lines changed: 0 additions & 26 deletions
This file was deleted.

src/main/java/org/cryptomator/frontend/webdav/WebDavServerModule.java renamed to src/main/java/org/cryptomator/frontend/webdav/WebDavServerFactory.java

Lines changed: 23 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -9,65 +9,41 @@
99
package org.cryptomator.frontend.webdav;
1010

1111
import com.google.common.base.Preconditions;
12-
import dagger.Module;
13-
import dagger.Provides;
14-
import org.cryptomator.frontend.webdav.mount.MounterModule;
1512
import org.eclipse.jetty.http.UriCompliance;
16-
import org.eclipse.jetty.server.Connector;
17-
import org.eclipse.jetty.server.HttpConfiguration;
18-
import org.eclipse.jetty.server.HttpConnectionFactory;
19-
import org.eclipse.jetty.server.Server;
20-
import org.eclipse.jetty.server.ServerConnector;
13+
import org.eclipse.jetty.server.*;
2114
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
2215
import org.eclipse.jetty.servlet.ServletContextHandler;
2316
import org.eclipse.jetty.servlet.ServletHolder;
2417
import org.eclipse.jetty.util.thread.ExecutorThreadPool;
2518

26-
import javax.inject.Qualifier;
27-
import javax.inject.Singleton;
28-
import java.lang.annotation.Documented;
29-
import java.lang.annotation.Retention;
30-
import java.lang.annotation.RetentionPolicy;
31-
import java.util.Collection;
3219
import java.util.HashSet;
3320
import java.util.concurrent.BlockingQueue;
34-
import java.util.concurrent.ExecutorService;
3521
import java.util.concurrent.LinkedBlockingQueue;
3622
import java.util.concurrent.ThreadPoolExecutor;
3723
import java.util.concurrent.TimeUnit;
3824
import java.util.concurrent.atomic.AtomicInteger;
3925

40-
@Module(includes = {MounterModule.class})
41-
class WebDavServerModule {
26+
class WebDavServerFactory {
4227

4328
private static final int MAX_PENDING_REQUESTS = 400;
4429
private static final int MAX_THREADS = 100;
4530
private static final int THREAD_IDLE_SECONDS = 60;
4631
private static final String ROOT_PATH = "/";
32+
private static final AtomicInteger THREAD_NUM = new AtomicInteger();
4733

48-
private AtomicInteger threadNum = new AtomicInteger(1);
34+
private WebDavServerFactory(){}
4935

50-
@Provides
51-
@Singleton
52-
ThreadPoolExecutor provideThreadPoolExecutor() {
36+
private static ThreadPoolExecutor createThreadPoolExecutor() {
5337
// set core pool size = MAX_THREADS and allow coreThreadTimeOut to enforce spawning threads till the maximum even if the queue is not full
5438
BlockingQueue<Runnable> queue = new LinkedBlockingQueue<>(MAX_PENDING_REQUESTS);
5539
ThreadPoolExecutor executor = new ThreadPoolExecutor(MAX_THREADS, MAX_THREADS, THREAD_IDLE_SECONDS, TimeUnit.SECONDS, queue);
5640
executor.allowCoreThreadTimeOut(true);
5741
return executor;
5842
}
5943

60-
@Provides
61-
@Singleton
62-
ExecutorService provideExecutorService(ThreadPoolExecutor executorService) {
63-
return executorService;
64-
}
65-
66-
@Provides
67-
@Singleton
68-
ExecutorThreadPool provideThreadPool(ThreadPoolExecutor executorService) {
44+
private static ExecutorThreadPool createThreadPool(ThreadPoolExecutor executorService) {
6945
ExecutorThreadPool threadPool = new ExecutorThreadPool(executorService);
70-
executorService.setThreadFactory(this::createServerThread);
46+
executorService.setThreadFactory(WebDavServerFactory::createServerThread);
7147
try {
7248
threadPool.start();
7349
return threadPool;
@@ -76,67 +52,51 @@ ExecutorThreadPool provideThreadPool(ThreadPoolExecutor executorService) {
7652
}
7753
}
7854

79-
private Thread createServerThread(Runnable runnable) {
80-
Thread t = new Thread(runnable, String.format("webdav-%03d", threadNum.getAndIncrement()));
55+
private static Thread createServerThread(Runnable runnable) {
56+
Thread t = new Thread(runnable, String.format("webdav-%03d", THREAD_NUM.incrementAndGet()));
8157
t.setDaemon(true);
8258
return t;
8359
}
8460

8561

86-
@Provides
87-
@Singleton
88-
Server provideServer(ExecutorThreadPool threadPool, ContextHandlerCollection servletCollection) {
62+
private static Server createServer(ExecutorThreadPool threadPool, ContextHandlerCollection servletCollection) {
8963
Preconditions.checkState(threadPool.isStarted()); // otherwise addBean() will make the threadpool managed, i.e. it will be shut down when the server is stopped
9064
Server server = new Server(threadPool);
9165
server.setHandler(servletCollection);
9266
return server;
9367
}
9468

95-
@Provides
96-
@Singleton
97-
ServerConnector provideServerConnector(Server server) {
69+
private static ServerConnector createServerConnector(Server server) {
9870
HttpConfiguration config = new HttpConfiguration();
9971
config.setUriCompliance(UriCompliance.from("0,AMBIGUOUS_PATH_SEPARATOR,AMBIGUOUS_PATH_ENCODING"));
10072
ServerConnector connector = new ServerConnector(server, new HttpConnectionFactory(config));
10173
server.setConnectors(new Connector[]{connector});
10274
return connector;
10375
}
10476

105-
@Provides
106-
@Singleton
107-
ContextHandlerCollection provideContextHandlerCollection(@CatchAll ServletContextHandler catchAllServletHandler) {
77+
private static ContextHandlerCollection createContextHandlerCollection(ServletContextHandler catchAllServletHandler) {
10878
ContextHandlerCollection collection = new ContextHandlerCollection();
10979
collection.addHandler(catchAllServletHandler);
11080
return collection;
11181
}
11282

113-
@Provides
114-
@Singleton
115-
@CatchAll
116-
ServletContextHandler provideServletContextHandler(DefaultServlet servlet) {
83+
private static ServletContextHandler createDefaultServletContext(DefaultServlet servlet) {
11784
final ServletContextHandler servletContext = new ServletContextHandler(null, ROOT_PATH, ServletContextHandler.NO_SESSIONS);
11885
final ServletHolder servletHolder = new ServletHolder(ROOT_PATH, servlet);
11986
servletContext.addServlet(servletHolder, ROOT_PATH);
12087
return servletContext;
12188
}
12289

123-
@Provides
124-
@Singleton
125-
@ContextPaths
126-
Collection<String> provideContextPaths() {
127-
return new HashSet<>();
128-
}
129-
130-
@Qualifier
131-
@Documented
132-
@Retention(RetentionPolicy.RUNTIME)
133-
@interface CatchAll {
134-
}
135-
136-
@Qualifier
137-
@Documented
138-
@Retention(RetentionPolicy.RUNTIME)
139-
@interface ContextPaths {
90+
public static WebDavServer createWebDavServer() {
91+
var contextPaths = new HashSet<String>();
92+
var executorService = createThreadPoolExecutor();
93+
var threadPool = createThreadPool(executorService);
94+
var defaultServlet = new DefaultServlet(contextPaths);
95+
var defaultServletCtx = createDefaultServletContext(defaultServlet);
96+
var servletCollectionCtx = createContextHandlerCollection(defaultServletCtx);
97+
var server = createServer(threadPool, servletCollectionCtx);
98+
var serverConnector = createServerConnector(server);
99+
return new WebDavServer(server, executorService, serverConnector, servletCollectionCtx);
140100
}
141101

142102
}

src/main/java/org/cryptomator/frontend/webdav/WebDavServletFactory.java

Lines changed: 0 additions & 52 deletions
This file was deleted.

0 commit comments

Comments
 (0)