特别是,我想知道是否可以在同一个JVM中再次初始化,销毁和初始化与特定Web应用程序关联的(?)servlet上下文。
答案 0 :(得分:1)
答案 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等等,这些都可能导致麻烦。