上面讨论过Xmppserver有以下3个方法:
loadModules();
// Initize all the modules
initModules();
// Start all the modules
startModules();
意思很简单,载入模块,初始化,启动模块。
如何载入的呢?
loadModule(RoutingTableImpl.class.getName());
... ...
这里就是通过loader载入class,这里现以PrivateStorage module为例,说明module如何编写--也可添加自己的module。
Module是个接口,定义一个简单的功能,getName,init,start,stop,destoy.然后实现了一个BasicModule作为所有module的基类,对应的方法都是空的。基本都是在子类中实现,这里有个兴趣点,大家想想这是什么设计模式?
查看PrivateStorage源码,我们来看如何实现的,其它的module类也就大同小异了。
PrivateStorage,除了继承basemodule还实现了UserEventListener接口,这个接口提供了userCreated,userModified,userDeleting功能。这是module的一个通用写法,module定义了模块生命周期,用户操作接口就是通过这类EventListener接口来实现,这是一个很有技巧的实现,很好的体现了设计模式的巧妙--接口分离原则。
继续......
PrivateStorage到底干什么的呢?可以参考构造函数,
public PrivateStorage() {
super("Private user data storage");
}
PrivateStorage首先定义了4条SQL语句,增删查改(载入,插入,更新,删除)私有数据。
以增加为例,add(username,data)
其实就是对数据库的操作:
获取connection,操作sql等.
这里注意几点,几个常用类:DbConnectionManager,JiveGlobals。
DbConnectionManager是获取数据库连接管理对象,可以获取对connection进行操作,如获取,关闭connection。
JiveGlobals则是获取全局设置变量。它包含xmlProperties,properties两个存储对象,各自针对opfnire.xml和数据库的参数变量。
xmlProperties:
private static String JIVE_CONFIG_FILENAME = "conf" + File.separator + "openfire.xml";
properties:
JiveProperties实例,单例对象。通过loadProperties方法载入变量(存储到ofProperty表的参数,这个表非常重要,以后在整合第三方系统用户的时候会经常用到).
通过这2个对象,获取了系统的设置参数,也可修改对应参数。是不是很简单?
至于如何操作数据库,这个是基本的jdbc开发,这里就不多说了。
这就是简单的module开发。
当然,你也可以开发自己的module了。
附module列表:
DbConnectionManager
数据库连接管理类,提供大量的静态方法获取数据库连接。例如:getConnection()等等。
·RoutingTableImpl
RoutTable是用来存储各个终端之间的会话,一旦一个用户经过服务器的认证,他就会发起一次会话,
最终会在Rout Table中插入一条记录。不管什么时候,用户变得可用或不可用,表中的数据都会及时更新。
在集群开发中会有涉及,这块还没仔细研究,望大家讨论。
·AuditManagerImpl
·RosterManager
花名册,好友,分组等消息,这个在集成用户数据时涉及。
·PrivateStorage
私有数据存储模块
·PresenceManagerImpl
用户状态管理
·SessionManager
用户登陆session状况管理
·PacketRouterImpl
·IQRouter
·MessageRouter
·PresenceRouter
·MulticastRouter
·PacketTransporterImpl
·PacketDelivererImpl
·TransportHandler
·OfflineMessageStrategy
·OfflineMessageStore
·VCardManager
·IQBindHandler
·IQSessionEstablishmentHandler
·IQAuthHandler
·IQPingHandler
·IQPrivateHandler
·IQRegisterHandler
·IQRosterHandler
·IQTimeHandler
·IQvCardHandler
·IQVersionHandler
·IQLastActivityHandler
·PresenceSubscribeHandler
·PresenceUpdateHandler
·IQOfflineMessagesHandler
·IQPEPHandler
·IQPEPOwnerHandler
·MulticastDNSService
·IQSharedGroupHandler
·AdHocCommandHandler
·IQPrivacyHandler
·DefaultFileTransferManager
·FileTransferProxy
·MediaProxyService
·STUNService
·PubSubModule
·IQDiscoInfoHandler
·IQDiscoItemsHandler
·UpdateManager
·FlashCrossDomainHandler
·InternalComponentManager
·MultiUserChatManager
·ClearspaceManager
·ConnectionManagerImpl