Tigase組件第一節 – 概述和基礎信息

本文翻譯自 - http://www.tigase.org/content/component-implementation-lesson-1-basics java

Tigase組件是一個具備jid的實體。它能夠接受/處理也能夠產生packet。 服務器

舉一些你們都知道的組件:MUC-多人聊天室或者PubSub-內容訂閱。在Tigase服務器當中,所乎全部的東西實際上都是一個組件:Session Mananger/s2c connection manager/Message Router等等。組件基於服務器配置信息被加載,新添加的組件能夠運行時被服務器加載和激活。你能夠簡單的在配置文件中修改類名來替換一個組件。 less

開發組件是Tigase開發過程當中的一個必不可少的部分,在過程當中可使用不少現成的API和代碼,讓工做變得簡單。下面的文檔會幫助你熟悉現有的API,讓組件開發更有效率。 dom

組件實現第一節  - 開發基礎

Tigase組件的開發很簡單,使用現成的API可讓你只用簡單幾行代碼就開發出功能強大的組件。你能夠在不少地方找到API描述文字。這一系列課程使用代碼樣例來傳授如何使用盡量簡單的代碼和現成API來產生預期的效果。 ide

Even though all Tigase components are just implementations of ServerComponent interface I will keep such a low level information to necessary minimum.基於實現接口來建立組件是可行的,但不夠高效。咱們的目的是教會你如何使用現成的代碼,只須要簡單的幾段代碼。 wordpress

這就是第一課,第一課囊括了組件實現的基礎知識。咱們如今建立一個組件: 測試

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.util.logging.Logger;
import tigase.server.AbstractMessageReceiver;
import tigase.server.Packet;
 
public class TestComponent extends AbstractMessageReceiver {
 
  private static final Logger log = Logger.getLogger(TestComponent.class.getName());
 
  @Override
  public void processPacket(Packet packet) {
    log.finest("My packet: "+ packet.toString());
  }
 
}

extend AbstractMessageReceiver 抽象類惟一須要作的事情就是實現 void processPacket(Packet packet) 方法。這實際上是組件處理packet的真正邏輯處理代碼實現。類的名字是TestComponentthis

只使用這麼幾行代碼就完成了一個全功能的tigase組件,能夠被加載到Tigase服務器,能夠接收並處理packet,能夠輸出服務發現信息,能夠對管理器的ad-hoc指令作出應答,支持腳本,生成統計信息,能夠被部署爲外部組件等。 spa

在爲接口實現添加更多功能以前,咱們先對組件進行配置,確保在服務下一次啓動的時候組件可以被順利加載。假如init.properties文件是這樣的: 翻譯

1
2
3
4
5
6
7
8
9
10
config-type = --gen-config-def
--debug = server
--user-db = derby
--admins = admin@devel.tigase.org
--user-db-uri = jdbc:derby:/Tigase/tigasedb
--virt-hosts = devel.tigase.org
--comp-name-1 = muc
--comp-class-1 = tigase.muc.MUCComponent
--comp-name-2 = pubsub
--comp-class-2 = tigase.pubsub.PubSubComponent

配置文件當中已經有了兩個組件muc和pubsub,如今咱們添加第三個——咱們本身的新組件:在後面添加兩行配置項。

1
2
--comp-name-3 = test
--comp-class-3 = TestComponent

如今須要刪除etc/tigase.xml,而後重啓。

查看組件是否被服務器加載有幾種方法,最簡單的一種是經過XMPP客戶端使用管理員賬號鏈接到服務器,而後查看服務發現列表。若是一切正常的話,你應該看到如圖所示的一個列表,組件的描述信息是「未定義的描述」,這是一個默認的描述信息,咱們能夠在後面來對這個信息進行修改,組件的默認JID是「test@devel.tigase.org」,「devel.tigase.org」是域名,「test」是組件的名稱。

經過管理員賬號鏈接服務器,打開服務發現列表

另一個方法是藉助日誌來看組件是否已經被加載。養成使用日誌查看系統運行信息的習慣對於tigase的開發是很是有幫助的。日誌文件存放於logs文件夾,logs/tigase.log.0的內容以下,若是組件已經被加載,你會看到相似於下面的信息:

1
2
3
4
5
MessageRouter.setProperties() FINER: Loading and registering message receiver: test
MessageRouter.addRouter() INFO: Adding receiver: TestComponent
MessageRouter.addComponent() INFO: Adding component: TestComponent
MessageRouter.addComponent() FINER: Adding: test component to basic-conf registrator.
Configurator.componentAdded() CONFIG:  component: test

若是你的組件沒有被加載,那麼首先應該檢查的是配置文件。也許在啓動tigase服務以前忘記了刪除tigase.xml文件,或者是TestComponent沒有正確得被放置到類路徑下。

若是一切正常,就像第一張圖片展現的那樣,已經能夠看到剛開發的組件。在組件上面雙擊,會彈出一個ad-hoc(管理器腳本)命令窗口。就像下圖那樣,窗口裏應該只有兩個選擇——增長和刪除。


命令列表

還能夠在服務發現窗口裏面查看新組件的統計信息,點擊新組件就能夠看到,它是很是基本的packet計數器。


查看統計信息

正如你所看到的,簡單的幾行代碼就已經能夠開發出功能強大的組件了。如今,你也許會問,這個組件能作些什麼事情嗎?好比接收和處理packet。使用你最熟悉的xmpp客戶端向test@devel.tigase.org(若是你將你的domain設置爲devel.tigase.org)發送一個消息看看會發生什麼,根據processPacket(…) 當中的代碼,它會把發送的消息打印日誌。在測試中我發送了一個標題爲「test message」 body體爲「this is a test」的消息,日誌文件應該會包含有下面的項:

1
2
3
4
5
TestComponent.processPacket() FINEST: My packet: to=null, from=null,
data=
  test message
  this is a test
, XMLNS=jabber:client, priority=NORMAL

咱們如今肯定了全部的事情都如咱們預期的那樣,如今咱們能夠在processPacket(…)方法裏面填充一些有意義的代碼了。

相關文章
相關標籤/搜索