JXTA技术手册学习--------(1)通告

来源:互联网 发布:江苏网络教育成绩查询 编辑:程序博客网 时间:2024/05/21 10:33
 
通告是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中查找
 
原创粉丝点击