MyJxta2.5研究心得 (2009-07-24)

MyJxta2.5研究心得 (2009-07-24)
MyJXTA 的核心对象解析(数据结构)。
JxtaNode 为应用程序显示基本节点。GropuNode为封装了Group的JxtaNode子节点。Group封装了Jxta组PeerGroup。PeerNode为封装了Peer的JxtaNode子节点。Peer封装了Jxta对等点广告。
一、程序的变量初始化
1、主程序Main调用MyJXTA的静态方法 startMyJxta(),程序进入MyJXTA类。    2、MyJXTA类的静态变量Name调用Constants类的单例方法。程序进入Constants 类
3、Constants类中,静态块代码调用Env类的initialize()进行系统变量的初始化。
initialize()方法先调用initHome()初始化系统配置文件目录,然后调用initMyJxtaConfig(home)。 该方法初始化MyJXTA默认配置文件。默认配置文件包括 jxta的默认配置文件profile.xml,MyJxta的默认配置文件myjxta.xml,该文件中设置了MyJXTA组的相关全局信息。同时在Env中完成Constants的唯一实例的初始化。同时将各常量信息初始化。常量信息主要包括系统基本配置信息,MyJXTA全局名等信息,然后调用了initPreferences(String home)。initPreferences(String home)方法初始化MyJxta程序的外观设置。
二、程序运行目录的唯一检查
检查程序在某一目录文件里是否为唯一实例。通过建立的查询协议生成目录及端口使用文件,然后通过使用SeverSocket建立监听端口,程序运行时检查该调用本机Socket,检查端口是否占用。

三、MBeanServer与MBean的注册

四、PluginContainer 插件容器的初始化
PluginFetcher类中内部类PluginJar,得到所有的内部插件和外部插件列表,并利用PluginClassLoader实例化各插件类
五、初始化显示层
1、利用ViewFactory工厂方法实例化SwingViewer,SwingViewer将变量customSwingViewClass配置为MyJXTAView
2、实例化MyJXTAView 完成界面的初始化
六、插件的初始化
    在插件容器中调用所有注册了并实现了Plugin接口的各子类的init() 方法,init()方法将在接口子类中初始化插件,注册相关对话。
七、在NetworkManagerConfigurator中初始化JXTA网络配置(如果想要更改登录方式,在此处更改。同时注意MyJXTAView 的configure()方法。另外JXTA平台的属性也在此处配置,为何无本地化?如何实现本地化,需自己重写一个?)
初始化NetworkManagerConfigurator后调用configurePlatform()类进行JXTA的相关配置。主要配置用户的登录属性,并存储配置。
八、MyJXTA网络的初始化
1、是否需要配置网关.需要则配置网关。
2、初始化 NetPeerGroup.将其封装为Group,并调用joinGroup(final Group group, boolean useAutoRdvMode, boolean discover)方法加入该组。
3、joinGroup(final Group group, boolean useAutoRdvMode, boolean discover)方法首先提取封装在Group中的PeerGroup,通过DialogNamer得到OneToOneCommandDialog会话的本地用户名称。
4、通过PipeUtil类的静态方法 getAdv(peerGroup, dialogName, PipeService.UnicastType, null)得到该NetPeerGroup的公告。该方法先使用DiscoveryService.getLocalAdvertisements(DiscoveryService.ADV, PipeAdvertisement.NameTag, name)方法检查本地是否已存储该组相关名称的广告。若本地没有该群组相关信息的广告,则调用createAdv(pg, name, type, pipeId);方法生成新广告,同时publish(pg, pa);该方法使用DiscoveryService类的publish(pa)方法。
5、将NetPeerGroup做为MyJXTA的父组,将其可见性设为隐藏。
6、将封装了NetPeerGroup的Group再次封装到GroupNode中作为结点显示。并将该GroupNode父结点设为全局父结点。使用addJxtaNode()方法将该组结点信息添加到显示窗口同时并在MyJxtaObjectRepository.getObjectRepository().add(node, parent)注册该加入群组结点。addJxtaNode()方法先将使用MyJxtaView类实例的addJxtaNode()方法该结点添加到视图中。
7、MyJxtaView类实例的addJxtaNode()方法判断是否为PeerNode,若是,刚将其父结点展开,返加。
其余将群组集视图展开
8、MyJxta类实例的addJxtaNode()方法在会判决该结点类型,若为PeerNode,则将其封装为PeerEntry,并注册到PresenceController类的中的实体状态控制集合。状态控制类PresenceController为控制某一群组内各子成员节点状态信息的控制器。
9、调用restore(group)方法修复NetPeerGroup群组内所有相关信息。
即检查本地存储的群组的公告信息,将其加入的所有子群组恢复,将其加入的Peer信息恢复。通过查询PipeAdvertisement修复所加入该群组的Peer信息。
   10、不需要discover NetPeerGroup所以未调用discover()方法。若discover为true
刚discover()方法将调用。该方法将使用
   11、将NetPeerGroup加入到已加入组中
   12、验证加入组的授权信息(AuthenticationUtil授权辅助类)
尝试取得该节点加入组的授权信息,若无授权信息则验证授权。授权验证流程:A:得到组的MembershipService  ms,新建群组的AuthenticationCredential  ac,
   
2、主程序Main调用MyJXTA的静态方法 startMyJxta()。该方法是一个MyJXTX类的单例模式,生成或者返回MyJXTA全局唯一实例。

你可能感兴趣的:(xml,socket,网络协议,网络应用,公告)