本文翻译自 - 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的真正逻辑处理代码实现。类的名字是TestComponent。 this
只使用这么几行代码就完成了一个全功能的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(…)方法里面填充一些有意义的代码了。