JBoss中的Web应用程序,servlet上下文和JVM之间的关系是什么?

时间:2014-03-19 15:39:56

标签: java jboss servletcontextlistener

特别是,我想知道是否可以在同一个JVM中再次初始化,销毁和初始化与特定Web应用程序关联的(?)servlet上下文。

2 个答案:

答案 0 :(得分:1)

基于问题的评论主题和支持otherresearch,看起来JBoss不会为不同的Web应用程序启动单独的JVM,这意味着会有除了在同一个JVM中,JBoss没有其他方法可以重新部署Web应用程序。

答案 1 :(得分:1)

JVM只是运行所有Java代码的虚拟机,JBoss是运行java代码的一个例子(JBoss不是JVM)。

接下来,JBoss Application Server构建在该虚拟机上,并在内部创建"容器环境"这是提供JEE规范服务所必需的(Servlets是其中的一部分)。

JEE应用程序可以包含多个不同的可部署工件,包括Enterprise Java Bean(无状态和有状态会话Bean,消息驱动Bean),Web应用程序(WAR)和企业应用程序(EAR,它们是EJB等其他工件的组合)。的WAR)。

Servlet是Web应用程序的一个组件。 Servlet本身不是可部署的工件。

可以将Web应用程序部署,启动,停止,取消部署并重新部署到正在运行的JEE容器(例如JBoss)中。容器的一部分责任是启用此功能并确保可以合理安全地完成此功能。容器也有责任帮助隔离不同的可部署工件(通常通过类加载器恶作剧)。

因此,从这个意义上说,可以部署,执行,停止,取消部署包含Servlet的WAR,然后再安全地再次部署到正在运行的容器中。单个Servlet不能,只有WAR整体。

然而,由于JVM的实际情况,事实是组件只能彼此隔离,即使从运行的服务器中删除组件后,仍有一些事情会导致组件留下痕迹,和其他问题。

作为一般规则,它主要工作,运行良好且可靠,但不同的容器以不同的方式执行操作,并且行为不当的组件可能会对实时JVM造成严重破坏(无论是否设计)。

应用程序越简单,工作得越好。开始玩线程游戏,堆内存,没有与应用程序捆绑的jar等等,这些都可能导致麻烦。