使用非弹簧Web应用程序可以实现并行Spring-MVC应用程序吗?

时间:2012-10-24 15:34:20

标签: java spring tomcat spring-mvc

我有一个非常庞大的Tomcat应用程序。非常适合商业(真钱赚钱)。但它是遗留的Java代码。意思是,JSP(有很多Javascript,Java代码),Servlets(有几千行代码)等等。我们希望摆脱这个糟糕的代码。现在已经有另一个应用程序(不同的目的,不同的功能)的请求。我们需要在另一个上下文root / NewApp让我们说在遗留应用程序目录结构下。像一个迷你网站。它将具有不同的URL,甚至可以为几个虚拟主机提供服务。

我们不想扩展旧版代码。我们希望转向更好的技术和更好的做事方式。我们强烈要求Spring(tile,jackson等等)以及它提供的所有东西,包括portlet。因此,我们正在考虑将DispatcherServlet / ContextLoaderListener / configLocation等引入遗留应用程序web.xml并将弹簧应用程序并排放置的可能性。

主要原因是新应用程序严重依赖于遗留服务和库。

  1. 这种和平共处是否可能?
  2. 我们可能遇到的挑战是什么?
  3. 您能指点我们任何示例配置吗?
  4. 不幸的是,我们无法将它们分开。感谢您对此的见解。

    谢谢!!

1 个答案:

答案 0 :(得分:4)

我们在不久前经历了一个类似的用例,同时将适度大的应用程序从EJB 2.1迁移到Spring。在很长一段时间内,Spring bean与EJB共存。我们首先在依赖关系层次结构中选择了叶子,因此Spring bean依赖于EJB而不是相反的方式。这很漂亮,由于Spring代理和依赖注入,bean像任何其他bean一样调用EJB。

在同一个应用程序中,我们同时拥有Struts 1和Wicket用于新页面(该死的,Struts页面中甚至还有Wicket iframe!),我们甚至将基于JDBC的传统持久性解决方案与JPA并排。一切都运作良好。

要记住的事情:

  1. 它仍然是一个应用程序,注意后端缓存

  2. 对待像Spring bean这样的传统服务。构建一些桥/代理/适配器,注入遗留服务,就像注入其他bean一样。不依赖于遗留API(我想象一些单身人士,工厂,JNDI查找)

  3. 测试新旧之间的界限会很困难,为很多嘲笑做好准备。

  4. 考虑一下网络安全性,您能轻松整合这两个“应用程序”吗?

  5. 让我们面对现实,你永远不会完全将旧代码重写为新技术。到那时,新技术也将变得陈旧,新的开发人员将会加入。但是每次都要逐步提高旧代码的质量。重构可以创造奇迹!

  6. 配置没什么特别之处。这是一个误解,Spring必须统治整个应用程序。它可以用作轻量级,轻薄的附加组件,与您的应用程序的其他部分一起使用。