gov.nist.javax.sip.stack.SIPDialog 객체를 직렬화 및 비 직렬화하여 Cassandra에 넣으려고했습니다. 하지만 직렬화 된 원래 SIPDialog 객체와 비교할 때 deserialized 객체에서 equals 비교가 실패합니다. 그래서 내가 여기 직렬화에서 뭔가를 놓치고있는 것처럼 보입니다. ByteArraySerializer를 사용하여 바이트를 Cassandra로 읽고 쓰고 있습니다.SIPDIalog의 직렬화/비 직렬화
// 저장 대화 상자
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;
}
Thx로 문제를 열어주세요. 충돌 시나리오에서 견고성을 위해 대화 상자를 성공적으로 저장하고 복원 한 사람으로부터 소식을들을 수 있기를 바랍니다. – jeera
우리는 실제로 Mobicents SIP 서블릿 (http://code.google.com/p/sipservlets/) 및 Mobicents JAIN SLEE http://code.google.com/p/jain-slee/에서 코드를 작성했습니다. 꽤 오랫동안 생산되었습니다. JBoss Cache에 저장합니다. 우리가 만든 확장은 HAIN 프로젝트의 JAIN SIP Stack http://code.google.com/p/jain-sip/에서 볼 수 있습니다. TeleStax, Inc.에서 수행 한 확장을 통해 다음을 통해 고 가용성 및 내결함성을 제공합니다. 스택의 다양한 상태 복제. Call Established Failover 또는 Early Dialog Failover를 지원합니다. – jeand
예, 그게 아주 도움이. 그래서 cassandra를 JBoss 캐시 대신 사용할 수 있습니까? – jeera