EJB 1.1和磁盘IO
问题描述:
我有一个问题关于EJB 1.1(是真的老了...... - 请不要跟我开玩笑......)EJB 1.1和磁盘IO
所以现在的问题是旧之一:为什么我不应该在EJB中执行磁盘io?尤其是阅读文件。
更准确地说是用例:它关于一个需要作为一些特殊数据导出模板的文件。 因此,它是:
- 一个文件
- 很少改变(例如一个特殊的maintanance时间内)
- 很少看
- 没有沉重负荷
是否有任何理由,为什么不从磁盘读取该模板文件? 当我尝试在EJB中执行磁盘io时,是否存在像ForbiddenOperationException这样的技术限制。我已经进行了测试,阅读和转移工作正常。这种行为在EJB 2.x或3.x中有所不同吗?
非常感谢!
答
此限制在规范中允许对EJB进行集群化,如果EJB是独立的并且不依赖于外部环境(如文件系统),则更容易。
访问文件系统应该可以正常工作,但是,如果您确实想遵守规范,则可以将该文件捆绑到EJB jar中,并使用Class.getResourceAsStream
从类路径访问它。
答
企业Bean不允许访问文件,主要是因为 文件不是事务性资源。允许EJB访问文件系统中的文件或目录,或者使用文件描述符,将会危及组件的分布性,并且存在安全隐患。
你可以在一个JAR包文件,这样就可以用getResource()
或getResourceAsStream()
&读它可以改变的,独立部署。否则,如果您目前的方法没有遇到任何问题,那么它很好,但不建议按照规范。
答
为什么不把它作为blob存储在数据库中?
那么你可以有一个管理Web应用程序,将其从浏览器
改变,你可以使用LDAP认证/授权的webapp
哎呀,对不起,让生活如此复杂
谢谢乔恩,我接受你的第一个论点,它很好地包装了我的理解。但是从类路径获取资源的建议与我的用例不匹配,因为我需要该文件可以独立于部署进行更改 - 在生命周期中可能只有1或2次,但是由客户而不是开发人员! – user880625 2012-04-17 08:44:56
我只是想展示一个可能的选择,但使用文件系统应该在你的用例中正常工作。 – 2012-04-17 08:49:38