我刚刚启动了一个简单的 Java 测试项目,它使用 Hibernate 管理一些实体,并提供 REST 接口来操作这些对象并提供一些额外的业务逻辑。 REST 接口是使用 RESTEasy 和 Jetty 创建的。
到目前为止,一切工作正常,但我感觉我实际上编写了太多的样板代码。由于我对这些 Java 框架没有太多经验,我只是想知道是否有人可以给我一些关于如何改善这种情况的提示。
- 根据请求创建 Hibernate 会话
好吧,据我所知,我必须为每个请求创建一个 Hibernate 会话,最后我必须关闭它。所以目前我所有的服务方法都是这样的:
Session session = HibernateUtil.getInstance().getSessionFactory().openSession();
...
...
...
session.close();
有没有办法删除这两行以便以某种方式自动执行此操作?
目前我的服务已注册为 RestEASY 单例。更改为 RESTeasy 资源并在构造函数中创建会话可以解决问题吗?我认为这将解决创建会话的问题。但是去哪里关闭呢?
在 C++ 中,这可以通过创建一个在最后关闭会话的作用域对象来轻松完成。但在Java 中呢?
- 每当发出此类 REST 请求时,我都必须检查有效会话(用户必须事先登录)。 ServletFilter 是执行此操作的正确方法吗?
一般:我应该考虑使用其他模式或框架吗?我的意思是我想让它尽可能简单,特别是因为我没有太多经验,所以我不想最终使用 Spring 或任何重量级框架。似乎我已经习惯了 Python 和 Django 的简单性,但对于这个小项目我必须使用 Java。
到目前为止谢谢!
Hibernate 目前推荐的管理 Session 的方法在此有详细介绍维基页面 https://community.jboss.org/wiki/SessionsAndTransactions。特别是,我认为您需要阅读最后一段:这一切都非常困难,难道不能更容易做到吗? https://community.jboss.org/wiki/SessionsAndTransactions#This_is_all_very_difficult_cant_this_be_done_easier
最后,您确实需要告诉持久层“我要做某事”(通常也会让会话来做这件事)和“我已经完成了”。你可以这样做注释 https://community.jboss.org/wiki/SessionsAndTransactions#Transaction_demarcation_with_EJBCMT, or JTA交易 https://community.jboss.org/wiki/SessionsAndTransactions#Transaction_demarcation_with_JTA,但这些信息仍然需要传达!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)