【问题标题】:Exposing DAO as web service将 DAO 公开为 Web 服务
【发布时间】:2010-08-03 15:17:46
【问题描述】:

谁能指出我将 DAO 公开为外部 Web 服务的文档方向?目前,在我的应用程序中,我们遵循 DAO -> 服务 -> UI 分层架构。一切都在应用程序内部,我们的 DAO 通过 Spring JDBC 访问数据库,服务仅对 Web 应用程序可见。

我们现在需要公司内部的下游系统来访问我们创建的 DAO。我需要知道公开我们的 DAO 需要付出什么努力,以及执行此任务需要哪些其他技术(如果有的话)。

另外,我会公开 DAO 本身还是服务?

【问题讨论】:

    标签: java web-services service dao


    【解决方案1】:

    我想我没有完全理解这个问题。您必须创建为您的 DAO 执行 CRUD 操作的服务操作,以及您的 DAO 执行的任何特殊数据处理的操作。您已经通过服务向当前 UI 公开了 DAO。您不能简单地将该服务用作面向外部的服务的模板吗?

    【讨论】:

    • 是的,这实际上是我认为该方法最初的工作方式,但这里的一位架构师告诉我,这将是暴露的 DAO。所以,我会将我已经编写好的服务暴露给外部应用程序。
    • @smayers81:嗯,很可能您已经编写的服务与您的 UI 紧密耦合,因此该服务上可能有一些您不想公开的操作,并且可能有一些操作没有暴露你确实想要暴露。我不知道有任何自动工具可以围绕您的 DAO 构建服务框架。至少,不适用于 Java。您将不得不为您的服务创建类似于您的 DAO 的自定义数据结构,并为您的服务创建反映 DAO 上可用操作的操作。
    • 也就是说,您可能会发现this article 非常有趣。 [警告,PDF]
    • 难道不能只暴露我服务的某些方法,例如通过注解?
    • @smayers81:如果您将每个 DOA 设置为单独的服务,我想是这样。我个人不会做这样的事情,因为这会将您的 DAO 与您的服务层紧密耦合。我将构建一个转换层,其唯一职责是将服务调用转换为对 DAO 的调用。
    【解决方案2】:

    如果我是你,我只会将 DAO 包装在 Web 服务中。因此,首先定义 wsdl,然后生成与该 wsdl 相关的 java 代码。然后,在 web 服务实现中,只需将实体 bean 手动复制到这个 web 服务 bean 中。如果这太乏味的话,猜猜你可以使用 bean copy utils。

    不确定是否可以在 java2wsdl 样式的 web 服务开发中直接使用实体 bean,但这似乎是个坏主意,因为在这种情况下,实体 bean 和 web 服务接口之间没有抽象层。

    【讨论】:

    • 我对这一切真的很陌生。这就是所有可以在 Eclipse 中完成的事情吗?
    • @smayers81:从未为此使用过 Eclipse,但我相信你可以。有很多选择。我个人喜欢与 Spring 集成的 CXF。如果我处于你的位置,我会同意的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    相关资源
    最近更新 更多