private static void addAdvancedExternalizer(Map<Integer, AdvancedExternalizer<?>> map, AdvancedExternalizer<?> ext) { map.put(ext.getId(), ext); }
private void updateExtReadersWithTypes(ExternalizerAdapter adapter, int readerIndex) { Set<Class<?>> typeClasses = adapter.externalizer.getTypeClasses(); if (typeClasses.size() > 0) { for (Class<?> typeClass : typeClasses) updateExtReaders(adapter, typeClass, readerIndex); } else { throw log.advanceExternalizerTypeClassesUndefined(adapter.externalizer.getClass().getName()); } }
@Override public Object readObject(Unmarshaller input) throws IOException, ClassNotFoundException { int readerIndex = input.readUnsignedByte(); int foreignId = -1; if (readerIndex == MAX_ID) { // User defined externalizer foreignId = UnsignedNumeric.readUnsignedInt(input); readerIndex = generateForeignReaderIndex(foreignId); } else { Integer legacyId = LegacyIds.LEGACY_MAP.get(readerIndex); if (legacyId != null) readerIndex = legacyId; } ExternalizerAdapter adapter = readers.get(readerIndex); if (adapter == null) { if (foreignId > 0) throw log.missingForeignExternalizer(foreignId); throw log.unknownExternalizerReaderIndex(readerIndex); } return adapter.externalizer.readObject(input); }
@Override public void writeObject(ObjectOutput output, Object object) throws IOException { AdvancedExternalizer ext; if (object instanceof IdViaConfigObj) { output.write(0); ext = idViaConfigObjExt; } else if (object instanceof IdViaAnnotationObj) { output.write(1); ext = idViaAnnotationObjExt; } else if (object instanceof IdViaBothObj){ output.write(2); ext = idViaBothObjExt; } else { throw new CacheException(String.format( "Object of type %s is not supported by externalizer %s", object.getClass().getName(), this.getClass().getName())); } ext.writeObject(output, object); }
@Override public Object readObject(ObjectInput input) throws IOException, ClassNotFoundException { int index = input.read(); AdvancedExternalizer ext; switch (index) { case 0: ext = idViaConfigObjExt; break; case 1: ext = idViaAnnotationObjExt; break; case 2: ext = idViaBothObjExt; break; default: throw new CacheException(String.format( "Unknown index (%d) for externalizer %s", index, this.getClass().getName())); } return ext.readObject(input); }
private static void addExternalizerToMap(Map<Integer, AdvancedExternalizer<?>> m, AdvancedExternalizer<?> instance) { Integer id = instance.getId(); assert id != null; //The range of ids assigned to Hibernate OGM by the Infinispan team needs to be strictly verified; //see http://infinispan.org/docs/9.0.x/user_guide/user_guide.html#preassigned_externalizer_id_ranges //and please use org.hibernate.ogm.datastore.infinispan.persistencestrategy.common.externalizer.impl.ExternalizerIds assert id.intValue() >= 1400 && id.intValue() < 1500 : "Externalizer out of the assigned range for Hibernate OGM"; AdvancedExternalizer<?> previous = m.put( instance.getId(), instance ); assert previous == null : "Clash in Externalizer Id! They need to be strictly unique."; }
@Override public void cacheManagerStarting(GlobalComponentRegistry gcr, GlobalConfiguration globalConfiguration) { final Map<Integer, AdvancedExternalizer<?>> externalizerMap = globalConfiguration.serialization() .advancedExternalizers(); externalizerMap.put(ClusteredLockKey.EXTERNALIZER.getId(), ClusteredLockKey.EXTERNALIZER); externalizerMap.put(ClusteredLockValue.EXTERNALIZER.getId(), ClusteredLockValue.EXTERNALIZER); externalizerMap.put(LockFunction.EXTERNALIZER.getId(), LockFunction.EXTERNALIZER); externalizerMap.put(UnlockFunction.EXTERNALIZER.getId(), UnlockFunction.EXTERNALIZER); externalizerMap.put(IsLocked.EXTERNALIZER.getId(), IsLocked.EXTERNALIZER); externalizerMap.put(ClusteredLockFilter.EXTERNALIZER.getId(), ClusteredLockFilter.EXTERNALIZER); }
private static void addExternalizerToMap(Map<Integer, AdvancedExternalizer<?>> m, AdvancedExternalizer<?> instance) { Integer id = instance.getId(); assert id != null; //The range of ids assigned to Hibernate OGM by the Infinispan team needs to be strictly verified; //see http://infinispan.org/docs/9.0.x/user_guide/user_guide.html#preassigned_externalizer_id_ranges //and please use org.hibernate.ogm.datastore.infinispan.persistencestrategy.common.externalizer.impl.ExternalizerIds assert id.intValue() >= 1400 && id.intValue() < 1500 : "Externalizer out of the assigned range for Hibernate OGM"; AdvancedExternalizer<?> previous = m.put( instance.getId(), instance ); assert previous == null : "Clash in Externalizer Id! They need to be strictly unique."; }
private static Map<Integer, AdvancedExternalizer<?>> getExternalizersFromProps(StoreProperties props) { Map<Integer, AdvancedExternalizer<?>> map = new HashMap<>(); String externalizers = props.get(MARSHALLER, EXTERNALIZERS); if (externalizers != null) { for (String ext : externalizers.split(",")) { String[] extArray = ext.split(":"); String className = extArray.length > 1 ? extArray[1] : extArray[0]; AdvancedExternalizer<?> instance = Util.getInstance(className, SerializationConfigUtil.class.getClassLoader()); int id = extArray.length > 1 ? new Integer(extArray[0]) : instance.getId(); map.put(id, instance); } } return map; } }
private void initForeignMarshallables(Map<Integer, ? extends AdvancedExternalizer<?>> externalizerMap) { for (Map.Entry<Integer, ? extends AdvancedExternalizer<?>> entry : externalizerMap.entrySet()) { AdvancedExternalizer<?> ext = entry.getValue(); Integer id = ext.getId(); if (entry.getKey() == null && id == null) throw new CacheConfigurationException(String.format( "No advanced externalizer identifier set for externalizer %s", ext.getClass().getName())); else if (entry.getKey() != null) id = entry.getKey(); id = checkForeignIdLimit(id, ext); updateExtReadersWithTypes(new ExternalizerAdapter(id, ext), generateForeignReaderIndex(id)); } }
.advancedExternalizers(); for ( AdvancedExternalizer<?> ogmExternalizer : ogmExternalizers.values() ) { final Integer externalizerId = ogmExternalizer.getId(); AdvancedExternalizer<?> registeredExternalizer = externalizerMap.get( externalizerId ); if ( registeredExternalizer == null ) {
private void addInternalExternalizer(AdvancedExternalizer<?> ext) { int id = checkInternalIdLimit(ext.getId(), ext); updateExtReadersWithTypes(new ExternalizerAdapter(id, ext)); }
.advancedExternalizers(); for ( AdvancedExternalizer<?> ogmExternalizer : ogmExternalizers.values() ) { final Integer externalizerId = ogmExternalizer.getId(); AdvancedExternalizer<?> registeredExternalizer = externalizerMap.get( externalizerId ); if ( registeredExternalizer == null ) {
public void testExternalizerConfigInfo() { Map<Integer, AdvancedExternalizer<?>> advExts = manager(0).getCacheManagerConfiguration().serialization().advancedExternalizers(); assert advExts.size() == 3; AdvancedExternalizer<?> ext = advExts.get(1234); assert ext != null; assert ext.getClass() == IdViaConfigObj.Externalizer.class; ext = advExts.get(5678); assert ext != null; assert ext.getClass() == IdViaAnnotationObj.Externalizer.class; assert ext.getId() == 5678; ext = advExts.get(3456); assert ext != null; assert ext.getClass() == IdViaBothObj.Externalizer.class; }
private int findExternalizerId(Object obj, EmbeddedCacheManager cm) { GlobalMarshaller marshaller = TestingUtil.extractGlobalMarshaller(cm); return ((AdvancedExternalizer<?>) marshaller.findExternalizerFor(obj)).getId(); }