2011-09-20 32 views
2

我正在开发一个桌面Java应用程序,该应用程序应该通过代理连接到Oracle数据库,该代理可以是Servlet,EJB或其他您可以建议的代理。Oracle/Java应用程序,推荐体系结构

我的问题是应该使用什么架构?

  1. 简单的Servlets作为客户端和数据库之间的代理,连接到数据库并将结果发送回客户端。

  2. 与EJB和远程接口的企业应用程序来访问数据库

  3. ,我都没有想到的任何其他选项。

感谢

通过一些ORM JDBC的

回答

1

根据您希望解决方案的可扩展性如何,您可以做出选择。

  1. EJB(3)可以做出一个不错的选择,但你需要一个完整的应用服务器。

  2. 您可以直接使用jdbc连接,但会暴露数据库的URL(因为在每个客户端桌面应用程序都会与数据库建立连接,所以您无法集中并失去很多灵活性)。我不会推荐走这条路,除非你的应用程序真的很简单。

  3. 您可以创建一个servlet充当代理,但它的繁琐而不是可扩展的。你将不得不在两端写很多代码

  4. 我会建议创建一个基于REST的服务,对数据库执行所需的操作并在桌面应用程序中使用此服务。

+0

第3点,你能解释为什么它是单调乏味的,不可扩展的,第4点不会开发基于REST的服务,还需要两端编码?感谢您的回复 :)! – iahsan

+0

使用REST,您可以使用一些框架为您生成服务。通过揭露服务网址来抽象出数据库。所有客户端通过http连接到您的服务。无需自定义通信协议/格式。 使用servlet充当代理(我假设,您的客户端桌面应用程序使用jdbc连接到servlet,并且您的servlet连接到实际的数据库)您必须编写使您的servlet实现jdbc接口或类似的所有代码。 – kunal

+0

再次感谢您的回复,我可能没有正确回答问题,当我说'代理'时,我只是指一个中间组件,它接收来自客户端的调用并基于请求中的参数(基本上标识执行存储过程A或B等)执行存储过程,从数据库中获取结果并将其发回给用户。这是为了隐藏最终用户的数据库。那么在这种情况下,基本上REST和基于Servlet的方法都是相似的?正如其他类型用户所说,最好的方法是从Servlet开始简单? – iahsan

0

直接使用(Hibernate的举例)?

如果您正在开发独立应用程序,请更好地保持简单。为了使用ORM或其他框架,您不需要J2EE App Server(以及它所需的所有复杂性)。

如果您需要在数据库和应用程序之间交换大量数据,只需忘掉EJB,Servlet和Web服务,然后使用Hibernate(或直接使用普通的旧JDBC)。

只要您没有复杂的数据和较高的数字(尝试剖析将SOAP消息实际解组并返回给java对象需要多长时间),基于REST的Web服务解决方案可能会很好。

1

从简单起步。我将从一个简单的基于servlet/JDBC的解决方案开始,让系统端到端地工作。从这一点,考虑:

  1. 你想利用合作池(最有可能)。考虑C3P0/Apache DBCP
  2. 你想拥抱像Spring这样的框架吗?您可以逐渐迁移到此,并从使用servlet MVC功能,IoC等开始。并根据需要使用更复杂的解决方案
  3. 是否要使用ORM?你有持久/查询的复杂对象图吗?ORM会简化你的开发吗?

如果您决定采用这种方法,请确保您的架构具有良好的分层结构,以便您可以换出(比方说)原始JDBC来支持ORM,并且您的开发是测试驱动的,例如您有足够的测试用例来确认您的解决方案在您执行上述迁移时工作。

请注意,您可能会永不最终解决方案。随着您的需求变化以及您的应用程序的扩展,您可能需要调换/调出最适合当前需求的技术。因此,您的应用程序的体系结构比您选择的特定工具集更重要。

+0

最好的建议是从简单的开始。如果它正确完成,那么扩展服务的其他功能将会更容易。 – djangofan

0

我使用Spring-remoting和基于servlet的方法取得了很大的成功。这对于开发来说也是一个很好的设置,因为您可以轻松地测试代码而无需部署到Web容器。

  • 您首先定义一个服务接口来检索/存储您的数据(POJO's)。
  • 创建实现,它可以使用ORM,直接JDBC或一些池库(容器提供或第三方)。这与远程部署无关。
  • 开发您的直接使用此服务的应用程序(无需部署到服务器)。
  • 当您对所有事情都满意时,将您的实现包装在一场战争中,并使用Spring DispatcherServlet进行部署。如果使用maven,则可以通过war plugin
  • 配置桌面以通过Spring远程处理使用该服务。

我发现通过作为应用程序的一部分运行服务来轻松开发代码的能力相对于开发/调试在服务器上运行的东西具有巨大优势。我在使用和不使用EJB的情况下都使用了这种方法,尽管在我们的特例中仍然通过servlet访问EJB。只有服务调用直接使用EJB(也使用Spring远程处理)。