XMPP学习笔记-LESSON-005:XMPPServer.java之Module

上面讨论过Xmppserver有如下3个方法:sql

                loadModules();
                // Initize all the modules
                initModules();
                // Start all the modules
                startModules();数据库

意思很简单,载入模块,初始化,启动模块。设计模式

如何载入的呢?服务器

loadModule(RoutingTableImpl.class.getName());
session

... ...函数

这里就是经过loader载入class,这里现以PrivateStorage module为例,说明module如何编写--也可添加本身的module。spa

Module是个接口,定义一个简单的功能,getName,init,start,stop,destoy.而后实现了一个BasicModule做为全部module的基类,对应的方法都是空的。基本都是在子类中实现,这里有个兴趣点,你们想一想这是什么设计模式?设计

查看PrivateStorage源码,咱们来看如何实现的,其它的module类也就大同小异了。server

PrivateStorage,除了继承basemodule还实现了UserEventListener接口,这个接口提供了userCreated,userModified,userDeleting功能。这是module的一个通用写法,module定义了模块生命周期,用户操做接口就是经过这类EventListener接口来实现,这是一个颇有技巧的实现,很好的体现了设计模式的巧妙--接口分离原则。xml

继续......

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()等等。·RoutingTableImplRoutTable是用来存储各个终端之间的会话,一旦一个用户通过服务器的认证,他就会发起一次会话,最终会在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

相关文章
相关标签/搜索