2012-04-17 151 views
1

我有一個問題關於EJB 1.1(是真的老了...... - 請不要跟我開玩笑......)EJB 1.1和磁盤IO

所以現在的問題是舊之一:爲什麼我不應該在EJB中執行磁盤io?尤其是閱讀文件。

更準確地說是用例:它關於一個需要作爲一些特殊數據導出模板的文件。 因此,它是:

  • 一個文件
  • 很少改變(例如一個特殊的maintanance時間內)
  • 很少看
  • 沒有沉重負荷

是否有任何理由,爲什麼不從磁盤讀取該模板文件? 當我嘗試在EJB中執行磁盤io時,是否存在像ForbiddenOperationException這樣的技術限制。我已經進行了測試,閱讀和轉移工作正常。這種行爲在EJB 2.x或3.x中有所不同嗎?

非常感謝!

回答

1

此限制在規範中允許對EJB進行集羣化,如果EJB是獨立的並且不依賴於外部環境(如文件系統),則更容易。

訪問文件系統應該可以正常工作,但是,如果您確實想遵守規範,則可以將該文件捆綁到EJB jar中,並使用Class.getResourceAsStream從類路徑訪問它。

+0

謝謝喬恩,我接受你的第一個論點,它很好地包裝了我的理解。但是從類路徑獲取資源的建議與我的用例不匹配,因爲我需要該文件可以獨立於部署進行更改 - 在生命週期中可能只有1或2次,但是由客戶而不是開發人員! – user880625 2012-04-17 08:44:56

+0

我只是想展示一個可能的選擇,但使用文件系統應該在你的用例中正常工作。 – 2012-04-17 08:49:38

0

EJB Restrictions

企業Bean不允許訪問文件,主要是因爲 文件不是事務性資源。允許EJB訪問文件系統中的文件或目錄,或者使用文件描述符,將會危及組件的分佈性,並且存在安全隱患。

你可以在一個JAR包文件,這樣就可以用getResource()getResourceAsStream() &讀它可以改變的,獨立部署。否則,如果您目前的方法沒有遇到任何問題,那麼它很好,但不建議按照規範。

0

爲什麼不把它作爲blob存儲在數據庫中?

那麼你可以有一個管理Web應用程序,將其從瀏覽器

改變,你可以使用LDAP認證/授權的webapp

哎呀,對不起,讓生活如此複雜