main函数
openfire 3.10是openfire最近更新的版本,下面就开始分析openfire源码,在后面的分析中,贴出的源码会删除一些不必要的部分,如果要查看全部源码,最好从官网下载源码对比。
openfire的3.10的源码在Eclipse展开后如下图所示(部分)
main函数
openfire的main函数有两个
/src/java/org/jivesoftware/openfire/launcher/Launcher.java
/src/java/org/jivesoftware/openfire/starter/ServerStarter.java
Launcher的main函数主要和图形界面有关
ServerStarter的main函数是重点要关注的
public static void main(String [] args) {
new ServerStarter().start();
}
- 这里创建了ServerStarter实例并调用了start函数
- ServerStarter构造函数为空函数
start()
private void start() {
try {
final ClassLoader parent = findParentClassLoader();
String libDirString = System.getProperty("openfire.lib.dir");
File libDir;
if (libDirString != null) {
libDir = new File(libDirString);
}
else {
libDir = new File(DEFAULT_LIB_DIR);
}
String adminLibDirString = System.getProperty("openfireHome");
if (adminLibDirString == null) {
adminLibDirString = DEFAULT_ADMIN_LIB_DIR;
}
else {
adminLibDirString = adminLibDirString+"/plugins/admin/webapp/WEB-INF/lib";
}
File adminLibDir = new File(adminLibDirString);
ClassLoader loader = new JiveClassLoader(parent, libDir);
Thread.currentThread().setContextClassLoader(loader);
Class containerClass = loader.loadClass(
"org.jivesoftware.openfire.XMPPServer");
containerClass.newInstance();
}
catch (Exception e) {
}
}
findParentClassLoader()就是获得类加载器,从本进程开始一步步到系统的类加载器
接下来通过系统环境变量名openfire.lib.dir获得库路径,默认路径为DEFAULT_LIB_DIR = “../lib”,然后构造库的libDir
然后用类似的方法构造adminLibDir管理类库的路径
最后通过类加载器创建org.jivesoftware.openfire.XMPPServer