⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0090.htm

📁 Java语言是Internet上最热门的编程语言
💻 HTM
字号:
<html>

<head>
<title>新时代软件教程:操作系统 主页制作 服务器 设计软件 网络技术 编程语言 文字编辑</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style>
<!--
body, table {font-size: 9pt; font-family: 宋体}
a {text-decoration:none}
a:hover {color: red;text-decoration:underline}
.1  {background-color: rgb(245,245,245)}
-->
</style>
</head>
<p align="center"><script src="../../1.js"></script></a>
    <p align="center"><big><strong>Aglet(Mobile Agent) </strong></big></p>

<div align="right">---(文/王静翊)</div>

<TABLE width="90%">
  <TBODY>
  <TR>
    <TD class=page><A name=one>一、简介</A> <BR>
      <P>在分散式计算的 域中,有许多解决不同问题的技术,像是我们可以透过 RPC或RMI来使用固定在远端工作站上的函式,并且藉由讯息传递( 
      message-passing)的方式来传送资料,以协调整个分散式计算;也可以利用mobile agents的特性 - 
      穿梭在网路许多工作站并执行各种特定任务,来做搜寻远端工作站上的目录资讯、更新档案、计算统计资料、或者与其他 
      agents沟通等工作。目前关於发展後者mobile agents系统的开发平台或执行环境有 Telescript、Agent 
      Tcl、Ara(Agents for Remote Access )、以及Aglet等。 </P>
      <P>Aglet是由日本IBM 公司所提出,完全用Java发展的 mobile agent技术,并提供实用的平台-Aglets 
      Workbench让我们开发或执行mobile agent系统。 Aglet 这个字是由"agile" 
      与"applet"两个字所合成的,简单的说就是具有agent行为的Java applet物件。它以执行绪( 
      thread)的型态被产生於一台工作站,可随时暂停执行的工作,而後整个 aglet物件被分派到另一台工作站上,再重新启动执行任务。也因为aglets 
      是执行绪的型态,所以不会消耗太多的系统资源。以下将为读者介绍Aglet 的系统架构、Aglet 的物件模型( object model)与 
      packages、以及 Aglets Workbench 的元件。 </P><A name=two>二、架构</A> <BR>
      <P>Aglets的系统架构主要分为四个阶段,请参见图1。首先当一个正在执行的 aglet想要将自己外送到远端时,会对 Aglets 
      Runtime层发出请求,然後 Aglets Runtime层把aglet 的状态资讯与程式码转成序列化(serialized )之位元组阵列( 
      byte array );接著若是外送的请求成功时,系统会将 aglet的执行动作结束,然後将位元组阵列传送至ATCI( Agent 
      Transport and Communication Interface)层处理,此层提供使用ATP (Agent Transfer 
      Protocol)的介面,其中ATP为一个简单的应用层协定 ( application-level 
      protocol)(请参见图2),它使得我们不 顾虑aglets是否被派送到不同的 agent系统就可以传送aglets(也就是 
      agent-system-inde pendent);之後,系统会将位元组阵列附上相关的系统资讯,像是系统名称以及aglet的id等,并以bit 
      stream 透过网路传至远端工作站[1] 。 </P>
      <TABLE>
        <TBODY>
        <TR>
          <TD><IMG src="images/aglet_f1.gif"> </TD></TR>
        <TR>
          <TD>
            <CENTER>图一、 Aglet的系统架构下图</CENTER></TD></TR></TBODY></TABLE>
      <TABLE>
        <TBODY>
        <TR>
          <TD><IMG src="images/aglet_f2.gif"> </TD></TR>
        <TR>
          <TD>
            <CENTER>图 2. ATP 的示意图</CENTER></TD></TR></TBODY></TABLE><A 
      name=three>三、API包说明</A> <BR>
      <P>Aglet系统首先 提供一个「环境」( context)来管理 aglet的基本行为:像是「产生」( 
      create)、「复制」(clone)aglets ,或「分派」( dispatch)aglets 
      到远端工作站、「召回」(retract)远端的aglets,或「暂停」( deactive)、「唤醒」(active) 
      aglets,以及「移除」(dispose) aglets等,请参见图 3。而aglet与aglet 之间的沟通,可用讯息传递的方式来传递讯息物件( 
      message object)。此外,基於安全上的顾虑,aglets 并非让外界直接存取其资讯,而是透过一个代理者( aglet 
      proxy)提供一致的介面与外界沟通,请参见图4。这样做还有一个好处 - aglet的所在位置会透明化( location 
      transparency),也就是若想要与远端的aglet沟通时,只 在本地主机( local host)的 
      context上产生对应远端aglet的代理者,并与此代理者沟通即可,不必直接处理网路连线与通讯的问题[1] 。 </P>
      <TABLE>
        <TBODY>
        <TR>
          <TD><IMG src="images/aglet_f3.gif"> </TD></TR>
        <TR>
          <TD>
            <CENTER>图 3. Aglet的物件模型 </CENTER></TD></TR></TBODY></TABLE>
      <TABLE>
        <TBODY>
        <TR>
          <TD><IMG src="images/aglet_f4.gif"> </TD></TR>
        <TR>
          <TD>
            <CENTER>图4. Aglet 基本功能介面</CENTER></TD></TR></TBODY></TABLE>
      <P>Aglet的packets包括如下: </P>
      <UL>
        <LI>com.ibm.aglet:这个packet定义aglet 的基本元件之类别:Aglet、AgletID 、AgletInfo、 
        AgletStub、 FutureReply、 Message、ReplySet ,以及介面: AgletContext、 
        AgletProxy、 MessageManager。 </LI></UL>
      <UL>
        <LI>com.ibm.aglet.eve nt:Aglet的事件驱动模式分成Clone、 Mobility、 
        Persistency三种,其中Clone事件产生於复制aglets, Mobility事件产生於分派或取回 aglets等, 
        Persistency事件产生於暂停或唤醒 aglets。 </LI></UL>
      <UL>
        <LI>com.ibm.aglet.sys tem:主要提供控制 context的介面。 </LI></UL>
      <UL>
        <LI>com.ibm.aglet.uti l:包括一些常用的物件,像是 AddressBook、 AddressChooser、 
        ImageData等。 </LI></UL>
      <UL>
        <LI>com.ibm.agletx.pa tterns:将常用的系统架构design patterns,例如 Master-Slave、 
        Messenger-Receive r、以及 Notifier-Notifica tion。 </LI></UL><A 
      name=four>四、Aglets Workbench</A> <BR>
      <P>Aglets Workbench 目前提供的元件包括如下[2] : </P>
      <UL>
        <LI>The Aglets Framework for mobile Java agents: 提供一些特定的mobile 
        agent之元件,以及常用的设计架构。 </LI></UL>
      <UL>
        <LI>The Agent Transfer Protocol (ATP) </LI></UL>
      <UL>
        <LI>JDBC for DB2 </LI></UL>
      <UL>
        <LI>Tahiti: 视觉化的管理介面,让使用者更方便管理 aglets。 </LI></UL>
      <UL>
        <LI>Fiji: 它是独立的 package,提供在 web上透过Fiji applets来执行 aglet 
        contexts,以做到产生、分派、召回aglets的功能。 </LI></UL><A name=five>五、范例说明</A> <BR>
      <P>在此列举一简单之范例(请参见图 5、表 1、表 2):我们在本地工作站上产生一个LocalHost aglet,此aglet会动态产生一个新的 
      Hello aglet,然後将Hello aglet派送到远端工作站上执行,也就是列印 "Hello!"讯息。 </P>
      <P>首先说明LocalHost aglet: 在此程式中只有run()这个成员函数,是此aglet 
      执行绪本身进入执行状态的进入点。接著为了要动态产生一个新的aglet,必须透过 AgletContext来产生,并传回新的 
      aglet之proxy。然後透过proxy将新的 aglet派送到指定的远端工作站。 </P>
      <P>然後是Hello aglet : 在这个程式中有 run()和 onCreation()两个成员函数,其中 
      onCreation()会在本身aglet产生时被执行,先做一些初始化的动作,在此加入 MobilityListener( )这个介面,当有 
      Mobility事件发生时,即会执行适当的方法(method)。也就是说,若此 Hello aglet被分派时, MobilityListener( 
      )会收到系统产生的 Mobility事件,然後执行 
      onDispatching()。接著进入run()函式,首先用一个布林变数判断本身是否在本地主机上。若不是则会印出" Hello!"讯息。 </P>
      <TABLE>
        <TBODY>
        <TR>
          <TD><IMG src="images/aglet_f5.gif"> </TD></TR>
        <TR>
          <TD>
            <CENTER>图 5. 范例程式的作用关系图</CENTER></TD></TR></TBODY></TABLE><BR><BR><B>表 1. 
      LocalHost.java</B> <BR><BR>
      <P align=center>
      <TABLE width="90%">
        <TBODY>
        <TR>
          <TD class=page><PRE>

