2020-02-21 18:21:59 +02:00

67 lines
2.3 KiB
Java

package com.baeldung.takes;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import org.takes.Response;
import org.takes.facets.fallback.Fallback;
import org.takes.facets.fallback.FbChain;
import org.takes.facets.fallback.FbStatus;
import org.takes.facets.fallback.RqFallback;
import org.takes.facets.fallback.TkFallback;
import org.takes.facets.fork.FkRegex;
import org.takes.facets.fork.TkFork;
import org.takes.http.Exit;
import org.takes.http.FtBasic;
import org.takes.misc.Opt;
import org.takes.rs.RsText;
import org.takes.tk.TkSlf4j;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
public final class TakesApp {
public static void main(final String... args) throws IOException, SQLException {
new FtBasic(
new TkFallback(
new TkSlf4j(
new TkFork(
new FkRegex("/", "Hello, World!"),
new FkRegex("/index", new TakesIndex()),
new FkRegex("/contact", new TakesContact()),
new FkRegex("/createUser", new TakesCreateUser(TakesApp.dbConnection())),
new FkRegex("\\A/readUser", new TakesReadUser(TakesApp.dbConnection()))
)
),
new FbChain(
new FbStatus(404, new RsText("sorry, page is absent")),
new FbStatus(405, new RsText("this method is not allowed here")),
new Fallback() {
@Override
public Opt<Response> route(final RqFallback req) {
return new Opt.Single<Response>(
new RsText(req.throwable().getMessage())
);
}
})
),
6060
).start(Exit.NEVER);
}
private static Connection dbConnection() throws SQLException {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:h2:mem:devDB;DB_CLOSE_DELAY=-1;INIT=runscript from 'classpath:/db.sql'");
config.setUsername("sa");
config.setPassword("");
@SuppressWarnings("resource")
HikariDataSource ds = new HikariDataSource(config);
return ds.getConnection();
}
}