openfire客户端传送文件bug解决 2017-12-15
从同事手里中途接手了一个业务实现:使用smack连接openfire客户端并实现接收发送文件,与另一家业务公司通讯。然后今天使用是,突然发现,使用Listener 初始化的类竟然启动了两次。 导致连接的openfire的实例有了两个
<Listener>
<Listener-class>
类路径
</Listener-class>
</Listener>
初始化代码
public void contextInitialized(ServletContextEvent paramServletContextEvent) {
connTool = XMPPConnUtils.getgetInstance();
conn = XMPPConnUtils.conn;
String loginName = connTool.loginName;
String loginPass = connTool.loginPass;
String resName = connTool.resName;
try {
// 1、用户登录
conn.login(loginName, loginPass, resName);
// 2、启动文件接收监听
CGReceive.receiceCGXML(conn);
} catch (XMPPException e) {
e.printStackTrace();
}
}
按道理来说,这个初始化的时候会自动登录openfire并有连接实例,供下面程序使用。但是最后在使用的时候,发现连接有了两个实例。而导致无法接收文件,或者无法发送文件问题。我也只能去看同事的代码,以寻找问题所在。吐槽一下,什么破代码 mdzz
问题原因
在很多类中都声明了静态的连接实例,在类加载的时候就已经开始初始化连接了。而导致多实例出现,
解决办法
将所有静态实例变为方法属性,到使用是才取Servlet初始化时初始化的连接使用。