Java Jboss WS和线程
我制作了一个测试WebService,它启动线程,每10秒写入一次文件时间戳。我故意不让线程停止mehanism。 现在,如果我停止测试WebService,甚至删除它,该线程将永远存在Jboss中 (需要重新启动JBoss)。 JBoss不知道在WebService上下文中生成的线程,这正常吗 在JVM中,当应用程序关闭时,所有线程都被杀死,但这里是Jboss拥有的JVM, 它动态加载类 这是“功能”还是bugJava Jboss WS和线程,java,multithreading,jboss,Java,Multithreading,Jboss,我制作了一个测试WebService,它启动线程,每10秒写入一次文件时间戳。我故意不让线程停止mehanism。 现在,如果我停止测试WebService,甚至删除它,该线程将永远存在Jboss中 (需要重新启动JBoss)。 JBoss不知道在WebService上下文中生成的线程,这正常吗 在JVM中,当应用程序关闭时,所有线程都被杀死,但这里是Jboss拥有的JVM, 它动态加载类 这是“功能”还是bug 我问这个问题,因为我们有第三方应用程序在执行线程,我注意到它们在WebServic
我问这个问题,因为我们有第三方应用程序在执行线程,我注意到它们在WebService析构函数上没有关闭,所以在重新发布后,我们有一个问题。清理Web服务使用的资源,是WebService本身的责任 Tomcat将帮助您在Web服务未正确执行此操作时记录警告(例如,当MySQL JDBC驱动程序离开时),它甚至会尝试为您清除ThreadLocals(另请参见实用程序类中的注释) 在您的情况下,由于您正在Web服务中使用第三方应用程序,因此在拔出Web服务时,您有责任清理第三方应用程序使用的资源。如果JBoss至少能像Tomcat那样报告“资源泄漏”,那就太好了,但这将是一个特性,而不是一个bug 我制作了一个测试WebService,它启动线程,每10秒写入一次文件时间戳。我故意不让线程停止mehanism。现在,如果我停止测试WebService,甚至删除它,线程将永远存在Jboss中(需要重新启动Jboss)。JBoss不知道在WebService上下文中生成的线程,这正常吗 你不应该启动自己的线程,所以JBoss不会帮你清理东西 另请参见(主要适用于企业Java bean)或“” 如果第三方应用程序自己执行线程,而您无法更改它,那么它可能不适合应用程序服务器。将旧应用程序移植到JavaEE中的一个老技巧是使用具有init和destroy方法的方法来管理其生命周期
如果您可以更改,请查看我上面链接的问题/答案,使用
ExecutorService
是管理线程的现代方法,以便服务器知道您的工作。是的,正如我所假设的。不过,在JBoss中注册线程可能会有点麻烦。@Marvin你和我强烈建议:如果你停止/启动自己的线程,就会发生一些奇怪的事情。我已经使用JBoss的线程池成功地管理了JBoss5.1中的线程(用于定制服务)。如果不使用JBoss的线程池,它将无法正常工作。Mine WS使用自己的老式线程管理,正如在jvm中一样(毕竟,JBoss只是“另一个”java应用程序:),但由于它不是新软件,而且逻辑是线程始终与webservice上下文共存,他们也应该考虑一下。我同意,他们这样写,这是你自己的处理方式,但要告诉用户避免线程,这意味着他们的Web服务要像“hello world”一样:P@Marvin:我不明白你关于“告诉用户避免线程”的观点。你的意思是“我团队中的其他程序员在制作Web服务”?我在一些JBoss页面上读到过,在Web服务中制作自己的线程令人沮丧。它不应该超出您对它们的控制范围(启动/停止)