Exemplo n.º 1
0
  /**
   * @param cls Class.
   * @param id Type ID.
   * @return GridBinaryClassDescriptor.
   */
  public BinaryClassDescriptor registerPredefinedType(Class<?> cls, int id, String affFieldName) {
    String typeName = typeName(cls.getName());

    if (id == 0) id = BinaryInternalIdMapper.defaultInstance().typeId(typeName);

    BinaryClassDescriptor desc =
        new BinaryClassDescriptor(
            this,
            cls,
            false,
            id,
            typeName,
            affFieldName,
            BinaryInternalIdMapper.defaultInstance(),
            new BinaryReflectiveSerializer(),
            false,
            true /* registered */);

    predefinedTypeNames.put(typeName, id);
    predefinedTypes.put(id, desc);

    descByCls.put(cls, desc);

    if (affFieldName != null) affKeyFieldNames.putIfAbsent(id, affFieldName);

    return desc;
  }
Exemplo n.º 2
0
  /**
   * @param globalIdMapper ID mapper.
   * @param globalSerializer Serializer.
   * @param typeCfgs Type configurations.
   * @throws BinaryObjectException In case of error.
   */
  private void configure(
      BinaryIdMapper globalIdMapper,
      BinarySerializer globalSerializer,
      Collection<BinaryTypeConfiguration> typeCfgs)
      throws BinaryObjectException {
    TypeDescriptors descs = new TypeDescriptors();

    Map<String, String> affFields = new HashMap<>();

    if (!F.isEmpty(igniteCfg.getCacheKeyConfiguration())) {
      for (CacheKeyConfiguration keyCfg : igniteCfg.getCacheKeyConfiguration())
        affFields.put(keyCfg.getTypeName(), keyCfg.getAffinityKeyFieldName());
    }

    if (typeCfgs != null) {
      for (BinaryTypeConfiguration typeCfg : typeCfgs) {
        String clsName = typeCfg.getTypeName();

        if (clsName == null)
          throw new BinaryObjectException("Class name is required for binary type configuration.");

        BinaryIdMapper idMapper = globalIdMapper;

        if (typeCfg.getIdMapper() != null) idMapper = typeCfg.getIdMapper();

        idMapper = BinaryInternalIdMapper.create(idMapper);

        BinarySerializer serializer = globalSerializer;

        if (typeCfg.getSerializer() != null) serializer = typeCfg.getSerializer();

        if (clsName.endsWith(".*")) {
          String pkgName = clsName.substring(0, clsName.length() - 2);

          for (String clsName0 : classesInPackage(pkgName))
            descs.add(
                clsName0, idMapper, serializer, affFields.get(clsName0), typeCfg.isEnum(), true);
        } else
          descs.add(clsName, idMapper, serializer, affFields.get(clsName), typeCfg.isEnum(), false);
      }
    }

    for (TypeDescriptor desc : descs.descriptors())
      registerUserType(
          desc.clsName, desc.idMapper, desc.serializer, desc.affKeyFieldName, desc.isEnum);

    BinaryInternalIdMapper dfltMapper = BinaryInternalIdMapper.create(globalIdMapper);

    // Put affinity field names for unconfigured types.
    for (Map.Entry<String, String> entry : affFields.entrySet()) {
      String typeName = entry.getKey();

      int typeId = dfltMapper.typeId(typeName);

      affKeyFieldNames.putIfAbsent(typeId, entry.getValue());
    }

    addSystemClassAffinityKey(CollocatedSetItemKey.class);
    addSystemClassAffinityKey(CollocatedQueueItemKey.class);
  }
Exemplo n.º 3
0
  /**
   * Creates and registers {@link BinaryClassDescriptor} for the given {@code class}.
   *
   * @param cls Class.
   * @return Class descriptor.
   */
  private BinaryClassDescriptor registerClassDescriptor(Class<?> cls, boolean deserialize) {
    BinaryClassDescriptor desc;

    String clsName = cls.getName();

    if (marshCtx.isSystemType(clsName)) {
      desc =
          new BinaryClassDescriptor(
              this,
              cls,
              false,
              clsName.hashCode(),
              clsName,
              null,
              BinaryInternalIdMapper.defaultInstance(),
              null,
              false,
              true /* registered */);

      BinaryClassDescriptor old = descByCls.putIfAbsent(cls, desc);

      if (old != null) desc = old;
    } else desc = registerUserClassDescriptor(cls, deserialize);

    return desc;
  }
Exemplo n.º 4
0
  /**
   * @param typeName Type name.
   * @return Instance of ID mapper.
   */
  private BinaryIdMapper userTypeIdMapper(String typeName) {
    BinaryIdMapper idMapper = typeMappers.get(typeName);

    return idMapper != null ? idMapper : BinaryInternalIdMapper.defaultInstance();
  }
Exemplo n.º 5
0
  /**
   * @param typeId Type ID.
   * @return Instance of ID mapper.
   */
  public BinaryIdMapper userTypeIdMapper(int typeId) {
    BinaryIdMapper idMapper = mappers.get(typeId);

    return idMapper != null ? idMapper : BinaryInternalIdMapper.defaultInstance();
  }