通告是JXTA的核心,只有通过寻找通告才能发现JXTA的对等体及其资源,而且只有通过发布通告才能向外界提供自己的服务。
通告由抽象类Advertisement(net.jxta.document.Advertisement)表示。
JXTA API定义了以下核心通告类型(每一类型都是net.jxta.protocol包中的一个抽象类),每个通告都有一个唯一的类型,可以用getAdvertisementType()方法获取该类型。
l         PeerAdvertisement
l         PeerGroupAdvertisement
l         PipeAdvertisement
l         PeerInfoAdvertisement
l         EndpointAdvertisement
l         ModuleClassAdvertisement, ModuleSpecAdvertisement, and ModuleImplAdvertisement(module-related advertisement)
l         RdvAdvertisement
l         TransportAdvertisernent
每个通告对象都保存了一个实行Document接口(net.jxta.document.Document)的对象,这个通告对象用于表示通告。
Advertisement类的getDocument()方法根据参数MimeMediaType来以不同格式返回通告的描述。典型的MIME类型有’text/xml’或’text/plain’。
Document接口与HTTP流有些相似:没有指定编码和压缩信息,而只提供与数据相关的MIME信息。
MIME类型:net.jxta.document.MimeMediaType类的一个对象。
StructuredDocument接口(net.jxta.document.StructuredDocument)是Document接口的子接口。StructuredTextDocument接口是StructuredDocument接口的扩展。前者把元素当作抽象对象处理,而后者把元素的关键字和值当作字符串处理。(每一元素都实现了net.jxte.document.Element接口)。
获取通告对象的两种途径:
1 创建通告对象。
2 通过PeerGroup类的getPeerGroupAdvertisement()方法获取用语创建对等组的通告。
关于通告使用的小例子:
import net.jxta.peergroup.PeerGroup;
import net.jxta.peergroup.PeerGroupFactory;
import net.jxta.exception.PeerGroupException;
import net.jxta.document.*;
import net.jxta.protocol.*;
import java.io.*;
public class HelloWorld {
static PeerGroup group = null;
public static void main(String args[]){
HelloWorld myapp = new HelloWorld();
myapp.startJxta();
System.exit(0);
}
private void startJxta(){
try{
//creat and start the default JXTA NetPeerGroup
group = PeerGroupFactory.newNetPeerGroup();
}catch (PeerGroupException e){
//Could not instantiate the group;print the stack and exit
System.out.println("Fatal error: creating the net PeerGroup");
System.exit(1);            
}
System.out.println("Started Hello World");
//Get the PeerGroup advertisement
PeerGroupAdvertisement pgadv = group.getPeerGroupAdvertisement();
try{
//Print out the PeerGroup advertisement document. To do so, we must
//convert it to a tex document with whatever MIME type we want.
//First, we'll print it as a plain-text document.
StructuredTextDocument doc = (StructuredTextDocument) pgadv.getDocument(new MimeMediaType("text/plain"));
//Now that we have a plain-text document, we can print the document
//via the StructuredTextDocumentsentToWriter method
StringWriter out = new StringWriter();
doc.sendToWriter(out);
System.out.println(out.toString());
out.close();
//For comparison, we'll do the same thing but print it out as an XML document
StructuredTextDocument adoc = (StructuredTextDocument) pgadv.getDocument(new
MimeMediaType("text/xml"));
StringWriter aout = new StringWriter();
adoc.sendToWriter(aout);
System.out.println(aout.toString());
aout.close();
}catch (Exception ex){
ex.printStackTrace();
}
}
}
首先创建一个通告的对象pgadv,由这个对象来获得不同MIME类型的文挡,再使用TextDocument类的sentToWriter()方法输出通告文挡(先创建了一个StringWriter对象作为输出流,然后将StringWriter对象的内容传递给System.out)。
输出结果为:
Started Hello World
jxta:PGA :
    GID : urn:jxta:jxta-NetGroup
    MSID : urn:jxta:uuid-DEADBEEFDEAFBABAFEEDBABE000000010206
    Name : NetPeerGroup
    Desc : default Net Peer Group
<?xml version="1.0"?>
<!DOCTYPE jxta:PGA>
<jxta:PGA xmlns:jxta="http://jxta.org">
    <GID>
       urn:jxta:jxta-NetGroup
    </GID>
    <MSID>
       urn:jxta:uuid-DEADBEEFDEAFBABAFEEDBABE000000010206
    </MSID>
    <Name>
       NetPeerGroup
    </Name>
    <Desc>
       default Net Peer Group
    </Desc>
</jxta:PGA>
构造通告
虽然通告的类型不同,但是它们的创建方式相同。首先从 AdvertisementFactory 类 (net.jxta.document.AdvertisementFactory) 获取一个空白的通告文挡。然后必须使用特定类型的通告内部方法来设置通告文挡中的各个元素。
下面是如何建立模块规范通告的例子:
    ModuleSpecAdvertisement msa = (ModuleSpecAdvertisement) AdvertisementFactory.newAdvertisement(ModuleSpecAdvertisement.getAdvertisementType());
       msa.setName("JxtaSpec:RMIService:HelloService");
       msa.setVersion("Version 1.0");
       msa.setCreator("sun.com");
       msa.setSpecURI("http://www.jxta.org/tutorial/RMIService.jar");
       StructuredTextDocument doc = (StructuredTextDocument)StructuredDocumentFactory.newStructuredDocument(new MimeMediaType("text/xml"),"Parm");
       Element e = doc.createElement("Stub",stub);
       doc.appendChild(e);
       msa.setParam(doc);
