2012-10-17 2 views
3

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; 
} 

답변

2

SIPDialog 클래스는 비교에 실패한 이유 인 equals 메서드를 재정의하지 않습니다. jain sip에서 http://java.net/jira/browse/JSIP

+0

Thx로 문제를 열어주세요. 충돌 시나리오에서 견고성을 위해 대화 상자를 성공적으로 저장하고 복원 한 사람으로부터 소식을들을 수 있기를 바랍니다. – jeera

+1

우리는 실제로 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

+0

예, 그게 아주 도움이. 그래서 cassandra를 JBoss 캐시 대신 사용할 수 있습니까? – jeera

0

SipDialog이 클래스의 경우 흠, 당신은 단지 모든 작업을 생략하고 카산드라에 대한 PlayOrm을 사용할 수 있습니다). 그런 다음 직렬화/직렬화를 처리 할 필요가 없습니다.

클래스가 아닌 경우 제 3 자 Bean을 바인딩하는 파일에서 Guice가하는 것처럼 엔티티로 변환 할 수있는 방법을 추가하여 그 엔티티에 바인딩 할 수 있다고 생각합니다. PlayOrm로 저장됩니다. 요청으로 PlayOrm에서 티켓을 여는 경우, 아마 1 주일 만에 기능을 사용할 수 있습니다.