Java中的三层(非Web)数据库应用程序 - 哪些API /技术适合?

时间:2010-06-29 18:54:16

标签: java database 3-tier

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

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

即。客户< - >服务器逻辑< - >数据库

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

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

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

任何人都可以给我指导如何选择像这样的API(当我以前没有使用过它们)或者给我一些常见的信息,或者它真的只是试验了很多它们的情况看哪哪个最合适?

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

非常感谢您的帮助。

编辑:

完全忘记提及它实际上做了什么:它并不是非常复杂 - 慈善机构运行一个交通方案,因此它包含了司机,客户,驾驶员里程记录等详细信息,供查看和编辑。唯一真正的复杂性来自于驱动器,因为驱动程序可以分配给重复(正在进行)的驱动器,可以预见“永远”。但是,正在进行的驱动器的每个实例都必须是唯一的,因为它们可以单独取消或编辑

我正在争取3层的主要原因是因为是一个慈善机构(许多年龄较大的志愿者计算机用户并不是非常“精明”)我可能会经常更新UI以消除错误和位新手用户不太清楚。所以我的计划是首先让服务器和数据库之间的后端完全“防弹”,然后把我所有的注意力集中到UI上,这样我就可以继续开发和迭代它而不用担心后端(因为我将会是远程开发它,在客户端集中更新更简单)

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

2 个答案:

答案 0 :(得分:2)

对于服务器本身,您需要某种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。

答案 1 :(得分:1)

  

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

对于EJB规范的版本1和版本2,它是完全应得的。但是EJB v3代表了一种巨大的简化,使得它们使用起来非常愉快。我实际上可以在良心上建议使用实体bean而不是手动JDBC。

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