private void registerExistingAdapter(FilteredKahaDBPersistenceAdapter filteredAdapter, File candidate) throws IOException { PersistenceAdapter adapter = adapterFromTemplate(filteredAdapter, candidate.getName()); startAdapter(adapter, candidate.getName()); Set<ActiveMQDestination> destinations = adapter.getDestinations(); if (destinations.size() != 0) { registerAdapter(filteredAdapter, adapter, destinations.toArray(new ActiveMQDestination[]{})[0]); } else { stopAdapter(adapter, candidate.getName()); } }
private PersistenceAdapter getMatchingPersistenceAdapter(ActiveMQDestination destination) throws IOException { Object result = destinationMap.chooseValue(destination); if (result == null) { throw new RuntimeException("No matching persistence adapter configured for destination: " + destination + ", options:" + adapters); } FilteredKahaDBPersistenceAdapter filteredAdapter = (FilteredKahaDBPersistenceAdapter) result; if (filteredAdapter.getDestination() == matchAll && filteredAdapter.isPerDestination()) { filteredAdapter = addAdapter(filteredAdapter, destination); if (LOG.isTraceEnabled()) { LOG.info("created per destination adapter for: " + destination + ", " + result); } } startAdapter(filteredAdapter.getPersistenceAdapter(), destination.getQualifiedName()); LOG.debug("destination {} matched persistence adapter {}", new Object[]{destination.getQualifiedName(), filteredAdapter.getPersistenceAdapter()}); return filteredAdapter.getPersistenceAdapter(); }
private PersistenceAdapter adapterFromTemplate(FilteredKahaDBPersistenceAdapter template, String destinationName) throws IOException { PersistenceAdapter adapter = kahaDBFromTemplate(template.getPersistenceAdapter()); configureAdapter(adapter); configureDirectory(adapter, destinationName); configureIndexDirectory(adapter, template.getPersistenceAdapter(), destinationName); return adapter; }
private FilteredKahaDBPersistenceAdapter addAdapter(FilteredKahaDBPersistenceAdapter filteredAdapter, ActiveMQDestination destination) throws IOException { PersistenceAdapter adapter = adapterFromTemplate(filteredAdapter, nameFromDestinationFilter(destination)); return registerAdapter(filteredAdapter, adapter, destination); }
/** * Sets the FilteredKahaDBPersistenceAdapter entries * * @org.apache.xbean.ElementType class="org.apache.activemq.store.kahadb.FilteredKahaDBPersistenceAdapter" */ @SuppressWarnings({ "rawtypes", "unchecked" }) public void setFilteredPersistenceAdapters(List entries) { for (Object entry : entries) { FilteredKahaDBPersistenceAdapter filteredAdapter = (FilteredKahaDBPersistenceAdapter) entry; PersistenceAdapter adapter = filteredAdapter.getPersistenceAdapter(); if (filteredAdapter.getDestination() == null) { filteredAdapter.setDestination(matchAll); } if (filteredAdapter.isPerDestination()) { configureDirectory(adapter, null); // per destination adapters will be created on demand or during recovery continue; } else { configureDirectory(adapter, nameFromDestinationFilter(filteredAdapter.getDestination())); } configureAdapter(adapter); adapters.add(adapter); } destinationMap.setEntries(entries); }
@Override public void removeQueueMessageStore(ActiveMQQueue destination) { PersistenceAdapter adapter = null; try { adapter = getMatchingPersistenceAdapter(destination); } catch (IOException e) { throw new RuntimeException(e); } if (adapter instanceof PersistenceAdapter && adapter.getDestinations().isEmpty()) { adapter.removeQueueMessageStore(destination); removeMessageStore(adapter, destination); destinationMap.remove(destination, adapter); } }
@Override public String toString() { String path = getDirectory() != null ? getDirectory().getAbsolutePath() : "DIRECTORY_NOT_SET"; return "MultiKahaDBPersistenceAdapter[" + path + "]" + adapters; }
private void configureAdapter(PersistenceAdapter adapter) { // need a per store factory that will put the store in the branch qualifier to disiambiguate xid mbeans ((TransactionIdTransformerAware)adapter).setTransactionIdTransformer(transactionIdTransformer); if (isUseLock()) { if( adapter instanceof Lockable ) { ((Lockable)adapter).setUseLock(false); } } if( adapter instanceof BrokerServiceAware ) { ((BrokerServiceAware)adapter).setBrokerService(getBrokerService()); } }
Broker broker = multiKahaDBPersistenceAdapter.getBrokerService().getBroker(); if (multiKahaDBPersistenceAdapter.isLocalXid(txid)) { try { if (recoveredPendingCommit.contains(txid)) {
@Override public void setBrokerService(BrokerService brokerService) { super.setBrokerService(brokerService); for (PersistenceAdapter persistenceAdapter : adapters) { if( persistenceAdapter instanceof BrokerServiceAware ) { ((BrokerServiceAware)persistenceAdapter).setBrokerService(getBrokerService()); } } }
@Override public MessageStore createQueueMessageStore(ActiveMQQueue destination) throws IOException { PersistenceAdapter persistenceAdapter = getMatchingPersistenceAdapter(destination); return transactionStore.proxy(persistenceAdapter.createTransactionStore(), persistenceAdapter.createQueueMessageStore(destination)); }
@Override public void doStart() throws Exception { Object result = destinationMap.chooseValue(matchAll); if (result != null) { FilteredKahaDBPersistenceAdapter filteredAdapter = (FilteredKahaDBPersistenceAdapter) result; if (filteredAdapter.getDestination() == matchAll && filteredAdapter.isPerDestination()) { findAndRegisterExistingAdapters(filteredAdapter); } } for (PersistenceAdapter persistenceAdapter : adapters) { persistenceAdapter.start(); } }
private FilteredKahaDBPersistenceAdapter addAdapter(FilteredKahaDBPersistenceAdapter filteredAdapter, ActiveMQDestination destination) throws IOException { PersistenceAdapter adapter = adapterFromTemplate(filteredAdapter, nameFromDestinationFilter(destination)); return registerAdapter(filteredAdapter, adapter, destination); }
/** * Sets the FilteredKahaDBPersistenceAdapter entries * * @org.apache.xbean.ElementType class="org.apache.activemq.store.kahadb.FilteredKahaDBPersistenceAdapter" */ @SuppressWarnings({ "rawtypes", "unchecked" }) public void setFilteredPersistenceAdapters(List entries) { for (Object entry : entries) { FilteredKahaDBPersistenceAdapter filteredAdapter = (FilteredKahaDBPersistenceAdapter) entry; PersistenceAdapter adapter = filteredAdapter.getPersistenceAdapter(); if (filteredAdapter.getDestination() == null) { filteredAdapter.setDestination(matchAll); } if (filteredAdapter.isPerDestination()) { configureDirectory(adapter, null); // per destination adapters will be created on demand or during recovery continue; } else { configureDirectory(adapter, nameFromDestinationFilter(filteredAdapter.getDestination())); } configureAdapter(adapter); adapters.add(adapter); } destinationMap.setEntries(entries); }
@Override public void removeTopicMessageStore(ActiveMQTopic destination) { PersistenceAdapter adapter = null; try { adapter = getMatchingPersistenceAdapter(destination); } catch (IOException e) { throw new RuntimeException(e); } if (adapter instanceof PersistenceAdapter && adapter.getDestinations().isEmpty()) { adapter.removeTopicMessageStore(destination); removeMessageStore(adapter, destination); destinationMap.remove(destination, adapter); } }
private File getDirectory() { return new File(multiKahaDBPersistenceAdapter.getDirectory(), "txStore"); }
private void configureAdapter(PersistenceAdapter adapter) { // need a per store factory that will put the store in the branch qualifier to disiambiguate xid mbeans ((TransactionIdTransformerAware)adapter).setTransactionIdTransformer(transactionIdTransformer); if (isUseLock()) { if( adapter instanceof Lockable ) { ((Lockable)adapter).setUseLock(false); } } if( adapter instanceof BrokerServiceAware ) { ((BrokerServiceAware)adapter).setBrokerService(getBrokerService()); } }
Broker broker = multiKahaDBPersistenceAdapter.getBrokerService().getBroker(); if (multiKahaDBPersistenceAdapter.isLocalXid(txid)) { try { if (recoveredPendingCommit.contains(txid)) {
@Override public void registerIndexListener(IndexListener indexListener) { getDelegate().registerIndexListener(indexListener); try { if (indexListener instanceof BaseDestination) { // update queue storeUsage Object matchingPersistenceAdapter = multiKahaDBPersistenceAdapter.destinationMap.chooseValue(getDelegate().getDestination()); if (matchingPersistenceAdapter instanceof FilteredKahaDBPersistenceAdapter) { FilteredKahaDBPersistenceAdapter filteredAdapter = (FilteredKahaDBPersistenceAdapter) matchingPersistenceAdapter; if (filteredAdapter.getUsage() != null && filteredAdapter.getPersistenceAdapter() instanceof KahaDBPersistenceAdapter) { StoreUsage storeUsage = filteredAdapter.getUsage(); storeUsage.setStore(filteredAdapter.getPersistenceAdapter()); storeUsage.setParent(multiKahaDBPersistenceAdapter.getBrokerService().getSystemUsage().getStoreUsage()); ((BaseDestination) indexListener).getSystemUsage().setStoreUsage(storeUsage); } } } } catch (Exception ignored) { LOG.warn("Failed to set mKahaDB destination store usage", ignored); } } };
@Override public TopicMessageStore createTopicMessageStore(ActiveMQTopic destination) throws IOException { PersistenceAdapter persistenceAdapter = getMatchingPersistenceAdapter(destination); return transactionStore.proxy(persistenceAdapter.createTransactionStore(), persistenceAdapter.createTopicMessageStore(destination)); }