在本例中,设置了通告的名称,版本,创建者,模块实现代码的位置和一个附加文挡(包含了用语创建模块的参数)。
通告创建完成以后,必须对通告内部的每一个属性进行设置。
各个通告的的属性内容可以在 net.jxta.protocol 中查找

JXTA技术手册学习--------(1)通告相关推荐

  1. ioc spring技术手册学习

    BOB大叔书中依赖倒置原则: 1.高层模块不应该依赖低层模块,二者都应该依赖于抽象. 2.抽象不应该依赖于细节,细节应该依赖于抽象. 之所以称之为'依赖倒置'是相对传统的过程式编程而言,依赖关系结构被 ...

  2. 使用JXTA技术建立P2P网络(转)

    转自:http://www.p2psky.com/tech/article2906.html 作者:  时间:2007-05-17 Technorati 标签: P2P,Java 08:20:14  ...

  3. JXTA v2.5技术手册

    JXTA v2.5技术手册 说明:     在做JXTA开发时,发现网上的资料非常少,已有的都是很老的资料,JXTA目前的版本已经是2.5了,同以前的2.0.2.1之类的差别非常大,因此网络上2002 ...

  4. 2022分享三面阿里:Java 面试核心手册 +Java 电子书 + 技术笔记 + 学习视频

    写在片头:声明,勿杠 首先简单说一下,这三次面试阿里并不是一次性去面的,实际上第一次面试时候还在大四,找的实习岗,不太清楚是什么部门,别问我为什么还记得面试题,有记录和复盘的习惯,再问就是杠. 个人背 ...

  5. 《圣殿祭司的ASP.NET4.0专家技术手册》---- 1-13 ClientBuilderManager类别的编译功能...

    本节书摘来自异步社区<圣殿祭司的ASP.NET4.0专家技术手册>一书中的第1章,第13节,作者: 奚江华,译者: 武海军 , 更多章节内容可以访问云栖社区"异步社区" ...

  6. 蓝牙Bluetooth技术手册规范下载【转】

    蓝牙Bluetooth技术手册规范下载 http://www.crifan.com/summary_bluetooth_specification_download/ [背景] 之前就已经整理和转帖了 ...

  7. 《Cisco/H3C交换机高级配置与管理技术手册》目录

    备受业界关注,备受无数读者殷切期待的,我的2012年新作--<Cisco/H3C交换机高级配置与管理技术手册>,经过一年的艰辛编写,现终于胜利封笔.现应许多热心读者的要求,把本书的原始目录 ...

  8. JXTA技术与应用发展(转载)

    一.概述 美国Sun公司自从1995年向世界推出了Java语言以来,每年都会在Java领域里推出新的技术,从JavaCard.J2ME到J2EE.JINI.JavaTV,推动了Java技术的发展和应用 ...

  9. 装备交互式电子技术手册系统软件

    装备交互式电子技术手册系统软件 电子技术手册系统IETM是一种按标准的数字格式编制,采用文字.图形.表格.音频和视频等形式,以人机交互方式提供装备基本原理.使用操作和维修等内容的技术出版物. 电子技术 ...

最新文章

  1. 最新动态,电信屏蔽Godaddy部分DNS服务
  2. 深入解析JNA—模拟C语言结构体
  3. MYSQL高可用-Percona XtraDB Cluster
  4. Win32ASM学习[5]: 数据对齐相关的伪指令(ALIGN、EVEN、ORG)
  5. 数据结构—栈的应用(括号匹配、表达式求值、递归)
  6. 推荐系统-Task01熟悉新闻推荐系统基本流程
  7. 11月17日站立会议内容
  8. 由摄像机的内参K计算视景体——glFrustum的参数推导
  9. android封装全局调用的toast_自定义Toast,解决系统Toast存在的问题
  10. 支持全文搜索的桌面搜索工具
  11. oracle最简单的分页sql语句,oracle中分页sql语句
  12. C++ 的API 设计指导
  13. 库存商品计算成本的几种方法
  14. (3).Mybatis动态sql的使用
  15. 无损数据压缩算法c语言,短短的C代码,帮忙,看看压缩算法,感激不尽
  16. 动画交互设计软件:Principle for Mac
  17. java thread dump
  18. SpringBoot从入门到精通教程(三十一)- 爬虫框架集成
  19. RunTime: 块内存复制
  20. python情感词典计算得分_用python进行金融市场文本数据的情感计算!

热门文章

  1. GAM做interaction时常见的报错及解决办法
  2. python手机壁纸超清_python爬虫学习之爬取5K分辨率超清唯美壁纸
  3. 立创eda学习笔记九:图层
  4. Android开发五年,从月薪13K到年薪60W,我只用了三个月!
  5. Debezium系列之:安装部署debezium2.0以上版本的详细步骤
  6. HTML+CSS学习记录01--VScode编辑器安装与配置
  7. 转:写一个块设备驱动
  8. 美国 转专业 计算机,​转专业申请计算机硕士,美国这些学校供你选择
  9. Linux网络管理员实用教程
  10. commit分拆多个 git_Git拆分commit提交