public ClientSessionFactory createSessionFactory(String nodeID) throws Exception { TopologyMember topologyMember = topology.getMember(nodeID); if (HornetQLogger.LOGGER.isTraceEnabled()) { HornetQLogger.LOGGER.trace( "Creating connection factory towards " + nodeID + " = " + topologyMember + ", topology=" + topology.describe()); } if (topologyMember == null) { return null; } else if (topologyMember.getA() != null) { ClientSessionFactoryInternal factory = (ClientSessionFactoryInternal) createSessionFactory(topologyMember.getA()); if (topologyMember.getB() != null) { factory.setBackupConnector(topologyMember.getA(), topologyMember.getB()); } return factory; } else if (topologyMember.getA() == null && topologyMember.getB() != null) { // This shouldn't happen, however I wanted this to consider all possible cases ClientSessionFactoryInternal factory = (ClientSessionFactoryInternal) createSessionFactory(topologyMember.getB()); return factory; } else { // it shouldn't happen return null; } }
@SuppressWarnings("unchecked") private synchronized void updateArraysAndPairs() { Collection<TopologyMember> membersCopy = topology.getMembers(); topologyArray = (Pair<TransportConfiguration, TransportConfiguration>[]) Array.newInstance(Pair.class, membersCopy.size()); int count = 0; for (TopologyMember pair : membersCopy) { topologyArray[count++] = pair.getConnector(); } }
public void notifyNodeUp( long uniqueEventID, final String nodeID, final Pair<TransportConfiguration, TransportConfiguration> connectorPair, final boolean last) { if (!ha) { // there's no topology return; } if (HornetQLogger.LOGGER.isDebugEnabled()) { HornetQLogger.LOGGER.debug( "NodeUp " + this + "::nodeID=" + nodeID + ", connectorPair=" + connectorPair, new Exception("trace")); } TopologyMember member = new TopologyMember(connectorPair.getA(), connectorPair.getB()); topology.updateMember(uniqueEventID, nodeID, member); TopologyMember actMember = topology.getMember(nodeID); if (actMember != null && actMember.getConnector().getA() != null && actMember.getConnector().getB() != null) { HashSet<ClientSessionFactory> clonedFactories = new HashSet<ClientSessionFactory>(); synchronized (factories) { clonedFactories.addAll(factories); } for (ClientSessionFactory factory : clonedFactories) { ((ClientSessionFactoryInternal) factory) .setBackupConnector(actMember.getConnector().getA(), actMember.getConnector().getB()); } } updateArraysAndPairs(); if (last) { synchronized (this) { receivedTopology = true; // Notify if waiting on getting topology notifyAll(); } } }