1.<Servers>
在Servers節點內,用來指定Servers Array裡的所有伺服器。TC Server通過子節點<dso-port>來佈建服務監聽連接埠為9510,使TC client 與 DSO 模式協同工作 。
2.<system><configuration-model>development</configuration-model></system>
配置DSO為開發模式
3.<clients><logs>terracotta/client-logs/pojo/chatter/%D</logs></clients>
告訴DSO把TC client的日誌放在哪裡
4.<instrumented-classes><include><class-expression>demo.sharedqueue..*</class-expression></include></instrumented-classes>
應用程式需要這些自訂的對象/類被共用,接下來的聲明告訴DSO,哪些是他們需要的,當應用程式在DSO模式下啟動並執行時候,那麼這些類的執行個體
將會用他們自己的方式廣播他們的變化。
當你打算將一個應用通過TC叢集,一個好的方法(和一個MVC的模式)是對一個包下面的所有類進行分組,這樣的寫法會讓你的工具化類的列表變
得十分的簡潔。
<instrumented-classes><include><class-expression>demo.chatter.ChatManager</class-expression><honor-transient>true</honor-transient><on-load><method>init</method></on-load></include></instrumented-classes>
ChatManager類已經被共用,但是在這個類中有的欄位是被描述成“transient”,還是應該保持“transient”欄位應有的特性。通過設定<honor-transient>為'true',聲明成“transient”的欄位所有有的都“transient”,並且他們的狀態
和值不會在不同應用的執行個體間可用。只有本地的應用執行個體可以建立,讀,寫這些欄位。
在ChatManager類中,大多的成員(“transient”和其它)都是在建立的基礎上執行個體化。然而,當DSO探索服務器端已經有一個應用對象是可用的,那麼其它的應用對象就只能簡單的收到那個應用的引用,並且它的構造器不會
被調用,“transient”欄位在這個點上是不會被初始化的,所以<on-load>是來聲明用來暗示,當DSO從服務端載入對象的時候,這個類是需要拿走的操作。
5.<distributed-methods><method-expression>void demo.chatter.ChatManager.sendNewMessageEvent(..)</method-expression></distributed-methods>
這個方法屬於root對象,這個配置可以成功的使調用放生在任何應用的執行個體中。
6.<transient-fields><field-name>demo.sharededitor.models.ObjectManager.listener</field-name></transient-fields>
這個欄位是屬於root對象的,使這些欄位“transient”,這樣這些值就只能在本地上是可用的。
7.<autolock><method-expression>* demo.sharedqueue.*.*(..)</method-expression></autolock>
這個方法(從本機物件中得來的)對一個已經被聲明為共用的對象進行操作。這個部分告訴DSO,當調用這些對象的時候,假設給它加上了一把持久的鎖。實際上,這個部分聲明了所有能在
'demo.sharedqueue.Main'類中找到的方法,這個類中的所有方法假設都需要進行加鎖。