2012-04-17 110 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

哎呀,对不起,让生活如此复杂