Пример #1
0
  public synchronized void start() {
    if (!started) {
      HornetQJMSLogger.LOGGER.debug("Starting RecoveryDiscovery on " + config);
      started = true;

      locator = config.createServerLocator();
      locator.disableFinalizeCheck();
      locator.addClusterTopologyListener(new InternalListener(config));
      try {
        sessionFactory = (ClientSessionFactoryInternal) locator.createSessionFactory();
        // We are using the SessionFactoryInternal here directly as we don't have information to
        // connect with an user and password
        // on the session as all we want here is to get the topology
        // in case of failure we will retry
        sessionFactory.addFailureListener(this);

        HornetQJMSLogger.LOGGER.debug("RecoveryDiscovery started fine on " + config);
      } catch (Exception startupError) {
        HornetQJMSLogger.LOGGER.warn(
            "Couldn't start recovery discovery on "
                + config
                + ", we will retry this on the next recovery scan");
        stop();
        HornetQRecoveryRegistry.getInstance().failedDiscovery(this);
      }
    }
  }
Пример #2
0
 public void setLiveID(String liveID) {
   targetServerID = liveID;
   nodeManager.setNodeID(liveID);
   // now we are replicating we can start waiting for disconnect notifications so we can fail over
   sessionFactory.addFailureListener(this);
 }
  @Test
  public void testServerShutdownAndReconnect() throws Exception {
    HornetQResourceAdapter qResourceAdapter = newResourceAdapter();
    qResourceAdapter.setReconnectAttempts(-1);
    qResourceAdapter.setCallTimeout(500L);
    qResourceAdapter.setTransactionManagerLocatorClass("");
    qResourceAdapter.setTransactionManagerLocatorMethod("");
    qResourceAdapter.setRetryInterval(500L);
    MyBootstrapContext ctx = new MyBootstrapContext();
    qResourceAdapter.start(ctx);
    // This is just to register a listener
    final CountDownLatch failedLatch = new CountDownLatch(1);
    ClientSessionFactoryInternal factoryListener =
        (ClientSessionFactoryInternal)
            qResourceAdapter
                .getDefaultHornetQConnectionFactory()
                .getServerLocator()
                .createSessionFactory();
    factoryListener.addFailureListener(
        new SessionFailureListener() {

          @Override
          public void connectionFailed(HornetQException exception, boolean failedOver) {}

          @Override
          public void connectionFailed(
              HornetQException exception, boolean failedOver, String scaleDownTargetNodeID) {
            connectionFailed(exception, failedOver);
          }

          @Override
          public void beforeReconnect(HornetQException exception) {
            failedLatch.countDown();
          }
        });
    HornetQActivationSpec spec = new HornetQActivationSpec();
    spec.setResourceAdapter(qResourceAdapter);
    spec.setUseJNDI(false);
    spec.setDestinationType("javax.jms.Queue");
    spec.setDestination(MDBQUEUE);
    CountDownLatch latch = new CountDownLatch(1);
    DummyMessageEndpoint endpoint = new DummyMessageEndpoint(latch);
    DummyMessageEndpointFactory endpointFactory = new DummyMessageEndpointFactory(endpoint, false);
    qResourceAdapter.endpointActivation(endpointFactory, spec);
    ClientSession session = locator.createSessionFactory().createSession();
    ClientProducer clientProducer = session.createProducer(MDBQUEUEPREFIXED);
    ClientMessage message = session.createMessage(true);
    message.getBodyBuffer().writeString("teststring");
    clientProducer.send(message);
    session.close();
    latch.await(5, TimeUnit.SECONDS);

    assertNotNull(endpoint.lastMessage);
    assertEquals(endpoint.lastMessage.getCoreMessage().getBodyBuffer().readString(), "teststring");

    server.stop();

    assertTrue(failedLatch.await(5, TimeUnit.SECONDS));

    qResourceAdapter.endpointDeactivation(endpointFactory, spec);

    qResourceAdapter.stop();
  }