Package org.jboss.aspects.versioned

Source Code of org.jboss.aspects.versioned.DistributedVersionManager

/*     */ package org.jboss.aspects.versioned;
/*     */
/*     */ import java.io.PrintStream;
/*     */ import java.lang.reflect.Field;
/*     */ import java.lang.reflect.Modifier;
/*     */ import java.util.ArrayList;
/*     */ import java.util.HashMap;
/*     */ import java.util.List;
/*     */ import java.util.Map;
/*     */ import java.util.Set;
/*     */ import org.jboss.aop.Advised;
/*     */ import org.jboss.aop.ClassAdvisor;
/*     */ import org.jboss.aop.InstanceAdvised;
/*     */ import org.jboss.aop.InstanceAdvisor;
/*     */ import org.jboss.aop.metadata.SimpleMetaData;
/*     */ import org.jboss.aop.proxy.ClassProxy;
/*     */ import org.jboss.aop.proxy.ClassProxyFactory;
/*     */ import org.jboss.logging.Logger;
/*     */ import org.jboss.util.id.GUID;
/*     */
/*     */ public class DistributedVersionManager extends VersionManager
/*     */ {
/*  48 */   protected static Logger log = Logger.getLogger(DistributedVersionManager.class);
/*     */   protected SynchronizationManager synchManager;
/*     */   protected long timeout;
/*     */
/*     */   public DistributedVersionManager(long timeout, SynchronizationManager synchManager)
/*     */   {
/*  54 */     this.synchManager = synchManager;
/*  55 */     this.timeout = timeout;
/*     */   }
/*     */
/*     */   public boolean isVersioned(Object obj)
/*     */   {
/*  60 */     if (!(obj instanceof InstanceAdvised)) return false;
/*  61 */     InstanceAdvised advised = (InstanceAdvised)obj;
/*  62 */     return getGUID(advised) != null;
/*     */   }
/*     */
/*     */   public GUID tag(InstanceAdvised advised)
/*     */   {
/*  67 */     GUID guid = new GUID();
/*  68 */     SimpleMetaData metaData = advised._getInstanceAdvisor().getMetaData();
/*  69 */     metaData.addMetaData("VERSION_MANAGER", "VERSION_ID", guid);
/*  70 */     return guid;
/*     */   }
/*     */
/*     */   public void untag(InstanceAdvised advised)
/*     */   {
/*  75 */     SimpleMetaData metaData = advised._getInstanceAdvisor().getMetaData();
/*  76 */     metaData.removeMetaData("VERSION_MANAGER", "VERSION_ID");
/*     */   }
/*     */
/*     */   public List makeVersionedList(List list, ArrayList newObjects) throws Exception
/*     */   {
/*  81 */     ClassProxy proxy = ClassProxyFactory.newInstance(list.getClass());
/*  82 */     GUID guid = tag(proxy);
/*  83 */     DistributedListState manager = new DistributedListState(guid, this.timeout, proxy, list, this, this.synchManager);
/*  84 */     StateManager.setStateManager(proxy, manager);
/*  85 */     CollectionStateChangeInterceptor interceptor = new CollectionStateChangeInterceptor(manager);
/*  86 */     proxy._getInstanceAdvisor().appendInterceptor(interceptor);
/*  87 */     newObjects.add(manager);
/*  88 */     return (List)proxy;
/*     */   }
/*     */
/*     */   public Map makeVersionedMap(Map map, ArrayList newObjects)
/*     */     throws Exception
/*     */   {
/*  94 */     ClassProxy proxy = ClassProxyFactory.newInstance(map.getClass());
/*  95 */     GUID guid = tag(proxy);
/*  96 */     DistributedMapState manager = new DistributedMapState(guid, this.timeout, proxy, map, this, this.synchManager);
/*  97 */     StateManager.setStateManager(proxy, manager);
/*  98 */     CollectionStateChangeInterceptor interceptor = new CollectionStateChangeInterceptor(manager);
/*  99 */     proxy._getInstanceAdvisor().appendInterceptor(interceptor);
/* 100 */     newObjects.add(manager);
/* 101 */     return (Map)proxy;
/*     */   }
/*     */
/*     */   public Set makeVersionedSet(Set set, ArrayList newObjects)
/*     */     throws Exception
/*     */   {
/* 107 */     ClassProxy proxy = ClassProxyFactory.newInstance(set.getClass());
/* 108 */     GUID guid = tag(proxy);
/* 109 */     DistributedSetState manager = new DistributedSetState(guid, this.timeout, proxy, set, this, this.synchManager);
/* 110 */     StateManager.setStateManager(proxy, manager);
/* 111 */     CollectionStateChangeInterceptor interceptor = new CollectionStateChangeInterceptor(manager);
/* 112 */     proxy._getInstanceAdvisor().appendInterceptor(interceptor);
/* 113 */     newObjects.add(manager);
/* 114 */     return (Set)proxy;
/*     */   }
/*     */
/*     */   public Object makeVersioned(Object obj)
/*     */     throws Exception
/*     */   {
/* 121 */     ArrayList newObjects = new ArrayList();
/* 122 */     obj = makeVersioned(obj, newObjects);
/* 123 */     this.synchManager.createObjects(newObjects);
/* 124 */     return obj;
/*     */   }
/*     */
/*     */   Object makeVersioned(Object obj, ArrayList newObjects)
/*     */     throws Exception
/*     */   {
/* 131 */     if ((obj instanceof ClassProxy)) return obj;
/*     */
/* 133 */     if (!(obj instanceof Advised))
/*     */     {
/* 135 */       if ((obj instanceof List))
/*     */       {
/* 137 */         List list = (List)obj;
/* 138 */         return makeVersionedList(list, newObjects);
/*     */       }
/* 140 */       if ((obj instanceof Map))
/*     */       {
/* 142 */         Map map = (Map)obj;
/* 143 */         return makeVersionedMap(map, newObjects);
/*     */       }
/* 145 */       if ((obj instanceof Set))
/*     */       {
/* 147 */         Set set = (Set)obj;
/* 148 */         return makeVersionedSet(set, newObjects);
/*     */       }
/*     */
/* 152 */       return obj;
/*     */     }
/*     */
/* 155 */     Advised advised = (Advised)obj;
/* 156 */     SimpleMetaData metaData = advised._getInstanceAdvisor().getMetaData();
/*     */     GUID guid;
/* 158 */     synchronized (metaData)
/*     */     {
/* 160 */       if (isVersioned(advised)) return obj;
/* 161 */       guid = tag(advised);
/*     */     }
/* 163 */     System.out.println("VersionManager: " + guid);
/* 164 */     DistributedPOJOState manager = new DistributedPOJOState(guid, this.timeout, advised, this, this.synchManager);
/* 165 */     StateManager.setStateManager(advised, manager);
/* 166 */     StateChangeInterceptor interceptor = new StateChangeInterceptor(manager);
/* 167 */     manager.acquireWriteLock();
/* 168 */     advised._getInstanceAdvisor().appendInterceptor(interceptor);
/*     */     try
/*     */     {
/* 171 */       Field[] advisedFields = ((ClassAdvisor)advised._getAdvisor()).getAdvisedFields();
/* 172 */       for (int i = 0; i < advisedFields.length; i++)
/*     */       {
/* 174 */         Field field = advisedFields[i];
/* 175 */         if (!Modifier.isStatic(field.getModifiers())) {
/* 176 */           Object fieldVal = field.get(advised);
/* 177 */           if (fieldVal != null)
/*     */           {
/* 179 */             if ((fieldVal instanceof Advised))
/*     */             {
/* 181 */               Advised fieldAdvised = (Advised)fieldVal;
/* 182 */               makeVersioned(fieldAdvised, newObjects);
/* 183 */               fieldVal = new VersionReference(getGUID(fieldAdvised), fieldAdvised);
/*     */             }
/* 185 */             else if ((fieldVal instanceof List))
/*     */             {
/* 187 */               List list = (List)fieldVal;
/* 188 */               InstanceAdvised instanceAdvised = (InstanceAdvised)makeVersionedList(list, newObjects);
/* 189 */               fieldVal = new VersionReference(getGUID(instanceAdvised), instanceAdvised);
/*     */             }
/* 191 */             else if ((fieldVal instanceof Map))
/*     */             {
/* 193 */               Map map = (Map)fieldVal;
/* 194 */               InstanceAdvised instanceAdvised = (InstanceAdvised)makeVersionedMap(map, newObjects);
/* 195 */               fieldVal = new VersionReference(getGUID(instanceAdvised), instanceAdvised);
/*     */             }
/* 197 */             else if ((fieldVal instanceof Set))
/*     */             {
/* 199 */               Set set = (Set)fieldVal;
/* 200 */               InstanceAdvised instanceAdvised = (InstanceAdvised)makeVersionedSet(set, newObjects);
/* 201 */               fieldVal = new VersionReference(getGUID(instanceAdvised), instanceAdvised);
/*     */             }
/*     */           }
/* 204 */           manager.fieldMap.put(new Integer(i), new DistributedFieldUpdate(fieldVal, 0L, i));
/*     */         }
/*     */       }
/* 206 */       newObjects.add(manager);
/* 207 */       i = advised;
/*     */       return i; } finally { manager.releaseWriteLock(); } throw localObject2;
/*     */   }
/*     */
/*     */   public void addVersioning(DistributedPOJOState manager, Advised advised)
/*     */   {
/* 221 */     StateManager.setStateManager(advised, manager);
/* 222 */     StateChangeInterceptor interceptor = new StateChangeInterceptor(manager);
/* 223 */     SimpleMetaData metaData = advised._getInstanceAdvisor().getMetaData();
/* 224 */     metaData.addMetaData("VERSION_MANAGER", "VERSION_ID", manager.getGUID());
/* 225 */     advised._getInstanceAdvisor().appendInterceptor(interceptor);
/*     */   }
/*     */
/*     */   public ClassProxy addListVersioning(List list, DistributedListState manager)
/*     */     throws Exception
/*     */   {
/* 234 */     ClassProxy proxy = ClassProxyFactory.newInstance(list.getClass());
/* 235 */     GUID guid = manager.getGUID();
/* 236 */     SimpleMetaData metaData = proxy._getInstanceAdvisor().getMetaData();
/* 237 */     metaData.addMetaData("VERSION_MANAGER", "VERSION_ID", guid);
/* 238 */     StateManager.setStateManager(proxy, manager);
/* 239 */     CollectionStateChangeInterceptor interceptor = new CollectionStateChangeInterceptor(manager);
/* 240 */     proxy._getInstanceAdvisor().appendInterceptor(interceptor);
/* 241 */     return proxy;
/*     */   }
/*     */
/*     */   public ClassProxy addMapVersioning(Map map, DistributedMapState manager)
/*     */     throws Exception
/*     */   {
/* 250 */     ClassProxy proxy = ClassProxyFactory.newInstance(map.getClass());
/* 251 */     GUID guid = manager.getGUID();
/* 252 */     SimpleMetaData metaData = proxy._getInstanceAdvisor().getMetaData();
/* 253 */     metaData.addMetaData("VERSION_MANAGER", "VERSION_ID", guid);
/* 254 */     StateManager.setStateManager(proxy, manager);
/* 255 */     CollectionStateChangeInterceptor interceptor = new CollectionStateChangeInterceptor(manager);
/* 256 */     proxy._getInstanceAdvisor().appendInterceptor(interceptor);
/* 257 */     return proxy;
/*     */   }
/*     */
/*     */   public ClassProxy addSetVersioning(Set set, DistributedSetState manager)
/*     */     throws Exception
/*     */   {
/* 266 */     ClassProxy proxy = ClassProxyFactory.newInstance(set.getClass());
/* 267 */     GUID guid = manager.getGUID();
/* 268 */     SimpleMetaData metaData = proxy._getInstanceAdvisor().getMetaData();
/* 269 */     metaData.addMetaData("VERSION_MANAGER", "VERSION_ID", guid);
/* 270 */     StateManager.setStateManager(proxy, manager);
/* 271 */     CollectionStateChangeInterceptor interceptor = new CollectionStateChangeInterceptor(manager);
/* 272 */     proxy._getInstanceAdvisor().appendInterceptor(interceptor);
/* 273 */     return proxy;
/*     */   }
/*     */ }

/* Location:           /home/mnovotny/projects/EMBEDDED_JBOSS_BETA3_COMMUNITY/embedded/output/lib/embedded-jboss/lib/jboss-embedded-all.jar
* Qualified Name:     org.jboss.aspects.versioned.DistributedVersionManager
* JD-Core Version:    0.6.0
*/
TOP

Related Classes of org.jboss.aspects.versioned.DistributedVersionManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.