예제 #1
0
  private static Properties adjustProperties(Properties pp) {
    // A BackEndContainer is never a Main
    pp.setProperty(Profile.MAIN, "false");

    // Set default additional services if not already set
    String services = pp.getProperty(Profile.SERVICES);
    if (services == null) {
      services = "jade.core.event.NotificationService";
    }
    String additionalServices = pp.getProperty(BEManagementService.ADDITIONAL_SERVICES);
    if (additionalServices != null) {
      services += ";" + additionalServices;
    }
    pp.setProperty(Profile.SERVICES, services);

    // Merge back-end and front-end services
    String feServices = pp.getProperty(MicroRuntime.BE_REQUIRED_SERVICES_KEY);
    if (feServices != null) {
      Vector ss = Specifier.parseList(pp.getProperty(Profile.SERVICES), ';');
      Vector fess = Specifier.parseList(feServices, ';');
      for (int i = 0; i < fess.size(); ++i) {
        String s = (String) fess.get(i);
        if (!ss.contains(s)) {
          ss.add(s);
        }
      }
      pp.setProperty(Profile.SERVICES, Specifier.encodeList(ss, Specifier.SPECIFIER_SEPARATOR));
    }
    return pp;
  }
예제 #2
0
  public boolean connect() {
    try {
      // Initialize the BackEndManager if required
      if (myProfile.getBooleanProperty(USE_BACKEND_MANAGER, false)) {
        theBEManager = initBEManager();
      }

      Vector agentSpecs =
          Specifier.parseSpecifierList(myProfile.getParameter(Profile.AGENTS, null));
      myProfile.setParameter(Profile.AGENTS, null);

      myFrontEnd = myConnectionManager.getFrontEnd(this, null);
      myLogger.log(
          Logger.FINE,
          "BackEnd container "
              + myProfile.getParameter(Profile.CONTAINER_NAME, null)
              + " joining the platform ... (FrontEnd version: "
              + myProfile.getParameter(JICPProtocol.VERSION_KEY, "not available")
              + ")");

      Runtime.instance().beginContainer();
      boolean connected = joinPlatform();
      if (connected) {
        myLogger.log(Logger.FINE, "Join platform OK");
        AID amsAID = getAMS();
        myProfile.setParameter(Profile.PLATFORM_ID, amsAID.getHap());
        String[] addresses = amsAID.getAddressesArray();
        if (addresses != null) {
          StringBuffer sb = new StringBuffer();
          for (int i = 0; i < addresses.length; i++) {
            sb.append(addresses[i]);
            if (i < addresses.length - 1) {
              sb.append(';');
            }
          }
          myProfile.setParameter(MicroRuntime.PLATFORM_ADDRESSES_KEY, sb.toString());
        }
        if ("true".equals(myProfile.getParameter(RESYNCH, "false"))) {
          myLogger.log(
              Logger.INFO,
              "BackEnd container "
                  + myProfile.getParameter(Profile.CONTAINER_NAME, null)
                  + " activating re-synch ...");
          resynch();
        } else {
          // Notify the main container about bootstrap agents on the FE.
          for (int i = 0; i < agentSpecs.size(); i++) {
            Specifier sp = (Specifier) agentSpecs.elementAt(i);
            try {
              String name = bornAgent(sp.getName());
              sp.setClassName(name);
              sp.setArgs(null);
            } catch (Exception e) {
              myLogger.log(Logger.SEVERE, "Error creating agent " + sp.getName(), e);
              sp.setClassName(e.getClass().getName());
              sp.setArgs(new Object[] {e.getMessage()});
            }
          }
          myProfile.setParameter(Profile.AGENTS, Specifier.encodeSpecifierList(agentSpecs));
        }
      }
      return connected;
    } catch (Exception e) {
      // Should never happen
      e.printStackTrace();
      return false;
    }
  }