Package org.jboss.aspects.remoting

Source Code of org.jboss.aspects.remoting.ClusteredRemoting

/*     */ package org.jboss.aspects.remoting;
/*     */
/*     */ import java.util.Collection;
/*     */ import java.util.HashMap;
/*     */ import java.util.Iterator;
/*     */ import java.util.Map;
/*     */ import javax.naming.InitialContext;
/*     */ import org.jboss.aop.Advised;
/*     */ import org.jboss.aop.Dispatcher;
/*     */ 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.aop.util.PayloadKey;
/*     */ import org.jboss.aspects.security.SecurityClientInterceptor;
/*     */ import org.jboss.aspects.tx.ClientTxPropagationInterceptor;
/*     */ import org.jboss.ha.client.loadbalance.LoadBalancePolicy;
/*     */ import org.jboss.ha.framework.interfaces.ClusteringTargetsRepository;
/*     */ import org.jboss.ha.framework.interfaces.HAPartition;
/*     */ import org.jboss.ha.framework.server.HATarget;
/*     */ import org.jboss.logging.Logger;
/*     */ import org.jboss.remoting.InvokerLocator;
/*     */
/*     */ public class ClusteredRemoting
/*     */   implements ClusterConstants
/*     */ {
/*  53 */   private static final Logger log = Logger.getLogger(ClusteredRemoting.class);
/*     */
/*     */   public static ClassProxy clusterObject(Object objectId, Object obj, String partitionName, LoadBalancePolicy lb, InvokerLocator locator)
/*     */     throws Exception
/*     */   {
/*  58 */     String proxyFamilyName = objectId.toString() + locator.getProtocol() + partitionName;
/*  59 */     HAPartition partition = (HAPartition)new InitialContext().lookup("/HAPartition/" + partitionName);
/*     */
/*  61 */     HATarget target = null;
/*  62 */     Map families = null;
/*  63 */     InstanceAdvisor advisor = null;
/*     */     Class clazz;
/*  66 */     if ((obj instanceof Advised))
/*     */     {
/*  68 */       advisor = ((Advised)obj)._getInstanceAdvisor();
/*  69 */       Class clazz = obj.getClass();
/*  70 */       Dispatcher.singleton.registerTarget(objectId, obj);
/*     */     }
/*     */     else
/*     */     {
/*  74 */       clazz = obj.getClass();
/*  75 */       ClassProxy proxy = ClassProxyFactory.newInstance(obj.getClass());
/*  76 */       advisor = proxy._getInstanceAdvisor();
/*  77 */       advisor.insertInterceptor(new ForwardingInterceptor(obj));
/*  78 */       Dispatcher.singleton.registerTarget(objectId, proxy);
/*     */     }
/*  80 */     families = (Map)advisor.getMetaData().getMetaData("CLUSTERED_REMOTING", "CLUSTER_FAMILIES");
/*  81 */     if (families != null)
/*     */     {
/*  83 */       target = (HATarget)families.get(proxyFamilyName);
/*  84 */       if (target == null)
/*     */       {
/*  86 */         target = new HATarget(partition, proxyFamilyName, locator, 2);
/*  87 */         ClusteringTargetsRepository.initTarget(proxyFamilyName, target.getReplicants());
/*  88 */         families.put(proxyFamilyName, target);
/*     */       }
/*     */     }
/*     */     else
/*     */     {
/*  93 */       families = new HashMap();
/*  94 */       target = new HATarget(partition, proxyFamilyName, locator, 2);
/*  95 */       ClusteringTargetsRepository.initTarget(proxyFamilyName, target.getReplicants());
/*  96 */       families.put(proxyFamilyName, target);
/*  97 */       advisor.insertInterceptor(0, new ReplicantsManagerInterceptor(families));
/*     */     }
/*     */
/* 100 */     ClassProxy proxy = ClassProxyFactory.newInstance(clazz);
/* 101 */     InstanceAdvisor proxyAdvisor = proxy._getInstanceAdvisor();
/* 102 */     proxyAdvisor.insertInterceptor(IsLocalInterceptor.singleton);
/* 103 */     advisor.insertInterceptor(SecurityClientInterceptor.singleton);
/* 104 */     advisor.insertInterceptor(ClientTxPropagationInterceptor.singleton);
/* 105 */     proxyAdvisor.insertInterceptor(MergeMetaDataInterceptor.singleton);
/* 106 */     proxyAdvisor.insertInterceptor(ClusterChooserInterceptor.singleton);
/* 107 */     proxyAdvisor.insertInterceptor(InvokeRemoteInterceptor.singleton);
/*     */
/* 109 */     proxyAdvisor.getMetaData().addMetaData("CLUSTERED_REMOTING", "CLUSTER_FAMILY_WRAPPER", new FamilyWrapper(proxyFamilyName, target.getReplicants()), PayloadKey.AS_IS);
/*     */
/* 115 */     proxyAdvisor.getMetaData().addMetaData("CLUSTERED_REMOTING", "LOADBALANCE_POLICY", lb, PayloadKey.AS_IS);
/*     */
/* 120 */     proxyAdvisor.getMetaData().addMetaData("REMOTING", "SUBSYSTEM", "AOP", PayloadKey.AS_IS);
/*     */
/* 125 */     proxyAdvisor.getMetaData().addMetaData("DISPATCHER", "OID", objectId, PayloadKey.AS_IS);
/*     */
/* 130 */     return proxy;
/*     */   }
/*     */
/*     */   public static void unregisterClusteredObject(Object object)
/*     */   {
/*     */     try
/*     */     {
/* 137 */       ClassProxy proxy = (ClassProxy)object;
/* 138 */       InstanceAdvisor advisor = proxy._getInstanceAdvisor();
/*     */
/* 140 */       String oid = (String)advisor.getMetaData().getMetaData("DISPATCHER", "OID");
/* 141 */       InstanceAdvised registeredObject = (InstanceAdvised)Dispatcher.singleton.getRegistered(oid);
/* 142 */       if (registeredObject == null) throw new NotRegisteredException(oid.toString() + " is not registered");
/* 143 */       Dispatcher.singleton.unregisterTarget(oid);
/*     */
/* 145 */       advisor = registeredObject._getInstanceAdvisor();
/* 146 */       Map families = (Map)advisor.getMetaData().getMetaData("CLUSTERED_REMOTING", "CLUSTER_FAMILIES");
/* 147 */       Iterator it = families.values().iterator();
/* 148 */       while (it.hasNext())
/*     */       {
/* 150 */         HATarget target = (HATarget)it.next();
/* 151 */         target.destroy();
/*     */       }
/*     */     }
/*     */     catch (Exception ignored)
/*     */     {
/* 156 */       log.trace("Ignored exception unregistering a clustered object", ignored);
/*     */     }
/*     */   }
/*     */ }

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

Related Classes of org.jboss.aspects.remoting.ClusteredRemoting

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.