import com.ibm.aglet.*;

import java.net.*;

public class LocalHost extends Aglet{

	public void run(){
		URL codeBase;	//被create的aglet之class path。
		Object init;	//传给被create的aglet之初始物件参数。

	  try{
		// Create Hello aglet并取得其proxy。
		AgletProxy proxy = getAgletContext().createAglet(codeBase,"Hello",init);

	    try{
		proxy.dispatch(new URL("atp://remotehost"));	
		// 分派aglet到远端的主机。
	  } 
     catch(MalformedURLException e){
	     System.out.println(e);	
		 }
	  } 
      catch(Exception e){}

	}
}
</PRE></TD></TR></TBODY></TABLE></P><PRE></PRE><BR><BR><BR><B>表 2. Hello.java</B> <BR><BR>
      <P align=center>
      <TABLE width="90%">
        <TBODY>
        <TR>
          <TD class=page><PRE>
import com.ibm.aglet.*;

import java.net.*;

public class LocalHost extends Aglet{

	public void run(){

	   URL codeBase;	//被create的aglet之class path。
       Object init;	//传给被create的aglet之初始物件参数。

	   try{
		// Create Hello aglet并取得其proxy。

		AgletProxy proxy = getAgletContext().createAglet(codeBase,"Hello",init);

    	try{
		proxy.dispatch(new URL("atp://remotehost"));	// 分派aglet到远端的主机。
	  }catch(MalformedURLException e){
	    System.out.println(e);
		}
	  }catch(Exception e){}
	}
}
</PRE></TD></TR></TBODY></TABLE></P><PRE></PRE><A name=six>六、参考资料</A> 
      <DL>
        <DT>
        <DD><A name=1>[1]</A> Mitsuru Oshima and Guenter Karjoth, "Aglets 
        Specification (1. 0)," <A 
        href="../../www.trl.ibm.co.jp/aglets/spec_version10.html">http://www.trl.ibm.co.jp/aglets/spec_version10.html</A>, 
        May 20th, 1997. 
        <DD><A name=2>[2]</A> Danny B. Lange and Daniel T. Chang," IBM Aglets 
        Workbench White Paper," <A 
        href="../../aglets.trl.ibm.co.jp/documentation.html">http://aglets.trl.ibm.co.jp/documentation.html</A> 
        , September 9, 1996. 
        <DD><A name=3>[3]</A> Chong Xu and Dongbin Tao, "Building Distributed 
        Application with Aglet," <A 
        href="../../www.cs.duke.edu/~chong/aglet/default.htm">http://www.cs.duke.edu/~chong/aglet/</A>, 
        1997. 
        <DD><A name=4>[4]</A> Danny B. Lange and Mitsuru Oshima, "Programming 
        and Deploying Java Mobile Agents with Aglets," ISBN: 0-201-32582-9, 
        1998. </DD></DL></TD></TR></TBODY></TABLE>

  </table>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -