Sam*_*mmy 8 java tomcat weblogic jar classpath
我有一个捆绑为可执行jar文件并添加到weblogic/tomcat类路径的库,如何在服务器启动并从jar文件加载类时从jar文件执行main方法.
我想要的是在加载jar文件并且服务器在没有任何用户干预的情况下启动时首先执行一些初始化代码.
注意:我知道我可以在war文件中捆绑我的jar,但是我的库中有一些aspectj代码,我想在jvm中编织所有正在运行的应用程序,当我在war文件中捆绑我的jar时,aspectj代码只会编织进入war文件中的类,所以我在类路径中添加了我的库jar文件.
提前致谢.
使用以下代码在JAR中添加一个类:
public class TomcatStartupListener implements org.apache.catalina.LifecycleListener {
public void lifecycleEvent(org.apache.catalina.LifecycleEvent event) {
if (event.getType().equals("after_start")) {
// call your main method here
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意:为了编译它,您需要添加<tomcat-dir>/lib/catalina.jar到类路径中.否则,在编译时将无法找到必要的接口(org.apache.catalina.LifecycleListener和org.apache.catalina.LifecycleEvent).一旦完成编译,就像往常一样放置JAR <tomcat-dir>/lib.
现在打开<tomcat-dir>/conf/server.xml并在以下<Server>部分添加以下内容:
<Listener className="com.yourpackage.TomcatStartupListener" />
Run Code Online (Sandbox Code Playgroud)
现在,只要你的Tomcat服务器启动,TomcatStartupListener你的JAR中的这个类就会被调用,你可以调用你的main方法.还有很多其他的事件类型!您可以使用以下任何一种事件类型:
这种方法是必要的,因为类加载器在Tomcat(甚至大多数JVM)中的工作方式.以下是该链接的重点:
There are three aspects of a class loader behavior
Lazy Loading
Class Caching
Separate Namespaces
Run Code Online (Sandbox Code Playgroud)
如果所有JAR中的所有类都被不加区别地加载,JVM将变得非常繁重.因此,共享JAR中的类仅按需加载.调用main方法的唯一方法是添加上面的生命周期监听器.
| 归档时间: |
|
| 查看次数: |
1927 次 |
| 最近记录: |