特定事件后Asterisk与应用程序断开连接

时间:2012-06-06 16:40:39

标签: asterisk

我正在使用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.

您可以看到DisconnectEvent后直接收到MeetMeJoinEvent。这种情况每次都会发生 - 它总是在MeetMeJoinEvent之后立即发生。 DisconnectEvent是一个伪事件,意味着Asterisk与我的应用程序断开连接 - 它没有与调用者断开连接。

随后,Asterisk-Java会立即自动重新连接,但如果我再次进行测试,它将以相同的方式再次发生。我尝试重新启动Glassfish应用程序服务器。

我认为我的任何更改都不应该造成这种情况,并且只有一行代码在Asterisk连接上调用disconnect(当Web应用程序关闭时),并且对应于该行的日志消息确实如此没有出现在日志中。

导致这种情况的原因是什么?

1 个答案:

答案 0 :(得分:1)

实际上并不是Asterisk与应用程序断开连接 - 这是应用程序与Asterisk断开连接。

这是因为Asterisk-Java有一个错误:它捕获事件处理程序中的异常但不捕获错误。然后它假设Asterisk必须断开连接,如果它得到一个未被捕获的Throwable。

我在Glassfish主日志文件中找到了未捕获的异常堆栈跟踪。