是否可以在 Java 应用程序中嵌入 Openfire 服务器(版本 3.7.0)?
我正在尝试在 Eclipse 中的服务器上运行集成测试。但是,因为 Openfire 处于独立模式(条件是它可以找到它的 ServerStarter 引导类),所以当服务器尝试关闭时,它会调用我不希望发生的 System.exit(0)。
有没有办法阻止这种情况发生,即不只是故意阻止 Openfire 找到它的引导类?
我有一个成功的方法,它比尝试手动设置 Openfire 相当简单且容易得多。
将 Openfire 安装到机器(Mac、PC 等)上,使用嵌入式数据库通过管理控制台进行设置,然后根据需要将 openfire.xml 中的 adminConsole 注释掉。
将目录复制到您要从中运行单元测试的位置。如果您想确保精确的可重复性,那么每次运行测试时压缩和解压缩目录是明智的。
确保添加了所有的 jars(openfire、hsqldb、mail、bouncycastle、jasper 等)。
现在您应该能够正常启动和停止。Openfire 确实有一个怪癖。因为它是面向单例的,即使你关闭,那个单例实例仍然存在,所以如果你想在单元测试之类的东西中使用它,你必须调用 XMPPServer.getInstance() 来检查一个实例是否已经存在,然后如果 getInstance() 返回 null,则调用构造函数。
我希望这会有所帮助。