package hbm5;
import java.util.concurrent.Executors;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.event.spi.EventType;
import org.jooby.Jooby;
import org.jooby.hbm.Hbm;
import org.jooby.hbm.UnitOfWork;
import org.jooby.json.Jackson;
import com.typesafe.config.Config;
public class HbmApp extends Jooby {
{
use(new Jackson());
use(new Hbm("jdbc:h2:./target/hbm")
.classes(Beer.class)
.doWith((final BootstrapServiceRegistryBuilder bsrb, final Config conf) -> {
System.out.println();
System.out.println(bsrb);
System.out.println();
})
.doWith((final StandardServiceRegistryBuilder ssrb) -> {
System.out.println(ssrb);
System.out.println();
})
.doWith((final SessionFactory sf) -> {
System.out.println();
System.out.println(sf);
})
.onEvent(EventType.POST_LOAD, BeerLoaded.class));
use("*", "*", Hbm.openSessionInView());
executor(Executors.newSingleThreadExecutor());
use("/api/beer")
.post(req -> require(UnitOfWork.class)
.apply(em -> em.merge(req.body(Beer.class))))
.post("/async", deferred(req -> {
Beer beer = req.body(Beer.class);
return require(UnitOfWork.class)
.apply(em -> em.merge(beer));
}))
.get("/q",
() -> require(Session.class).createQuery("from Beer", Beer.class).getResultList())
.get("/:id",
req -> require(Session.class).getReference(Beer.class,
req.param("id").longValue()).name)
.get("/async", deferred(() -> {
return require(Session.class).createQuery("from Beer", Beer.class).getResultList();
}))
.get(() -> require(UnitOfWork.class)
.apply(em -> em.createQuery("from Beer", Beer.class).getResultList()));
}
public static void main(final String[] args) throws Throwable {
run(HbmApp::new, args);
}
}