是否可以在没有单独的J2EE容器部署的情况下虚拟化war文件执行?

时间:2010-04-01 03:07:37

标签: tomcat java-ee websphere weblogic jetty

假设我想允许我的开发人员将他们的war文件上传到我们内联网上运行的网络应用程序(而不是应用程序服务器本身)和该网络应用程序< / strong>然后运行那些战争好像它们是我们在J2EE容器中单独部署的单独应用程序

换句话说,我们实际上并没有将wars部署为容器中的单独应用程序 - 它们只是在这个Web应用程序中并行运行 就像一个J2EE容器

这可能吗?

类似于war虚拟化应用程序?

2 个答案:

答案 0 :(得分:0)

您可以开始创建ClassLoader,展开.war,加载类并将请求发送到您的应用程序到正确的子网络应用程序。这看起来像是重新发明轮子(假设app。服务器已经这样做了)并且可能非常复杂。

另一方面,这与portlets的工作方式非常相似。 Portlet打包到.war文件中,然后由门户使用。例如,在Liferay门户中,您可以从liferay门户(而不是应用程序服务器本身)上载portlet .war。然后,Liferay会将上传的.war文件放在应用程序的自动部署目录中。然后将像常规Web应用程序一样部署服务器。然后有一个portlet桥,它将请求从门户网站分发到正确的portlet web应用程序等。可能值得仔细研究一下。

我不知道你的要求,但我明确地试着保持简单,因为这样的东西会变得非常复杂。但你可以:

  • 让用户从您的应用程序上传.war
  • 操纵.warweb.xml以确保上下文类似于/ParentApp/ChildApp
  • 将修改后的.war保存到自动部署文件夹并让应用。服务器部署它

这将提供您可以从父Web应用程序部署子Web应用程序的错觉。

答案 1 :(得分:0)

为什么你需要他们在另一场战争的背景下奔跑?听起来你需要做些什么来实现你的目标 - 如果你在战争中运行它可能是不可能的 - 是建立一场战争然后接受他们上传的战争并使用API​​来部署Web服务器的战争暴露部署战争,从而让它作为顶级网络应用程序运行。我认为没有其他办法可以做到。