@Override
 protected void writeInternal(ObjectDataOutput out) throws IOException {
   out.writeLong(masterTime);
   out.writeInt(memberInfos.size());
   for (MemberInfo memberInfo : memberInfos) {
     memberInfo.writeData(out);
   }
   out.writeBoolean(sendResponse);
 }
 protected String[] getTearDownMethodCodeLines(MemberInfo memberInfo) {
   String[] codeLines = new String[7];
   codeLines[0] = "super.tearDown();";
   codeLines[1] = "if(null != " + memberInfo.getFactoryMember() + ")";
   codeLines[2] = "{";
   codeLines[3] = "    " + memberInfo.getFactoryMember() + ".resetMockContextFactory();";
   codeLines[4] = "}";
   codeLines[5] = memberInfo.getModuleMember() + " = null;";
   codeLines[6] = memberInfo.getFactoryMember() + " = null;";
   return codeLines;
 }
 @Override
 protected void readInternal(ObjectDataInput in) throws IOException {
   masterTime = in.readLong();
   int size = in.readInt();
   memberInfos = new ArrayList<MemberInfo>(size);
   while (size-- > 0) {
     MemberInfo memberInfo = new MemberInfo();
     memberInfo.readData(in);
     memberInfos.add(memberInfo);
   }
   sendResponse = in.readBoolean();
 }
  /**
   * External entry point for ScriptClassInfoCollector if invoked from the command line
   *
   * @param args argument vector, args contains a class for which to collect info
   * @throws IOException if there were problems parsing args or class
   */
  public static void main(final String[] args) throws IOException {
    if (args.length != 1) {
      System.err.println("Usage: " + ScriptClassInfoCollector.class.getName() + " <class>");
      System.exit(1);
    }

    args[0] = args[0].replace('.', '/');
    final ScriptClassInfoCollector scic = new ScriptClassInfoCollector();
    try (final BufferedInputStream bis =
        new BufferedInputStream(new FileInputStream(args[0] + ".class"))) {
      final ClassReader reader = new ClassReader(bis);
      reader.accept(scic, 0);
    }
    final ScriptClassInfo sci = scic.getScriptClassInfo();
    final PrintStream out = System.out;
    if (sci != null) {
      out.println("script class: " + sci.getName());
      out.println("===================================");
      for (final MemberInfo memInfo : sci.getMembers()) {
        out.println("kind : " + memInfo.getKind());
        out.println("name : " + memInfo.getName());
        out.println("attributes: " + memInfo.getAttributes());
        out.println("javaName: " + memInfo.getJavaName());
        out.println("javaDesc: " + memInfo.getJavaDesc());
        out.println("where: " + memInfo.getWhere());
        out.println("=====================================");
      }
    } else {
      out.println(args[0] + " is not a @ScriptClass");
    }
  }
예제 #5
0
  void updateMembers(Collection<MemberInfo> lsMemberInfos) {
    checkServiceThread();
    final Map<Address, MemberImpl> mapOldMembers = new HashMap<Address, MemberImpl>();
    for (MemberImpl member : lsMembers) {
      mapOldMembers.put(member.getAddress(), member);
    }
    if (mapOldMembers.size() == lsMemberInfos.size()) {
      boolean same = true;
      for (MemberInfo memberInfo : lsMemberInfos) {
        MemberImpl member = mapOldMembers.get(memberInfo.getAddress());
        if (member == null || !member.getUuid().equals(memberInfo.uuid)) {
          same = false;
          break;
        }
      }
      if (same) {
        logger.log(Level.FINEST, "No need to process member update...");
        return;
      }
    }

    logger.log(Level.FINEST, "Updating Members");
    lsMembers.clear();
    dataMemberCount.reset();
    mapMembers.clear();
    memberMasterConfirmationTimes.clear();
    for (MemberInfo memberInfo : lsMemberInfos) {
      MemberImpl member = mapOldMembers.get(memberInfo.address);
      if (member == null) {
        member = addMember(memberInfo.address, memberInfo.nodeType, memberInfo.uuid);
      } else {
        addMember(member);
      }
      member.didRead();
    }
    if (!lsMembers.contains(thisMember)) {
      throw new RuntimeException("Member list doesn't contain local member!");
    }
    heartBeater();
    node.getClusterImpl().setMembers(lsMembers);
    node.setJoined();
    logger.log(Level.INFO, this.toString());
  }
