2012-10-26 36 views
0

不知道標題是適當的,但這裏是我的問題爪哇 - 新對象定義讀取舊的對象

我寫了一個類,例如,

版本1

class SomeClass 
{ 
    public method1() 
    { 
     ... 
     ... 
    } 

    public method2() 
    { 
     ... 
     ... 
    } 
} 

SomeClass的對象被不同的模塊推送到消息隊列中說

module1 
module2 
module3 

然後正在處理module4

現在,module3需要一些額外的功能方法3(),因此我添加額外的功能,以SomeClass的

版本2

class SomeClass 
{ 
    public method1() 
    { 
     ... 
     ... 
    } 

    public method2() 
    { 
     ... 
     ... 
    } 

    public method3() 
    { 
     ... 
     ... 
    } 
} 

和更新module3module 4與這個新類,但是模塊1和模塊2不是

module3將發佈的SomeClass(版本2)的對象到消息隊列,然而module1module2仍然張貼SomeClass對象(版本1)

會有任何問題,爲module 4具有版本2定義要讀取的對象版本1的定義?

+1

對象在消息隊列中如何表示? –

+0

您是添加成員還是隻是功能?你如何堅持/序列化這些對象? –

+0

使用JMS(Spring中的JMSTemplate)將對象發佈到消息隊列中 – Ram

回答

1

理論上它可以工作,因爲當你將對象推入消息隊列(使用ObjectMessage)時,它使用標準的Java序列化機制進行序列化。序列化不關心方法。它僅使用字段。這意味着你可以序列化對象v1,然後使用類版本2反序列化它。但是我相信你將不得不爲你的類添加專門的字段private static long serialVersionUID並手動管理它的值。

因此,您的v1和v2具有相同的字段數量和順序,並且只有方法不同纔會具有相同的serialVersionUID