有沒有人在那裏使用IBBATIS 3作爲EJB容器內的持久性框架?我最近開始構建一個新的系統,我選擇EJB 3.1(EJB的版本實際上與這個問題無關)作爲我的應用程序框架和iBATIS 3(這個版本是相關的!)作爲我的持久性框架。我的業務邏輯是在使用iBATIS 3進行數據訪問的EJB 3.1會話bean中實現的。我在GlassFish v3上運行)EJB(3.1)容器內的IBATIS 3中的事務管理
我對這個堆棧的問題是事務管理。我通過編寫一些簡單的集成代碼解決了我的問題,但是我必須這樣做,我感到有點驚訝。所以我決定發佈這個看看其他人是否遇到過這個問題,如果有的話,他們是如何解決問題的。
我的要求是讓IBBATIS 3在會話bean方法中透明地使用EJB事務(通常定義爲聲明式地)。 iBATIS 3提供了2個事務工廠JdbcTransactionFactory和ManagedTransactionFactory,我發現這兩個事務工廠都不能在EJB環境中正常工作(並且查看iBATIS源代碼清楚它爲什麼失敗)。
JdbcTransactionFactory不合適,因爲我想要忽略對sqlSession.commit()或sqlSession.rollback()的任何調用。所以我想好了我應該使用ManagedTransactionFactory,因爲它確實會導致任何對sqlSession.commit()或sqlSession.rollback()的調用被忽略,但它也會導致sqlSession.close()到而不是關閉iBATIS打開的連接來自sqlSession.open()中的DataSource(DataSource是我提供給iBATIS的容器管理的DataSource對象)。這會導致GlassFish耗盡其連接池並導致應用程序失敗。
所以我寫了一個新的TransactionFactory實現,EJBTransactionFactory,導致sqlSession.commit()或sqlSession.rollback()什麼也不做,但確實接近時sqlSession.close()被調用的連接。
我懷疑其他人碰到過這個,你是怎麼解決的?