From 17b9a974dee1e9c190e7863ad3661bed19ba6b59 Mon Sep 17 00:00:00 2001 From: Kavin <20838718+FireMasterK@users.noreply.github.com> Date: Mon, 4 Jul 2022 06:42:01 +0100 Subject: [PATCH] Attempt to use stateless sessions in read-only operations. (#301) --- src/main/java/me/kavin/piped/Main.java | 3 +- .../me/kavin/piped/utils/DatabaseHelper.java | 35 ++++++------ .../piped/utils/DatabaseSessionFactory.java | 12 ++--- .../me/kavin/piped/utils/ResponseHelper.java | 54 ++++++++++--------- 4 files changed, 51 insertions(+), 53 deletions(-) diff --git a/src/main/java/me/kavin/piped/Main.java b/src/main/java/me/kavin/piped/Main.java index ea6cb02..28894b1 100644 --- a/src/main/java/me/kavin/piped/Main.java +++ b/src/main/java/me/kavin/piped/Main.java @@ -8,6 +8,7 @@ import me.kavin.piped.utils.*; import me.kavin.piped.utils.obj.db.PubSub; import me.kavin.piped.utils.obj.db.User; import org.hibernate.Session; +import org.hibernate.StatelessSession; import org.hibernate.Transaction; import org.hibernate.query.Query; import org.schabi.newpipe.extractor.NewPipe; @@ -54,7 +55,7 @@ public class Main { new Timer().scheduleAtFixedRate(new TimerTask() { @Override public void run() { - try (Session s = DatabaseSessionFactory.createSession()) { + try (StatelessSession s = DatabaseSessionFactory.createStatelessSession()) { CriteriaBuilder cb = s.getCriteriaBuilder(); CriteriaQuery criteria = cb.createQuery(PubSub.class); diff --git a/src/main/java/me/kavin/piped/utils/DatabaseHelper.java b/src/main/java/me/kavin/piped/utils/DatabaseHelper.java index 097d8db..0f5ea30 100644 --- a/src/main/java/me/kavin/piped/utils/DatabaseHelper.java +++ b/src/main/java/me/kavin/piped/utils/DatabaseHelper.java @@ -5,8 +5,8 @@ import jakarta.persistence.criteria.CriteriaQuery; import jakarta.persistence.criteria.JoinType; import jakarta.persistence.criteria.Root; import me.kavin.piped.utils.obj.db.*; -import org.hibernate.FlushMode; -import org.hibernate.Session; +import org.hibernate.SharedSessionContract; +import org.hibernate.StatelessSession; import java.util.List; import java.util.UUID; @@ -14,13 +14,12 @@ import java.util.UUID; public class DatabaseHelper { public static User getUserFromSession(String session) { - try (Session s = DatabaseSessionFactory.createSession()) { - s.setHibernateFlushMode(FlushMode.MANUAL); + try (StatelessSession s = DatabaseSessionFactory.createStatelessSession()) { return getUserFromSession(session, s); } } - public static User getUserFromSession(String session, Session s) { + public static User getUserFromSession(String session, SharedSessionContract s) { CriteriaBuilder cb = s.getCriteriaBuilder(); CriteriaQuery cr = cb.createQuery(User.class); Root root = cr.from(User.class); @@ -30,8 +29,7 @@ public class DatabaseHelper { } public static User getUserFromSessionWithSubscribed(String session) { - try (Session s = DatabaseSessionFactory.createSession()) { - s.setHibernateFlushMode(FlushMode.MANUAL); + try (StatelessSession s = DatabaseSessionFactory.createStatelessSession()) { CriteriaBuilder cb = s.getCriteriaBuilder(); CriteriaQuery cr = cb.createQuery(User.class); Root root = cr.from(User.class); @@ -42,7 +40,7 @@ public class DatabaseHelper { } } - public static Channel getChannelFromId(Session s, String id) { + public static Channel getChannelFromId(SharedSessionContract s, String id) { CriteriaBuilder cb = s.getCriteriaBuilder(); CriteriaQuery cr = cb.createQuery(Channel.class); Root root = cr.from(Channel.class); @@ -52,13 +50,12 @@ public class DatabaseHelper { } public static Channel getChannelFromId(String id) { - try (Session s = DatabaseSessionFactory.createSession()) { - s.setHibernateFlushMode(FlushMode.MANUAL); + try (StatelessSession s = DatabaseSessionFactory.createStatelessSession()) { return getChannelFromId(s, id); } } - public static List getChannelsFromIds(Session s, List id) { + public static List getChannelsFromIds(SharedSessionContract s, List id) { CriteriaBuilder cb = s.getCriteriaBuilder(); CriteriaQuery cr = cb.createQuery(Channel.class); Root root = cr.from(Channel.class); @@ -67,7 +64,7 @@ public class DatabaseHelper { return s.createQuery(cr).list(); } - public static Video getVideoFromId(Session s, String id) { + public static Video getVideoFromId(SharedSessionContract s, String id) { CriteriaBuilder cb = s.getCriteriaBuilder(); CriteriaQuery