Re-Verbindung zum JMS-server zunächst und nach sammeln bereits eine frühere Verbindung

Ich habe ein Problem mit einem JMS-re-connect-Strategie. Ich bin mir nicht sicher, ob ich es richtig mache (wahrscheinlich bin ich nicht). Anyways, ich bin mit WebLogic und das ist ein Verbraucher-client. Hier ist, wie Gewinne ich eine Verbindung, und versuchen Sie, fügen Sie das automatische re-connect. Das problem ist, dass es nicht wieder, und es gibt keine Ausnahmen protokollieren, was-so-ever. Ich neu erstellen Sie, die situation durch starten von weblogic, beginnend Verbraucher-Kunden, die Gewinne der ersten Verbindung, ich schließe weblogic abrubtly, dann habe ich wieder weblogic starten, an dem Punkt werden alle Nachrichten in der Warteschlange, die diese Verbraucher hören bleiben in der Warteschlange, ohne anerkannt, da Sie nicht empfangen.

public void setReceiver(MessageListener listener) {
        try {
            Properties parm = new Properties();
            parm.setProperty("java.naming.factory.initial",
                    "weblogic.jndi.WLInitialContextFactory");
            parm.setProperty("java.naming.provider.url", URL);
            parm.setProperty("java.naming.security.principal", username);
            parm.setProperty("java.naming.security.credentials", password);
            ctx = new InitialContext(parm);
            final QueueConnectionFactory connectionFactory = (QueueConnectionFactory) ctx
                    .lookup(conFactoryName);
            connection = connectionFactory.createQueueConnection();
            //TODO: 8/6/2012 Work on reconnection strategies for Consumer.
            ((WLConnection) connection)
                    .setReconnectPolicy(JMSConstants.RECONNECT_POLICY_ALL);
            ((WLConnection) connection).setReconnectBlockingMillis(30000L);
            ((WLConnection) connection).setTotalReconnectPeriodMillis(-1L);
            session = connection.createQueueSession(false,
                    Session.AUTO_ACKNOWLEDGE);

            queue = (Queue) ctx.lookup(queueName);
            //receiver = session.createReceiver(queue);
            //receiver.setMessageListener(listener);
            consumer = session.createConsumer(queue);
            consumer.setMessageListener(listener);

            connection.setExceptionListener(new ExceptionListener() {

                @Override
                public void onException(JMSException arg0) {
                    //Assume Disconnected.
                    FileHandler fh = null;
                    try {
                        fh = new FileHandler("./logs/ExceptionListener", true);
                    } catch (SecurityException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    SimpleFormatter formatter = new SimpleFormatter();
                    fh.setFormatter(formatter);
                    Logger log2 = Logger.getLogger("ExceptionListener");
                    log2.addHandler(fh);
                    boolean connected = false;
                    do {
                        if (connection != null) {
                            try {
                                connection.close();
                            } catch (JMSException e) {
                                log.warning(e.toString());
                            }
                            try {
                                connection = connectionFactory.createQueueConnection();
                                connection.setExceptionListener(this);
                                connection.start();
                                connected = true;
                            } catch (JMSException e) {
                                log.severe(e.toString());
                            }
                        }
                    } while (!connected);

                }
            });
            connection.start();

        } catch (JMSException je) {
            log.severe(je.getMessage());
        } catch (Exception e) {
            log.severe(e.getMessage());
        }
    }
InformationsquelleAutor Reid Mac | 2012-08-06
Schreibe einen Kommentar