2012-04-24 28 views
8

我剛開始一個簡單的Java測試項目,它管理着一些使用Hibernate的實體,並提供了一個REST接口來操作這些對象並提供一些額外的業務邏輯。 REST接口是使用RESTEasy和Jetty創建的。每個請求創建Hibernate-Session

到目前爲止一切正常,但我感覺我實際上寫了太多的樣板代碼。由於我在這些Java框架方面沒有太多經驗,所以我只是想知道是否有人可以給我提示如何改善這種情況。

  1. Creting Hibernate的會話每個請求

嘛,據我瞭解我要創建每個請求一個Hibernate會話,並在年底我必須關閉它。所以目前我所有的服務方法是這樣的:

Session session = HibernateUtil.getInstance().getSessionFactory().openSession(); 
... 
... 
... 
session.close(); 

有沒有辦法以某種方式自動執行此操作刪除這兩條線? 目前我的服務已註冊爲RestEASY單身人士。將更改爲RESTeasy資源並在構造函數中創建會話解決了問題?我認爲這將解決創建會話的問題。但是要關閉它?

在C++中,可以很容易地創建一個範圍對象,它在最後關閉會話。但在Java?

  1. 每當發出這樣的REST請求,我必須檢查一個有效的會話(用戶必須先登錄)。 ServletFilter是否是正確的方法?

一般:有沒有其他的模式或框架,我應該考慮使用?我的意思是我想保持它儘可能簡單,特別是因爲我沒有那麼多的經驗,我不想最終使用Spring或任何重量級框架。似乎我習慣於Python和Django的簡單性,但對於這個小項目我必須使用Java。

THANKs至今!

回答

0

你應該嘗試編寫一個這樣做的過濾器。如果你需要一個例子,Spring的OpenSessionInViewFilter是一個很好的開始。

1

將SessionFactory注入到您的數據訪問對象並使用sessionFactory.getCurrentSession()來訪問Hibernate會話對象。 你可以使用任何可用的工廠類來實現這個..

那麼你的代碼看起來應該是這樣..

sessionFactory.getCurrentSession().save(newInstance); 
+6

好的,但我在哪裏關閉會議? – duselbaer 2012-04-24 13:11:49

+1

在struts2的情況下,你可以使用攔截器來初始化和關閉會話對象。 – 2014-10-30 10:06:54