我正在使用Asterisk-Java来监听来自Asterisk PBX的消息。这个应用程序曾经可以工作,但我做了一些更改,现在当我尝试运行它并从我的桌面电话进行测试电话会议时,它说:
Asterisk-Java ManagerConnection-0-Reader-2 2012-06-06 17:17:46,858 DEBUG [manager.internal.ManagerConnectionImpl] - Dispatching event:
org.asteriskjava.manager.event.MeetMeJoinEvent[dateReceived='Wed Jun 06 17:17:46 BST 2012',privilege='call,all',sequencenumber=null,meetme='1',calleridname=null,timesta
mp=null,uniqueid='1338999461.46707',server=null,calleridnum=null,channel='SIP/10.252.26.15-08b76ab0',usernum='1',systemHashcode=233612073]
Asterisk-Java ManagerConnection-0-Reader-2 2012-06-06 17:17:46,869 DEBUG [manager.internal.ManagerConnectionImpl] - Dispatching event:
org.asteriskjava.manager.event.DisconnectEvent[dateReceived='Wed Jun 06 17:17:46 BST 2012',timestamp=null,sequencenumber=null,server=null,systemHashcode=681515782]
Asterisk-Java ManagerConnection-0-Reader-2 2012-06-06 17:17:46,870 INFO [manager.internal.ManagerConnectionImpl] - Closing socket.
您可以看到在MeetMeJoinEvent
之后直接收到了DisconnectEvent
。这种情况每次都会发生 - 它总是在MeetMeJoinEvent
后立即发生。DisconnectEvent
是一个伪事件,这意味着Asterisk与我的应用程序断开连接 - 它没有与调用方断开连接。
随后,Asterisk-Java立即自动重新连接,但是如果我进行另一个测试调用,它将以同样的方式再次发生。我尝试重新启动 Glassfish 应用程序服务器。
我认为我的任何更改都不应该导致这种情况,并且只有一行代码在 Asterisk 连接上调用断开连接(当 Web 应用程序关闭时),并且与该行对应的日志消息不会出现在日志中。
可能是什么原因造成的?
实际上并不是Asterisk与应用程序断开连接 - 而是应用程序与Asterisk断开连接。
发生这种情况是因为Asterisk-Java有一个错误:它在事件处理程序中捕获异常,但不捕获错误。然后它假设Asterisk如果得到一个未捕获的可抛掷物,它一定已经断开连接。
我在主 Glassfish 日志文件中找到了未捕获的异常堆栈跟踪。