protected void regionAwareMarshall(Fqn fqn, Object toMarshall) throws Exception { Region r = regionManager == null ? null : regionManager.getValidMarshallingRegion(fqn); ClassLoader originalClassLoader = null; boolean needToResetLoader = false; Thread current = null; if (r != null) { // set the region's class loader as the thread's context classloader needToResetLoader = true; current = Thread.currentThread(); originalClassLoader = current.getContextClassLoader(); current.setContextClassLoader(r.getClassLoader()); } try { doMarshall(fqn, toMarshall); } finally { if (needToResetLoader) current.setContextClassLoader(originalClassLoader); } }
protected Object regionAwareUnmarshall(Fqn fqn, Object toUnmarshall) throws Exception { Region r = regionManager == null ? null : regionManager.getValidMarshallingRegion(fqn); ClassLoader originalClassLoader = null; boolean needToResetLoader = false; Thread current = null; if (r != null) { if (trace) { log.trace("Using region " + r.getFqn() + ", which has registered class loader " + r.getClassLoader() + " as a context class loader."); } // set the region's class loader as the thread's context classloader needToResetLoader = true; current = Thread.currentThread(); originalClassLoader = current.getContextClassLoader(); current.setContextClassLoader(r.getClassLoader()); } try { return doUnmarshall(fqn, toUnmarshall); } finally { if (needToResetLoader) current.setContextClassLoader(originalClassLoader); } }
Region r = null; if (region != null) r = regionManager.getRegion(region, false); if (r != null && r.getClassLoader() != null) toUse = r.getClassLoader(); current.setContextClassLoader(toUse); marshallObject(region, out, refMap);
public List<Region> getAllRegions(Region.Type type) { List<Region> regions; if (type != ANY) { regions = new ArrayList<Region>(); // we need to loop thru the regions and only select specific regions to rtn. for (Region r : regionsRegistry.values()) { if ((type == EVICTION && r.getEvictionRegionConfig() != null) || (type == MARSHALLING && r.isActive() && r.getClassLoader() != null)) { regions.add(r); } } } else { // put all regions regions = new ArrayList<Region>(regionsRegistry.values()); } Collections.sort(regions); return regions; }
public boolean hasRegion(Fqn fqn, Region.Type type) { Region r = regionsRegistry.get(fqn); if (r == null) return false; switch (type) { case ANY: return true; case EVICTION: return r.getEvictionRegionConfig() != null; case MARSHALLING: return r.isActive() && r.getClassLoader() != null; } // should never reach here? return false; }
public void setContextClassLoaderAsCurrent(Fqn fqn) { if (fqn.isChildOf(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN)) { if (fqn.size() <= 2) { fqn = Fqn.ROOT; } else { fqn = fqn.getSubFqn(2, fqn.size()); } } Region region = getRegion(fqn, false); ClassLoader regionCL = (region == null) ? null : region.getClassLoader(); if (regionCL != null) { Thread.currentThread().setContextClassLoader(regionCL); } }
retValue[0] = unmarshallObject(in, region.getClassLoader(), refMap, true); retValue[1] = regionFqn;
|| (type == MARSHALLING && r.getClassLoader() != null) || (type == EVICTION && r.getEvictionRegionConfig() != null)) || (type == MARSHALLING && r.getClassLoader() != null) || (type == EVICTION && r.getEvictionRegionConfig() != null))
if (r != null) if (!defaultInactive && r.getClassLoader() == null)
if (defaultInactive && region.getClassLoader() == null)