[英]How to load files into session bean
我有一個java EE應用程序EE5 EJB3。 我使用NetBeans 6.7和GlassFish 2.x開發我需要一個部署/客戶端特定的配置文件(* .xsl,* .xml)。
我的問題是:
1)我在哪里放置ear文件外部的文件?
2)如何將文件加載到會話bean中? 我可以使用注射嗎?
我設法使用ejb-jar.xml為文件名注入@Resource。
提前謝謝了。 G。
我想這不是你所期待的,但正確的答案是你不應該這樣做! 根據EJB規范 ,更確切地說是編程限制 :
企業bean不得使用
java.io
包來嘗試訪問文件系統中的文件和目錄。
這句話之后是這樣的解釋:
文件系統API不適合業務組件訪問數據。 業務組件應使用資源管理器API(如JDBC)來存儲數據。
這句話背后的原因是:
既然你知道這一點,如果你仍然想要做你的想法,如果你的EJB容器不限制使用java.io
包中的類,那么我會在類路徑上放一個只讀文件,最好是一個JAR,並使用java.lang.Class
的getResource()
或getResourceAsStream()
方法訪問它。 但實際上,您應該牢記規范,它可以幫助您構建可移植的應用程序。
如果您可以為每個目標部署組裝一個EAR(也許maven profile
可以在此區域中提供幫助),那么您可以像資源一樣加載它。
另一種選擇是查看J2EE應用程序部署規范 (JSR-88),使每個環境具有一個具有N部署計划的EAR。
您還可以決定將文件存儲在文件系統上(即使它是禁止的)。 如果您希望路徑位於ejb.xml
那么您需要再次以不同方式組裝或部署EAR - 那么沒有大的收益。 然后,另一個選項是使用Glassfish Custom JNDI Resource來從管理控制台直接配置路徑。 你的應用程序。 可以根據配置的路徑加載文件。
請參閱此問題: Java EE中的流程文件 。
該規范禁止使用java.io進行文件訪問,它一般不禁止文件訪問。
文件在企業應用程序中導致問題的主要原因之一是它們在多用戶環境中難以安全有效地使用。 特別是,文件鎖會嚴重限制可伸縮性。
按照Pascal的建議,每個會話使用類加載器讀取一次配置文件不太可能在大多數應用程序服務器上造成問題,除非可能是熱部署。
JNDI屬性可用作配置文件的替代。 JNDI屬性在部署描述符中定義,並在部署時將值綁定到JNDI名稱。 應用程序可以使用JNDI名稱從應用程序內部查找值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.