예제 #6
0
  public boolean shutdown(String server) throws RemoteException {
    if (server.equalsIgnoreCase(FORCE_SHUTDOWN)) {
      System.exit(0);
      return true;

    } else if (server.equalsIgnoreCase("middleware")) {
      // Shutdown the cars group.
      shutdownGroup(this.carGroup);

      // Shutdown the rooms group.
      shutdownGroup(this.roomGroup);

      // Shutdown the flights group.
      shutdownGroup(this.flightGroup);

      // Shutdown all the middleware servers except yourself.
      for (MemberInfo m : this.currentMembers) {
        if (!m.equals(this.myInfo)) {
          shutdownMember(m);
        }
      }

      // Shut yourself down.
      System.exit(0);
      return true;

    } else if (server.equalsIgnoreCase("cars")) {
      shutdownGroup(this.carGroup);
      return true;

    } else if (server.equalsIgnoreCase("rooms")) {
      shutdownGroup(this.roomGroup);
      return true;

    } else if (server.equalsIgnoreCase("flights")) {
      shutdownGroup(this.flightGroup);
      return true;

    } else {
      return false;
    }
  }
예제 #7
0
  void getMemberInfo(AccessibleObject[] accessers, MemberType type) {
    for (AccessibleObject a : accessers) {
      if (!a.isAnnotationPresent(JsApi.class) && !a.isAnnotationPresent(JsConstructor.class))
        continue;

      MemberInfo mInfo = new MemberInfo();
      String name = ((Member) a).getName();
      mInfo.javaName = name;
      mInfo.accesser = a;
      mInfo.isStatic = Modifier.isStatic(((Member) a).getModifiers());
      if (a.isAnnotationPresent(JsApi.class)) {
        JsApi mAnno = a.getAnnotation(JsApi.class);

        // Get eventList from properties.
        if (type == MemberType.JS_PROPERTY && mAnno.isEventList()) {
          if (!((Field) a).getType().equals(String[].class)) {
            Log.w(TAG, "Invalid type for Supported JS event list" + name);
            continue;
          }
          try {
            // Event List should be a class property with "static".
            eventList = (String[]) (((Field) a).get(null));
          } catch (IllegalArgumentException | IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
          continue;
        }

        mInfo.type = type;
        mInfo.isWritable = mAnno.isWritable();
        mInfo.isEntryPoint = mAnno.isEntryPoint();
        mInfo.withPromise = mAnno.withPromise();
        mInfo.jsName = name;
        mInfo.wrapArgs = mAnno.wrapArgs();
        mInfo.wrapReturns = mAnno.wrapReturns();
      } else if (a.isAnnotationPresent(JsConstructor.class)) {
        if (type != MemberType.JS_METHOD) {
          Log.w(TAG, "Invalid @JsConstructor on non-function member:" + name);
          continue;
        }
        JsConstructor cAnno = a.getAnnotation(JsConstructor.class);
        mInfo.type = MemberType.JS_CONSTRUCTOR;
        mInfo.isEntryPoint = cAnno.isEntryPoint();
        mInfo.mainClass = cAnno.mainClass();
        // Currently Constructor with promise is not supported.
        mInfo.withPromise = false;
        // TODO: more detail checking for main class.
        // Is there a way to throw compile error if main class missing?
        if (mInfo.mainClass == null) continue;

        mInfo.jsName = mInfo.mainClass.getSimpleName();
        // Create relections for constructor main classes.
        bindingClasses.put(mInfo.mainClass.getName(), mInfo.jsName);
        constructorReflections.put(mInfo.jsName, new ReflectionHelper(mInfo.mainClass));
      }

      if (mInfo.isEntryPoint) {
        // Always get the first entry point setting.
        if (entryPoint != null) {
          Log.w(TAG, "Entry point already exist, try to set another:" + mInfo.jsName);
          continue;
        }
        // Flag isEntryPoint only meaningful for methods, constructors and BindingObjects.
        if (type == MemberType.JS_PROPERTY
            && !(isBindingClass(((Field) (mInfo.accesser)).getType()))) {
          Log.w(TAG, "Invalid entry point setting on property:" + name);
          continue;
        }
        // The first entry point will be used.
        entryPoint = mInfo;
      }
      if (members.containsKey(mInfo.jsName)) {
        Log.w(TAG, "Conflict namespace - " + mInfo.jsName);
        continue;
      }
      members.put(mInfo.jsName, mInfo);
    }
  }