2013-02-23 177 views
0

我们目前正在开发一个大学项目,我们希望将其作为逻辑模块和UI模块来实现。我们没有经验部署Web应用程序,但是我们提出了以下方案:部署Java应用程序(Tomcat/Glassfish)

  1. 部署它作为一个WAR项目(这将解决我们的问题,关于我们的应用程序的后端通信的UI)。
  2. 使用webservices将两个WAR项目部署到同一个服务器中,以便在项目之间进行通信。 (我们有一个使用Tomcat服务器部署的这种方法的原型)
  3. 部署一个WAR项目和EJB项目。
  4. 部署一个EAR项目,该项目将包含对WAR和EJB项目的引用。 (我们有一个使用这种方法在Glassfish服务器上部署的原型)

我们想知道这些替代方案中的任何一个是否不正确,或者是否有任何替代方案比另一方案更好。具体来说,为什么将项目部署为EAR模块会有用(或不是)?

该项目现在开始,所以我们现在只能处理几百个用户。但是,如果项目成功,我们需要处理几百万用户。

回答

1

尽管Tomcat是一个servlet容器,但其他选择都不正确,如果您想要EJB,那么您需要类似于Tomcat扩展到完全EE支持的TomEE之类的东西。或者使用Glassfish。

什么是最好的取决于您的具体要求:您是否需要/更重视模块的解耦,或者您是否希望将一致性和可靠性捆绑在一起。 EJB还有一些额外的好处,可能会引起人们的兴趣,但它们并不适用于每个项目。请注意,除了提到的替代方案之外,还有其他方法,如基于JMS的通信,HTTP REST通信和使用OSGi来解耦程序包。

关于为什么将项目作为EAR模块进行部署会引用wikipedia:“EAR(Enterprise ARchive)是Java EE用于将一个或多个模块打包到单个存档中的文件格式,以便部署各个模块到应用程序服务器上同时发生并且一致,它还包含称为部署描述符的XML文件,这些文件描述了如何部署模块。“所以基本上你可以得到耦合的好处归结为可靠性,你总是会知道你的模块是如何相互部署的。 EAR模块非常好地支持EE机制,例如EJB模块,并且您可以获得可控的容器。

已经有一个线程When is it appropriate to use an EAR and when should your apps be in WARs?,这可能是有趣的。

+0

感谢您的回复。但是现在我有另一个问题。如果我们决定将该项目部署为多个WAR,那么应如何完成WAR之间的通信?我们正在考虑使用ApacheCXF web服务,但我们了解到使用EJB在性能方面会更好。另外,我们能否以更好的方式实现这一目标? (我们是否还应该阅读关于JMS和OSGi?) – user2100776 2013-02-23 18:10:29

+0

Web服务在标准中有很好的定义,并且存在良好的安全机制以及跨平台支持,但它们也很复杂,实现起来有些脆弱,而其他一些手段可能更具性能就像你说的。没有人会回答你应该使用哪种方法,这取决于你的用例。 JMS具有高性能,xa意识和持久性,并且比OSGi更易于理解,我会说,但它们也都是可能的。 – eis 2013-02-23 18:22:18

+0

非常感谢您的建议。 – user2100776 2013-02-23 18:38:14