如何从HelloWorld开始学习JXTA

本文主要从代码来讲解从HelloWorld开始理解和学习JXTA。在这里我们要实现的是一个Peer如何发现对等组并加入,如果不存在,则创建。当然在这里的加入对等组是最简单的,没有加入任何认证。这样是不安全和不利于对PeerGroup管理的。不过我们在这里只是要了解一下Peer的加入对等组的过程。在这里我用到的是JXTA版本是2.4.1。

public class HelloWorld {

 private PeerGroup netgroup = null;

 private Enumeration ae = null; // 记录发现的对等体广告。

 public static void main(String[] args) {
  HelloWorld myapp = new HelloWorld();
  myapp.startJxta();
  System.exit(0);
 }

 public void startJxta() {
  try {
   netgroup = new NetPeerGroupFactory().getInterface();
   
  } catch (PeerGroupException e) {
   e.printStackTrace();
  }
  // 从NetPeerGroup获得发现服务
  DiscoveryService hdisco = netgroup.getDiscoveryService();
  ae = findPeerGroup(hdisco, "Name", "HelloWorld");
  if (ae != null && ae.hasMoreElements()) {
   System.out.println("找到HelloWorld对等组");
   joinPeerGroup(netgroup, (PeerGroupAdvertisement) ae.nextElement());//找到目标对等组,加入
   System.out.println("加入HelloWorld对等组成功!!!");
  } else {
   System.out.println("没有找到HelloWorld对等组,则创建,在创建中......");
   createNewPeerGroup(netgroup, "HelloWorld", "HelloWorld,Inc");//没有找到目标对等组,创建
   System.out.println("创建HelloWorld对等组成功!!!");
  }
  System.exit(-1);
 }

 private Enumeration findPeerGroup(DiscoveryService dis, String key,
   String name) {
  int count = 3; // 试图发现的最高次数
  int timeout = 3000;
  Enumeration advs = null;
  // 循环直到我们发现helloWorld对等组或是直到我们达到了试图预期发现的次数。
  while (count-- > 0) {
   try {
    // 第一次搜索对等体的本地缓存来查找helloWorld对等组通告。
    // 通过NetPeerGroup组提供的发现服务发现"Name"属性为"helloWorld"的对等组
    advs = dis.getLocalAdvertisements(DiscoveryService.GROUP, key,
      name);
    // 如果发现helloWorld对等组通告,该方法完成,退出循环。
    if ((advs != null) && advs.hasMoreElements()) {
     break;
    }
    // 如果我们没有在本地找到它,便发送发现远程请求。
    // 参数依次为要查找的对等体ID,为空时不以此为发现条件;发现的通告类型,取值还有PEER,和ADV;
    // 要发现的通告属性名称;属性取值;需获取的最大通告数量;发现监听器
    dis.getRemoteAdvertisements(null, DiscoveryService.GROUP, key,
      name, 1, null);
    // 线程延时一下等待对等体內该发现请求。
    try {
     Thread.sleep(timeout);
    } catch (InterruptedException e) {
     e.printStackTrace();
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  return advs;
 }

 // 如果不存在目标对等组,则创建目标对等组
 private PeerGroup createNewPeerGroup(PeerGroup netpg, String name,
   String desc) {
  PeerGroup result = null;
  try {
   // 创建一个新的对等组helloWorld
   // 通过NetPeerGroup获得一个一般对等组的通告。
   ModuleImplAdvertisement implAdv = netpg
     .getAllPurposePeerGroupImplAdvertisement();
   // 通过NetPeerGroup创建一个新的对等组,JXTA会自行发布该对等组通告,
   // 参数依次为对等组ID,通告,组名,描述
   result = netpg.newGroup(IDFactory.newPeerGroupID(), implAdv, name,
     desc);
  } catch (Exception e) {
   e.printStackTrace();
  }
  return result;
 }

 // 加入对等组
 private PeerGroup joinPeerGroup(PeerGroup netpg,
   PeerGroupAdvertisement pgAdv) {
  PeerGroup result = null;
  try {
   // 加入该对等组,由于该通告已经发布,JXTA不会再行发布。
   result = netpg.newGroup(pgAdv);
  } catch (PeerGroupException e) {
   e.printStackTrace();
  }
  return result;
 }
}

当我们第1次运行时,会跳出出配置UI,我们在这里只要输入PeerName和Password,再点击OK,就可以啦。

运行代码,我们可能发现,只是在后台看到一些重要的过程的输入,到底有没有加入,Peer,PeerGroup的信息也没有。会有点不爽,不过在这里我要讲的这个过程。没有打印出Peer和PeerGroup的信息。因为发现资源,我们会用到DiscoveryService,后续会慢慢给出这些代码。

你可能感兴趣的:(thread,UI,浏览器,配置管理,防火墙)