贴出来看看。好象是用了ibm 的package 后需要 context 的论正。

解决方案 »

  1.   

    源程序如下:
    package myagletserver;
    import java.net.URL;
    import java.net.UnknownHostException;
    import java.io.*;
    import java.util.Properties;
    import java.util.StringTokenizer;
    import java.util.Vector;
    import java.util.Enumeration;
    import java.security.cert.Certificate;import com.ibm.maf.*;
    import com.ibm.aglet.*;
    import com.ibm.aglet.system.*;
    import com.ibm.aglets.MAFAgentSystem_AgletsImpl;
    import com.ibm.aglets.tahiti.Tahiti;
    import com.ibm.aglets.tahiti.UserManager;
    import com.ibm.aglets.tahiti.CommandLine;
    import com.ibm.aglets.tahiti.TahitiDaemon;import com.ibm.awb.misc.FileUtils;
    import com.ibm.awb.misc.Resource;
    import com.ibm.awb.misc.LogStream;
    import com.ibm.awb.misc.Opt;
    import org.aglets.log.LogCategory;
    import org.aglets.log.LogInitializer;/**
     * <p>Title: </p>
     * <p>Description: </p>
     * <p>Copyright: Copyright (c) 2002</p>
     * <p>Company: </p>
     * @author unascribed
     * @version 1.0
     */public class MyServer {
        static private Opt options[] = {
            Opt.Entry("-protocol", "maf.protocol", null),
        };
        static public void main(String args[]) {       String initializerName = System.getProperty("aglets.logger.class",
                "org.aglets.log.quiet.QuietInitializer" ); try{
          Class.forName(initializerName);
          LogCategory cat = LogInitializer.getCategory 
                           (MyServer.class.getName());
         cat.info("Logging system initialized!");     String username="aglet_key",password="aglets",protocol="atp";
         Opt.setopt(options);
         runtime = AgletRuntime.init(args);    runtime.authenticateOwner(username, password);   Name system_name = new Name(username.getBytes(), null, (short)1);   MAFAgentSystem maf_system = new MAFAgentSystem_AgletsImpl
         (runtime);    MAFAgentSystem.initMAFAgentSystem(maf_system, "atp");    Tahiti.installFactories();   
       // Creates a named context. 
        AgletContext cxt = runtime.createAgletContext("");
         ContextListener listener = new ContextAdapter () {
              public void agletArrived(ContextEvent ev) {
                  AgletProxy proxy = ev.getAgletProxy();
                    try {
                        System.out.println("Aglet is arriving."+
                                           proxy.getAgletInfo());
                        } catch (InvalidAgletException ex)
                          {
                              ex.printStackTrace();
                          }
                }            public void agletDispatched(ContextEvent ev)
                {
                    AgletProxy proxy = ev.getAgletProxy();
                    try {
                        System.out.println("Aglet is leaving."+
                                           proxy.getAgletInfo());
                        } catch (InvalidAgletException ex)
                          {
                            ex.printStackTrace();
                          }
               }
           };**        cxt.addContextListener(listener);        Tahiti.installSecurity();        //
            // Start a context
            //
            cxt.start();        MAFAgentSystem.startMAFAgentSystem(maf_system, "atp");        //
            AgletProxy myAglet = cxt.createAglet(null, "MyAglet", null);        myAglet.sendMessage(new Message("startTrip"));
            }catch(Exception ff){ System.out.println("error"+ff.toString
                                 ());}    }
    }编译可以通过,但无法执行,
    错误信息:java.security.AccessControlException: 
    access denied (com.ibm.aglets.security.ContextPermission listener add)执行时出错的语句为:cxt.addContextListener(listener); 我用"**"在源程序中标出了.
      

  2.   

    我目前在家没有办法debug,也没有ibm package. 不过我猜想是不是cxt先要设置user 和 passwd. cxt 有没有这个方法 setUser or setPasswd .