EQUIP4J
| 華夏公益教科書使用者認為此頁面應該拆分為具有更窄子主題的較小頁面。 您可以透過將此大頁面拆分為較小的頁面來提供幫助。請確保遵循命名策略。將書籍分成更小的部分可以提供更多重點,並允許每個部分都做好一件事,這對每個人都有益。 |
這是 Equip4j 的教程。簡而言之,equip4j 實現(不僅僅是)資料空間的概念。資料空間可以被解釋為分散式計算的中介軟體解決方案。
Equip4j 是一個為 Equator 專案 (http://www.equator.ac.uk/) 開發的 Java 庫。原始碼可以在 http://sourceforge.net/projects/equip 中找到。
基本上,equip4j 提供了一個利用資料空間概念的 Java 庫。檢視 equip4j 工作方式的一種方法是透過軟體元件的三個角色:伺服器、消費者和生產者。消費者可以對任何型別的元組 (1) 進行訂閱,生產者將元組(或對它們的更新)釋出到伺服器 (2),而伺服器處理並通知消費者有關新元組的資訊 (3,4)。任何軟體元件都可以承擔消費者或生產者的角色。
為了簡化實現,Equip4j 提供了用於透過 JavaBean 框架處理、管理和分發元組的庫。此處提供的文件大多涉及圍繞 equip4j 中此特定 JavaBean 支援的庫。
元組“是一個有限的元素序列”或元素(類似於資料庫中的行)。在 equip4j 中,元組是一個用於在生產者和消費者之間交換資訊的泛型類。在 equip 中,元組有兩個子類:Tuple 和 TupleEvents。
equip 元組中的元素儲存在一個數組中。建立元組的方式如下
Tuple message =new TupleImpl(new StringBoxImpl("Chat"),
new StringBoxImpl("Peter"),
new StringBoxImpl("Hello!"),
new StringBoxImpl("Jane"));
此元組可以表示 Peter 向 Jane 傳送的聊天訊息(Hello)。由於元組的元素在陣列中,元素的順序保持不變,並且可以有意義,即第二個元素是“訊息傳送者”。注意元組中的每個元素都是 ValueBase 類的子類,在示例中,StringBoxImpl 用於傳送字串。此外,Tuple 類還有兩個其他欄位:name 和 id,元素儲存在 fields 欄位中。
當前的建構函式允許一定數量的最大欄位。如果您需要超過當前最大數量的欄位(在 fields 中),可以按照以下步驟直接操作 fields 欄位
Tuple message =new TupleEventImpl();
message.fields = new ValueBase[12];
message.fields[0] = new StringBoxImpl("Chat");
message.fields[1] = new StringBoxImpl("Peter");
...
message.fields[10]= new StringBoxImpl("Hello!"),
message.fields[11]= new StringBoxImpl("Jane");
關於欄位中的空值,以下是一些可能性
message.fields[0] = new StringBoxImpl("Chat"); /* Correct*/
message.fields[1] = new StringBoxImpl(null); /* Correct but DANGEROUS */
message.fields[9] = null; /* Correct and recommended*/
DataspaceBean 類代表伺服器,允許程式(消費者和生產者)與伺服器(作為代理)通訊。建立此類的例項的形式如下
...
DataspaceBean mydataspace = DataSpaceBean();
...
mydataspace.setDataspaceUrl("equp://127.0.0.1:9123");
...
在示例中,假設有一個 equip 伺服器在 IP 地址 127.0.0.1(本地機器)和埠 9123 上執行。
在伺服器中釋出新 Tuple 的形式如下
...
/* first create the tuple*/
Tuple message =new TupleImpl(new StringBoxImpl("Chat"),
new StringBoxImpl("Peter"),
new StringBoxImpl("Hello!"),
new StringBoxImpl("Jane"));
/* then, put name and id */
message.id=mydataspace.allocateId();
message.name="chat_message";
/* finally add the tuple to the dataspace */
...
mydataspace.add(message);
...
如果要新增的元組是“事件”,則必須按照以下步驟新增到資料空間
...
mydataspace.addEvent(myeventTuple);
...
在您不想在新增事件時生成警告的情況下,初始化事件的元資料欄位是一個好主意。初始化元資料(僅作為示例)的兩種形式
...
this.localGUID=mydataspace.allocateId();
...
myeventTuple.initMetadata(localGUID,false,true);
//or
myeventTuple.initMetadata(null,true,false);
...
此介面必須由消費者實現,如果消費者希望收到有關事件的通知,例如,伺服器中釋出的新元組。必須實現 dataspaceEvent(DataspaceEvent event) 方法來處理事件。呼叫時,dataspaceEvent 會將 DataspaceEvent 類作為引數接收。DataspaceEvent 類允許檢索生產者釋出的元組。
實現偵聽器的形式如下
...
class MyListener implements DataspaceEventListener (...)
...
public void dataspaceEvent( DataspaceEvent myevent)
...
/* process my event in case of AddEvent */
if (myevent.getEvent() instance of AddEvent) {
Tuple mytuple = (Tuple) event.getAddItem();
...
請注意,存在多種型別的事件。
最後,訂閱“AddEvent”型別事件的形式如下。
MyListener mylistener(...);
...
/* the mytupletemplate represents the kind of tuples mylistener wants to consume*/
/* nulls can be used as wildcards */
Tuple mytupletemplate = new Tupleimpl (new StringBoxImpl("Chat"),new StringBoxImpl("Jane"), null, null);
mytupletemplate.name="chat_message";
...
mydataspace.addDataspaceEventListener(mytupletemplate,false, mylistener)
上面的程式碼允許 mylistener 在生產者釋出(新增)元組時接收通知(事件),其中前兩個元素陣列中的第一個元素包含“Chat”和“Jane”,name 等於“chat_message”,其他欄位中的任何其他資訊(同樣,空值是一個萬用字元)。
執行 equip 作為伺服器的最簡單方法如下
java -cp <equip-jar-path> equip.data.server equip://<ip-address>:<portnumber>
作為具體示例,在當前機器上執行 equip(equip4j.jar 必須放置在執行命令的目錄中)
java -cp equip4j.jar equip.data.server equip://:9123
Browser2 類允許瀏覽資料空間(瞭解資料空間中發生了什麼,並瞭解您的程式對資料空間的操作,例如事件、新增專案等是否正常工作)。呼叫瀏覽器的形式如下
java -cp <path to equip4j.jar> equip.data.Browser2 equip://<ip-address>:<portnumber>
- equip4j Javadocs 連結 http://www.crg.cs.nott.ac.uk/~cmg/Equator/Downloads/docs/equip4j/javadoc/index.html(最重要的類位於包 equip.data 和 equip.data.beans 中)。
- 可以從 http://193.137.8.61/equip4jchatexample.zip 下載聊天程式示例
- EQUATOR 專案頁面 http://www.equator.ac.uk/
- EQUIP 和 ECT 原始碼 http://sourceforge.net/projects/equip
- Chris Greenhalgh 的 Equator 專案頁面 http://www.crg.cs.nott.ac.uk/~cmg/Equator/
- 維基百科元組定義:元組
