【问题标题】:EJB 1.1 and disk ioEJB 1.1 和磁盘 io
【发布时间】:2012-04-28 13:52:43
【问题描述】:

我有一个关于 EJB 1.1 的问题(是的,真的那么老...... - 请不要骗我......)

所以问题是老问题之一:为什么我不应该在 EJB 中执行磁盘 io?尤其是读取文件。

更准确地说是用例:它只需要一个文件作为某些特殊数据导出的模板。 原来如此:

  • 一个文件
  • 很少更改(例如在特殊维护时间内)
  • 很少阅读
  • 没有重载

有什么理由,为什么不从磁盘读取该模板文件? 当我尝试在 EJB 中执行磁盘 io 时,是否有任何技术限制,例如 ForbiddenOperationException。我已经进行了测试,阅读和传输工作正常。这种行为在 EJB 2.x 或 3.x 中是否有所不同?

非常感谢!

【问题讨论】:

    标签: java ejb disk


    【解决方案1】:

    规范中的此限制允许 EJB 集群,如果 EJB 是自包含的并且不依赖于文件系统等外部环境,则更容易。

    访问文件系统应该可以正常工作,但是,如果您真的想遵守规范,您可以将文件捆绑在 EJB jar 中,并使用 Class.getResourceAsStream 从类路径访问它。

    【讨论】:

    • 谢谢 Jörn,我接受了你的第一个论点,它很好地总结了我的理解。但是您从类路径获取资源的建议与我的用例不匹配,因为我需要该文件可以独立于部署进行更改-可能在生命周期中仅更改 1 或 2 次,但由客户而不是由开发人员更改!
    • 我只是想展示一个可能的替代方案,但是在您的用例中使用文件系统应该可以正常工作。
    【解决方案2】:

    来自EJB Restrictions

    不允许企业 bean 访问文件主要是因为 文件不是事务性资源。允许 EJB 访问文件 或文件系统中的目录,或使用文件描述符,将 损害组件的可分发性,并且会带来安全隐患。

    您可以将文件打包到 JAR 中,以便您可以使用 getResource()getResourceAsStream() 读取它,并且可以独立更改、重新部署。

    否则,如果您当前的方法没有遇到任何问题,那很好,但根据规范不推荐。

    【讨论】:

      【解决方案3】:

      为什么不将它作为 blob 存储在数据库中?

      然后你可以有一个管理员 webapp 从浏览器更改它

      您可以使用 ldap 对 webapp 进行身份验证/授权

      哎呀,抱歉让生活变得如此复杂

      【讨论】:

        猜你喜欢
        • 2013-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-21
        • 2018-11-01
        • 2016-12-20
        • 2011-09-06
        相关资源
        最近更新 更多