序列化/反序列化SIP对话框

3

我尝试将gov.nist.javax.sip.stack.SIPDialog对象序列化并反序列化到Cassandra中。但是,当我将反序列化的对象与我序列化的原始SIPDialog对象进行比较时,equals比较失败了。看起来我在序列化方面漏掉了一些东西。我正在使用ByteArraySerializer将字节读写到Cassandra中。

//保存对话

MutationBatch mutationBatch = createMutator();
byte[] dialogBytes = SIPDialogEntity.serializeDialog(dialog);

mutationBatch.withRow(SIPDIALOGS, dialogId)
.putColumn("dialog".getBytes(),dialogBytes,null);
mutationBatch.execute();

public static byte[] serializeDialog(SIPDialog dialog) throws IOException {

    ByteArrayOutputStream bStream = new ByteArrayOutputStream();
    ObjectOutputStream oos = new ObjectOutputStream(bStream);       
    oos.writeObject(dialog);
    oos.close();
    byte[] bytes = bStream.toByteArray();
    bStream.close();

    return bytes;
}   

//阅读对话

Column<byte[]> result;
result = getKeySpace().prepareQuery(SIPDIALOGS).getKey(dialogId).getColumn("dialog").execute().getResult();
        sipDialog = SIPDialogEntity.deserializeDialog(result.getByteArrayValue());

public static SIPDialog deserializeDialog(byte[] byteArrayDialog) throws IOException, ClassNotFoundException {      
    System.out.println("DEBUG Reading Dialog Bytes:" + byteArrayDialog );       
    ByteArrayInputStream bStream = new ByteArrayInputStream(byteArrayDialog);
    ObjectInputStream ois = new ObjectInputStream(bStream);     
    SIPDialog dialog = (SIPDialog) ois.readObject();
    ois.close();
    bStream.close();
    return dialog;
}   
2个回答

2

SIPDialog类没有覆盖equals方法,这就是为什么它无法进行比较的原因。请在jain sip中打开一个问题:http://java.net/jira/browse/JSIP


谢谢。希望我也能听到那些成功保存和恢复对话框以增强崩溃场景鲁棒性的人的经验分享。 - jeera
1
我们实际上是在Mobicents SIP Servlets(http://code.google.com/p/sipservlets/)和Mobicents JAIN SLEE(http://code.google.com/p/jain-slee/)中进行的编程,并且该代码已经投入生产相当长的时间了。虽然我们将其存储在JBoss Cache中,但您可以在此处查看我们创建的JAIN SIP Stack扩展http://code.google.com/p/jain-sip/,其中HA项目提供了由TeleStax,Inc.完成的扩展,通过复制堆栈的各种状态来提供高可用性和容错性。它支持呼叫建立故障转移或早期对话故障转移。 - jeand
jeand,非常有帮助。所以我想可以用Cassandra替换JBoss Cache? - jeera
是的,可以为Cassandra创建一个新的后端,并将其轻松地插入当前的JAIN SIP HA中,而不会遇到太多麻烦。您想贡献这样的后端吗? - jeand

0

嗯,如果SipDialog是您的类,您可以跳过所有工作并使用cassandra的PlayOrm。那么您就不需要处理序列化/反序列化。

如果它不是您的类,我认为我会让他们添加一种添加第三方bean的方法,以便像Guice在绑定文件中所做的那样将其绑定到可以由PlayOrm保存的实体。 如果您在PlayOrm上开一个请求票,我们可能只需一周就能得到该功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接