Package org.radargun.service

Source Code of org.radargun.service.Infinispan52Lifecycle

package org.radargun.service;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.jgroups.JChannel;
import org.jgroups.protocols.relay.RELAY2;
import org.jgroups.protocols.relay.Relayer;
import org.radargun.protocols.SLAVE_PARTITION;

public class Infinispan52Lifecycle extends InfinispanPartitionableLifecycle {
   public Infinispan52Lifecycle(Infinispan52EmbeddedService service) {
      super(service);
   }

   @Override
   protected List<JChannel> getChannels(JChannel parentChannel, boolean failOnNotReady) {
      List<JChannel> list;
      if (parentChannel == null) {
         list = super.getChannels(null, failOnNotReady);
      } else {
         list = new ArrayList<JChannel>();
         list.add(parentChannel);
      }
      if (list.size() == 0) {
         log.info("No JGroups channels available");
         return list;
      }
      RELAY2 relay = (RELAY2) list.get(0).getProtocolStack().findProtocol(RELAY2.class);
      if (relay != null) {
         try {
            Field relayerField = RELAY2.class.getDeclaredField("relayer");
            relayerField.setAccessible(true);
            Relayer relayer = (Relayer) relayerField.get(relay);
            if (relayer == null) {
               log.debug("No relayer found");
               return list;
            }
            Field bridgesField = Relayer.class.getDeclaredField("bridges");
            bridgesField.setAccessible(true);
            Collection<?> bridges = (Collection<?>) bridgesField.get(relayer);
            if (bridges == null) {
               return list;
            }
            Field channelField = null;
            for (Object bridge : bridges) {
               if (channelField == null) {
                  channelField = bridge.getClass().getDeclaredField("channel");
                  channelField.setAccessible(true);                 
               }
               JChannel bridgeChannel = (JChannel) channelField.get(bridge);
               if (bridgeChannel.isOpen()) {
                  list.add(bridgeChannel);
               }
            }
         } catch (Exception e) {
            log.error("Failed to get channel from RELAY2 protocol", e);
         }
      } else {
         log.info("No RELAY2 protocol in XS service");
      }
      return list;
   }

   @Override
   protected Class<? extends SLAVE_PARTITION> getPartitionProtocolClass() {
      return SLAVE_PARTITION_33.class;
   }
}
TOP

Related Classes of org.radargun.service.Infinispan52Lifecycle

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.