JXTA之配置

        这几天一直在看JXTA,这个对于我这种IT菜鸟来说,很高级的东西。一开始是接触概念,发现晦涩难懂,于是去图书馆借了本《JXTA技术手册》来专门学习,自此就当开始了JXTA的学习了吧

            首先是JXTA的配置,自己不知道书上那个SHELL怎么用,然后发现一开始可以从具体的例子的出发。

            例子:一个个餐馆RestoPeer通过发现或者加入RestoNet,让一个个HungerPeer发现并加入其中,然后开始进行拍卖。

            RestoPeer的实现过程是这样的:首先创建一个Peer,这个Peer属于NetPeerGroup,它通过NetPeerGroup的发布服务来发现RestoPeer,首先检查本地缓存:

            ae=hdisco.getLocalAdvertisements(DiscoveryService.GROUP,"Name","RestoNet");
           GetLocalAdvertisements(int tag,String s1,String S2) 该函数取得本地的通告缓存,此处第一个参数是点组服务,然后是通告的属性,最后是属性值。

           如果没有检测到本地缓存,则利用点发现协议(PDP)在网络上查找:

            hdisco.getRemoteAdvertisements(null, DiscoveryService.GROUP,"Name","RestoNet",1,null);第一个参数是对等体ID,本处是空,结果是搜索子网的所以Peers,只有一个对等体通告,故而参数为1。

           设置三次查找,如果没找到,则创建一个

          ModuleImplAdvertisement impladv=netpg.getAllPurposePeerGroupImplAdvertisement();//创建一个通常的通告
     
          restoNet=netpg.newGroup(
                                    mkGroupID(),//对等体ID
                                    impladv,
                                    "RestoNet",
                                    "RestoNet, Icn."); 

           

        如果找到缓存的RestoGroup,就加入其中:

          restoNetAdv=(PeerGroupAdvertisement)ae.nextElement();//取得缓存通告
           restoNet=netpg.newGroup(restoNetAdv);//通告缓存通告加入以前的对等体

         自此就已经创建了RestoGroup,并可以运行了,第一次出现配置信息,输入用户名和密码,我把其他选项都虚选了,这个现在还不懂,以后再来解释。然后运行,下次运行的时候就已经有这个缓存信息了。

               一下是RestoGroup源码:

 

 

RestoPeer.java

import java.io.IOException;
import java.net.URL;
import java.util.*;

import net.jxta.peer.*;
import net.jxta.peergroup.*;
import net.jxta.discovery.*;
import net.jxta.pipe.*;
import net.jxta.protocol.ModuleImplAdvertisement;
import net.jxta.protocol.PeerGroupAdvertisement;
import net.jxta.exception.*;
import net.jxta.id.IDFactory;

public class RestoPeer {

 /**
  * @param args
  */
 private PeerGroup netpg=null;//创建NetPeerGroup
 private PeerGroup restoNet=null;//创建restoNet
 
 private String brand="Chez jxta";
 private int timeout=3000;//线程等待时间
 
 
 private  DiscoveryService disco;
 private  PipeService pipes;
 
 static String groupURL="jxta:uuid-4d6172676572696e204272756e6f202002";
 
 public static void main(String[] args) {
  // TODO Auto-generated method stub
        RestoPeer myapp=new RestoPeer();
        myapp.startJxta();
        System.exit(0);
 }
   
 private void startJxta(){
  
  try{
   netpg=PeerGroupFactory.newNetPeerGroup();//加入NetGroup
  }catch(PeerGroupException e){
   System.out.println("错误:没能加入NetPeerGroup");
   System.exit(1);//?
  }
  
  try{
   joinRestoNet();
  }catch(Exception e){
   System.out.println("错误:不能加入或者创建 RestoPeer");
      System.exit(1);//?
  }
  
  System.out.println("正在等待顾客...");
  
  /*later code......*/
 }
 
 private void joinRestoNet() throws Exception{//创建或者加入restoNet
  
  int count=3;
  System.out.println("正在尝试发现 RestoNet");
  
  
  DiscoveryService hdisco=netpg.getDiscoveryService();//从NetPeerGroup中获取发现服务
    
  Enumeration ae=null; //用于保存发现的peer???
    
  while(count-->0)//查找RestoNet
  {
   try{
    ae=hdisco.getLocalAdvertisements(DiscoveryService.GROUP,"Name","RestoNet");
       //在本地缓存中查找Restonet
       if((ae!=null)&& ae.hasMoreElements())
        break;
      
       hdisco.getRemoteAdvertisements(null, DiscoveryService.GROUP,"Name","RestoNet",1,null);
       //在NetGroup中查找
       try{
        Thread.sleep(timeout);
        //等待响应
       }catch(Exception e){}
      
   }catch(IOException e){
    
   } 
  }
  
    System.out.println(ae.hasMoreElements()); 
    PeerGroupAdvertisement restoNetAdv=null;
   
    if(ae==null || !ae.hasMoreElements())
    {
     System.out.println("不能找到RestoNet,将创建她");
   
   
    try{
     ModuleImplAdvertisement impladv=netpg.getAllPurposePeerGroupImplAdvertisement();
    
     restoNet=netpg.newGroup(
       mkGroupID(),
       impladv,
       "RestoNet",
       "RestoNet, Icn.");
    
     restoNetAdv=netpg.getPeerGroupAdvertisement();
    }catch(Exception e){
     System.out.println("从网络中创建RestiNet遇到错误");
    }
    }else
    {
     try{
      System.out.println("已从从缓存中创建RestiNet");
      restoNetAdv=(PeerGroupAdvertisement)ae.nextElement();
      restoNet=netpg.newGroup(restoNetAdv);
      System.out.println("已从从缓存中创建RestiNet");
     }catch(Exception e){
      System.out.println("从缓存中创建RestiNet失败");
     }
    }
   
   
    try{
     disco=restoNet.getDiscoveryService();
     pipes=restoNet.getPipeService();
    }catch(Exception e){
     System.out.println("从RestiNet中取得服务失败");
    }
   
   
    System.out.println("RestoNet 餐馆("+brand+")在线");
    return;
 }
 
 private PeerGroupID mkGroupID() throws Exception{
  return (PeerGroupID) IDFactory.fromURL(new URL("urn","",groupURL));
 }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值