不同应用程序的类加载器可以不同吗?
在运行我的应用程序时,我有时感到困惑。我的应用程序由 EJB 和 servlet 组成。我需要知道这些应用程序类型的类加载器是否相同或不同。我使用 weblogic 作为应用程序容器。 请帮我。
I am confused at a point while running my application. My application consists of EJB and servlets. i need to know, whether the class loader for these application types is same or different. I am using weblogic as application container.
Please help me.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
是的,有一个系统类加载器,所有的 webapp 类加载器都会委托给它。
要将您的类放入该类加载器中,您需要确保它位于相关的类路径中。例如,对于 Tomcat,您可以将 JAR 文件放入 $CATALINA_HOME/lib 中(...如果我没记错的话)。
话虽如此,我并不相信在多个 Web 应用程序之间共享应用程序单例是一个好的设计。
Yes there is a system classloader that all of the webapp classloaders will delegate to.
To get your class into that classloader, you need to make sure it is in the relevant classpath. For instance with Tomcat, you would put the JAR file into $CATALINA_HOME/lib (... if I'm remembering that correctly).
That having been said, I'm not convinced that sharing application singletons between multiple webapps is good design.
您会发现每个应用程序通常都会加载到它自己的类加载器实例中。类加载器将是 Web 容器提供的一个类,但每个运行的应用程序都会有一个它的实例。这允许应用程序彼此隔离,并且可以加载许多实例,无论它们是否使用静态/类变量或单例等。
You'll find that each application is typically loaded into it's own instance of a class loader. The class loader is going to be a class provided by the web container, but there will be one instance of it for each application running. This allows applications to be isolated from each other, and many instances to be loaded, regardless of whether they are using static/class variables, or singletons etc.
WebLogic 使用分层类加载器。您的应用程序是如何打包的?是 EAR 还是 WAR + JAR 的?
此链接会很有帮助。
WebLogic uses layered class loader. How is your application packaged? Is it EAR or WAR + JAR's?
This link will be helpful.