This closes #1273 ARTEMIS-1165 Artemis 1.x JMS bindings doesn't handle JDBC network problems

This commit is contained in:
Andy Taylor 2017-05-17 14:21:06 +01:00
commit 1cbadb08d7
3 changed files with 9 additions and 4 deletions

View File

@ -85,6 +85,7 @@ public final class JMSJournalStorageManagerImpl implements JMSStorageManager {
// Constructors -------------------------------------------------- // Constructors --------------------------------------------------
public JMSJournalStorageManagerImpl(ExecutorFactory ioExecutors, public JMSJournalStorageManagerImpl(ExecutorFactory ioExecutors,
ExecutorFactory executorFactory,
final IDGenerator idGenerator, final IDGenerator idGenerator,
final Configuration config, final Configuration config,
final ReplicationManager replicator, final ReplicationManager replicator,
@ -99,8 +100,8 @@ public final class JMSJournalStorageManagerImpl implements JMSStorageManager {
createDir = config.isCreateBindingsDir(); createDir = config.isCreateBindingsDir();
Journal localJMS;
if (config.getStoreConfiguration() != null && config.getStoreConfiguration().getStoreType() == StoreConfiguration.StoreType.DATABASE) { if (config.getStoreConfiguration() != null && config.getStoreConfiguration().getStoreType() == StoreConfiguration.StoreType.DATABASE) {
final JDBCJournalImpl localJMS;
DatabaseStorageConfiguration dbConf = (DatabaseStorageConfiguration) config.getStoreConfiguration(); DatabaseStorageConfiguration dbConf = (DatabaseStorageConfiguration) config.getStoreConfiguration();
if (dbConf.getDataSource() != null) { if (dbConf.getDataSource() != null) {
SQLProvider.Factory sqlProviderFactory = dbConf.getSqlProviderFactory(); SQLProvider.Factory sqlProviderFactory = dbConf.getSqlProviderFactory();
@ -112,10 +113,14 @@ public final class JMSJournalStorageManagerImpl implements JMSStorageManager {
String driverClassName = dbConf.getJdbcDriverClassName(); String driverClassName = dbConf.getJdbcDriverClassName();
localJMS = new JDBCJournalImpl(dbConf.getJdbcConnectionUrl(), driverClassName, JDBCUtils.getSQLProvider(driverClassName, dbConf.getJMSBindingsTableName(), SQLProvider.DatabaseStoreType.BINDINGS_JOURNAL), scheduledExecutorService, ioExecutors.getExecutor(), criticalErrorListener); localJMS = new JDBCJournalImpl(dbConf.getJdbcConnectionUrl(), driverClassName, JDBCUtils.getSQLProvider(driverClassName, dbConf.getJMSBindingsTableName(), SQLProvider.DatabaseStoreType.BINDINGS_JOURNAL), scheduledExecutorService, ioExecutors.getExecutor(), criticalErrorListener);
} }
final int networkTimeout = dbConf.getJdbcNetworkTimeout();
if (networkTimeout >= 0) {
localJMS.setNetworkTimeout(executorFactory.getExecutor(), networkTimeout);
}
jmsJournal = localJMS; jmsJournal = localJMS;
} else { } else {
SequentialFileFactory bindingsJMS = new NIOSequentialFileFactory(config.getBindingsLocation(), 1); SequentialFileFactory bindingsJMS = new NIOSequentialFileFactory(config.getBindingsLocation(), 1);
localJMS = new JournalImpl(ioExecutors, 1024 * 1024, 2, config.getJournalPoolFiles(), config.getJournalCompactMinFiles(), config.getJournalCompactPercentage(), bindingsJMS, "activemq-jms", "jms", 1, 0); final Journal localJMS = new JournalImpl(ioExecutors, 1024 * 1024, 2, config.getJournalPoolFiles(), config.getJournalCompactMinFiles(), config.getJournalCompactPercentage(), bindingsJMS, "activemq-jms", "jms", 1, 0);
if (replicator != null) { if (replicator != null) {
jmsJournal = new ReplicatedJournal((byte) 2, localJMS, replicator); jmsJournal = new ReplicatedJournal((byte) 2, localJMS, replicator);

View File

@ -1552,7 +1552,7 @@ public class JMSServerManagerImpl implements JMSServerManager, ActivateCallback
storage.stop(); storage.stop();
} }
if (coreConfig.isPersistenceEnabled()) { if (coreConfig.isPersistenceEnabled()) {
storage = new JMSJournalStorageManagerImpl(server.getIOExecutorFactory(), new TimeAndCounterIDGenerator(), server.getConfiguration(), server.getReplicationManager(), server.getScheduledPool(), activeMQserver.getCriticalIOErrorListener()); storage = new JMSJournalStorageManagerImpl(server.getIOExecutorFactory(), server.getExecutorFactory(), new TimeAndCounterIDGenerator(), server.getConfiguration(), server.getReplicationManager(), server.getScheduledPool(), activeMQserver.getCriticalIOErrorListener());
} else { } else {
storage = new NullJMSStorageManagerImpl(); storage = new NullJMSStorageManagerImpl();
} }

View File

@ -155,7 +155,7 @@ public abstract class StorageManagerTestBase extends ActiveMQTestBase {
* @throws Exception * @throws Exception
*/ */
protected void createJMSStorage() throws Exception { protected void createJMSStorage() throws Exception {
jmsJournal = new JMSJournalStorageManagerImpl(null, new TimeAndCounterIDGenerator(), createDefaultInVMConfig(), null, scheduledExecutorService, null); jmsJournal = new JMSJournalStorageManagerImpl(null, execFactory, new TimeAndCounterIDGenerator(), createDefaultInVMConfig(), null, scheduledExecutorService, null);
addActiveMQComponent(jmsJournal); addActiveMQComponent(jmsJournal);
jmsJournal.start(); jmsJournal.start();
jmsJournal.load(); jmsJournal.load();