【问题标题】:Three-tier (non-web) database application in Java - what APIs / technologies are appropriate?Java 中的三层(非 Web)数据库应用程序 - 哪些 API / 技术是合适的?
【发布时间】:2011-03-09 19:10:03
【问题描述】:

我目前正处于(非常)小型数据库应用程序的研究阶段。

这是为当地慈善机构设计的,它只有 3 或 4 台将运行系统的客户端机器 - 但是为了将一些无关逻辑从客户端移开,我倾向于使用三层架构(有在适当的时候不断读取和更新的数据,客户端不需要知道)

即客户端 服务器逻辑 数据库

虽然我精通 Java 本身和一些框架/库,但我并不特别熟悉哪些框架可以帮助我。显然我将使用 JDBC 作为数据库的一半,但客户端和服务器之间的通信是目前的绊脚石 - 例如,我真的不想去靠近原始套接字的任何地方(矫枉过正,或者至少是另一个解决方案必须存在)

我询问了一些我认识的开发人员对使用哪些 API 的看法,虽然他们非常有帮助,但我仍然不太确定该去哪里。到目前为止,我已经听说过 RESTful 的东西、SOAP、COBRA 和一大堆其他技术。 SOAP 是引起我注意的主要问题(因为有一些很好的例子可以将它与普通应用程序一起使用,而不仅仅是在网络上),但我仍然不确定该去哪里——它似乎并不特别适合一般应用程序像这样的目的应用程序(EJB 也出现了,但我听到很多针对它的仇恨 - 这是应得的吗?)

感觉好像为了找到“工作的最佳工具”,我实际上需要完整地学习每一个工具以“获得”它们(这显然是不切实际的)

任何人都可以指导我如何选择这样的 API(当我以前没有使用过它们时)或者给我一些常见 API 的信息,或者这真的只是一个尝试使用大量 API 的案例吗?看看哪个最合适?

或者也许我完全错过了标记,并且有一个针对这种确切情况而没有明显缺点的框架?

非常感谢您的帮助。

编辑:

完全忘了提及它的实际作用:它并不十分复杂 - 该慈善机构运行一项交通计划,因此它保存了司机、客户、司机里程记录等的详细信息,以供查看和编辑。唯一真正的复杂性来自驱动器,因为驱动器可以被分配到可以预见的“永远”持续的重复(持续)驱动器。但是正在进行的驱动器的每个实例都必须是唯一的,因为它们可以单独取消或编辑

我选择 3 层的主要原因是因为作为一个慈善机构(有许多不太“精明”的老年志愿计算机用户)我很可能会经常更新 UI 以消除错误和小问题这对新手用户来说不是很清楚。所以我的计划是首先让服务器和数据库之间的后端绝对“防弹”,然后将我所有的注意力集中在 UI 上,这样我就可以继续开发和迭代它而不用担心后端(也是因为我将远程开发它的一部分,将更新集中在客户端稍微简单一些)

所有这些属性可能都在大喊“做一个基于 Web 的系统”——这里的障碍是,它们与已经运行的一些应用程序进行了各种棘手的集成,我不相信我能完成(正确地) 使用网络应用程序。

【问题讨论】:

  • 也许你能解释一下你的应用有多复杂?
  • @Romain - 是的,你完全正确。相应地更新了问题,干杯

标签: java database 3-tier


【解决方案1】:

对于服务器本身,您需要某种 JavaEE 服务器。

这里的常见实现是GlassFish(参考实现)和Apache Tomcat...假设您不需要比 Servlet 容器更高级的东西。如果您只是使用网络服务,则可能不会。

对于客户端,我假设您将拥有一个 GUI 应用程序,大概使用 Swing 或 SWF。您还可以选择制作一个 Web 应用程序,因为您已经需要一个 Web 服务器。

对于客户端到服务器的通信,您可以使用JAX-WS(SOAP Web 服务)或JAX-RS(RESTful 服务)实现。

JAX-WS 实现包括 Sun 的 Metro(作为 part of Java 6 SE 发布)或 Apache CXF

JAX-RS 实现包括JerseyApache CXF

对于数据库层,JDBC 不是您唯一的选择。 Java 也有Java Persistence API(JPA,目前是 2.0 版)。

JPA 通常用于 J2EE 应用程序(特别是 Web 应用程序)以简化数据库层。常见的实现有EclipseLink JPA(废弃的Oracle TopLink)和HibernateAnnotations

所有这些都基于组成 JavaEE 的各种标准:Servlet 2.5、JAX-WS 2.0、JAX-RS 1.1 和 JPA 2.0。

【讨论】:

  • 感谢所有链接 + 信息 - 让我们更清楚地了解所有这些技术是如何实现的。适合在一起。但是剩下的唯一问题是我必须开始的问题 - 我如何在这些技术组合之间进行选择?纯粹是对你喜欢的工作的个人品味,还是他们擅长特定的事情?例如,从 JAXWS 或 JAXRS 中选择哪一个?
  • JAX-WSJAX-RS 得到更广泛的支持,如果这有帮助的话......它现在甚至在标准 JRE 中,所以你不必为它包含一个单独的库(尽管你可能会选择在服务器端,因为我听说 CXF 更容易处理)。
【解决方案2】:

EJB 也出现了,但我听到了很多 针对它的仇恨 - 这是 应得的?

EJB 规范的第 1 版和第 2 版是当之无愧的。但是 EJB v3 代表了一个巨大的简化,使它们使用起来非常愉快。我实际上可以凭良心推荐使用实体 bean 而不是手动 JDBC。

至于通信协议,在最新的 EJB 3.1 规范中将 EJB 公开为 REST 或 SOAP 服务非常简单 - 只需添加一些注释即可!

【讨论】:

  • 我同意 EJB 3.x 简单得多,我只是质疑在他的案例中是否需要中间层。当然,对于中间层,您会引入另一个管理点和另一个故障点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多