Author: jstrachan
Date: Fri Aug 18 01:30:40 2006
New Revision: 432517
URL: http://svn.apache.org/viewvc?rev=432517&view=rev
Log:
Minor refactor so that we can configure the MasterConnector using XML or
dependency injection easier. Also added a test case showing how to use a new
<masterConnector> element to configure the userName & password of the slave.
For background on this issue see:
http://www.nabble.com/Master-Slave-with-authentication-tf2094845.html
Added:
incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/ft/QueueMasterSlaveUsingMasterConnectorElementTest.java
(with props)
incubator/activemq/trunk/activemq-core/src/test/resources/org/apache/activemq/broker/ft/slave2.xml
(with props)
Modified:
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerService.java
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/ft/MasterConnector.java
incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/ft/QueueMasterSlaveTest.java
Modified:
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerService.java
URL:
http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerService.java?rev=432517&r1=432516&r2=432517&view=diff
==============================================================================
---
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerService.java
(original)
+++
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/BrokerService.java
Fri Aug 18 01:30:40 2006
@@ -113,12 +113,13 @@
private List proxyConnectors = new CopyOnWriteArrayList();
private List registeredMBeanNames = new CopyOnWriteArrayList();
private List jmsConnectors = new CopyOnWriteArrayList();
+ private Service[] services;
private MasterConnector masterConnector;
+ private String masterConnectorURI;
private transient Thread shutdownHook;
private String[] transportConnectorURIs;
private String[] networkConnectorURIs;
private String[] proxyConnectorURIs;
- private String masterConnectorURI;
private JmsConnector[] jmsBridgeConnectors; //these are Jms to Jms bridges
to other jms messaging systems
private boolean deleteAllMessagesOnStartup;
private boolean advisorySupport = true;
@@ -280,24 +281,6 @@
return null;
}
- public void initializeMasterConnector(URI remoteURI) throws Exception {
- if (masterConnector != null){
- throw new IllegalStateException("Can only be the Slave to one
Master");
- }
- URI localURI = getVmConnectorURI();
- TransportConnector connector = null;
- if (!transportConnectors.isEmpty()){
- connector = (TransportConnector)transportConnectors.get(0);
- }
- masterConnector = new MasterConnector(this,connector);
- masterConnector.setLocalURI(localURI);
- masterConnector.setRemoteURI(remoteURI);
-
- if (isUseJmx()) {
- registerFTConnectorMBean(masterConnector);
- }
- }
-
/**
* @return Returns the masterConnectorURI.
*/
@@ -370,15 +353,13 @@
}
getBroker().start();
- if (masterConnectorURI!=null){
- initializeMasterConnector(new URI(masterConnectorURI));
- if (masterConnector!=null){
- masterConnector.start();
- }
- }
startAllConnectors();
+ if (isUseJmx() && masterConnector != null) {
+ registerFTConnectorMBean(masterConnector);
+ }
+
brokerId = broker.getBrokerId();
log.info("ActiveMQ JMS Message Broker (" + getBrokerName()+",
"+brokerId+") started");
}
@@ -388,6 +369,7 @@
}
}
+
public void stop() throws Exception {
if (! started.compareAndSet(true, false)) {
return;
@@ -398,10 +380,13 @@
removeShutdownHook();
ServiceStopper stopper = new ServiceStopper();
- if (masterConnector != null){
- masterConnector.stop();
+
+ if (services != null) {
+ for (int i = 0; i < services.length; i++) {
+ Service service = services[i];
+ stopper.stop(service);
+ }
}
-
for (Iterator iter = getNetworkConnectors().iterator();
iter.hasNext();) {
NetworkConnector connector = (NetworkConnector) iter.next();
@@ -417,8 +402,8 @@
JmsConnector connector = (JmsConnector) iter.next();
stopper.stop(connector);
}
+
for (Iterator iter = getTransportConnectors().iterator();
iter.hasNext();) {
-
TransportConnector connector = (TransportConnector) iter.next();
stopper.stop(connector);
}
@@ -658,6 +643,34 @@
this.jmsBridgeConnectors=jmsConnectors;
}
+ public Service[] getServices() {
+ return services;
+ }
+
+ /**
+ * Sets the services associated with this broker such as a [EMAIL
PROTECTED] MasterConnector}
+ */
+ public void setServices(Service[] services) {
+ this.services = services;
+ }
+
+ /**
+ * Adds a new service so that it will be started as part of the broker
lifecycle
+ */
+ public void addService(Service service) {
+ if (services == null) {
+ services = new Service[] { service };
+ }
+ else {
+ int length = services.length;
+ Service[] temp = new Service[length + 1];
+ System.arraycopy(services, 1, temp, 1, length);
+ temp[length] = service;
+ services = temp;
+ }
+ }
+
+
public boolean isUseLoggingForShutdownErrors() {
return useLoggingForShutdownErrors;
}
@@ -903,7 +916,14 @@
addJmsConnector(jmsBridgeConnectors[i]);
}
}
-
+ if (masterConnectorURI != null) {
+ if (masterConnector != null) {
+ throw new IllegalStateException("Cannot specify
masterConnectorURI when a masterConnector is already registered via the
services property");
+ }
+ else {
+ addService(new MasterConnector(masterConnectorURI));
+ }
+ }
}
protected void registerConnectorMBean(TransportConnector connector,
ObjectName objectName) throws IOException, URISyntaxException {
@@ -1269,6 +1289,14 @@
JmsConnector connector = (JmsConnector) iter.next();
connector.start();
}
+
+ if (services != null) {
+ for (int i = 0; i < services.length; i++) {
+ Service service = services[i];
+ configureService(service);
+ service.start();
+ }
+ }
}
}
@@ -1303,6 +1331,9 @@
if (service instanceof BrokerServiceAware) {
BrokerServiceAware serviceAware = (BrokerServiceAware) service;
serviceAware.setBrokerService(this);
+ }
+ if (service instanceof MasterConnector) {
+ masterConnector = (MasterConnector) service;
}
}
}
Modified:
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/ft/MasterConnector.java
URL:
http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/ft/MasterConnector.java?rev=432517&r1=432516&r2=432517&view=diff
==============================================================================
---
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/ft/MasterConnector.java
(original)
+++
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/ft/MasterConnector.java
Fri Aug 18 01:30:40 2006
@@ -19,8 +19,12 @@
import java.io.IOException;
import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.List;
+
import org.apache.activemq.Service;
import org.apache.activemq.broker.BrokerService;
+import org.apache.activemq.broker.BrokerServiceAware;
import org.apache.activemq.broker.TransportConnector;
import org.apache.activemq.command.BrokerInfo;
import org.apache.activemq.command.Command;
@@ -43,80 +47,103 @@
import edu.emory.mathcs.backport.java.util.concurrent.atomic.AtomicBoolean;
/**
- * Used by a Slave Broker to Connect to the Master
+ * Connects a Slave Broker to a Master when using <a
+ * href="http://incubator.apache.org/activemq/masterslave.html">Master
Slave</a>
+ * for High Availability of messages.
+ *
+ * @org.apache.xbean.XBean
*
* @version $Revision$
*/
-public class MasterConnector implements Service{
+public class MasterConnector implements Service, BrokerServiceAware {
- private static final Log log=LogFactory.getLog(MasterConnector.class);
+ private static final Log log = LogFactory.getLog(MasterConnector.class);
private BrokerService broker;
private URI remoteURI;
private URI localURI;
private Transport localBroker;
private Transport remoteBroker;
private TransportConnector connector;
- private AtomicBoolean masterActive=new AtomicBoolean(false);
- private AtomicBoolean started=new AtomicBoolean(false);
- private final IdGenerator idGenerator=new IdGenerator();
+ private AtomicBoolean masterActive = new AtomicBoolean(false);
+ private AtomicBoolean started = new AtomicBoolean(false);
+ private final IdGenerator idGenerator = new IdGenerator();
private String userName;
private String password;
+ private ConnectionInfo connectionInfo;
+ private SessionInfo sessionInfo;
+ private ProducerInfo producerInfo;
- ConnectionInfo connectionInfo;
- SessionInfo sessionInfo;
- ProducerInfo producerInfo;
+ public MasterConnector() {
+ }
+
+ public MasterConnector(String remoteUri) throws URISyntaxException {
+ remoteURI = new URI(remoteUri);
+ }
- public MasterConnector(BrokerService broker,TransportConnector connector){
- this.broker=broker;
- this.connector=connector;
+ public void setBrokerService(BrokerService broker) {
+ this.broker = broker;
+ if (localURI == null) {
+ localURI = broker.getVmConnectorURI();
+ }
+ if (connector == null) {
+ List transportConnectors = broker.getTransportConnectors();
+ if (!transportConnectors.isEmpty()) {
+ connector = (TransportConnector) transportConnectors.get(0);
+ }
+ }
}
- public boolean isSlave(){
+ public boolean isSlave() {
return masterActive.get();
}
- public void start() throws Exception{
- if( !started.compareAndSet(false, true) ) {
+ public void start() throws Exception {
+ if (!started.compareAndSet(false, true)) {
return;
}
-
- localBroker=TransportFactory.connect(localURI);
- remoteBroker=TransportFactory.connect(remoteURI);
- log.info("Starting a network connection between "+localBroker+" and
"+remoteBroker+" has been established.");
+ if (remoteURI == null) {
+ throw new IllegalArgumentException("You must specify a remoteURI");
+ }
+ localBroker = TransportFactory.connect(localURI);
+ remoteBroker = TransportFactory.connect(remoteURI);
+ log.info("Starting a network connection between " + localBroker + "
and " + remoteBroker + " has been established.");
- localBroker.setTransportListener(new DefaultTransportListener(){
- public void onCommand(Command command){
+ localBroker.setTransportListener(new DefaultTransportListener() {
+ public void onCommand(Command command) {
}
- public void onException(IOException error){
- if( started.get() ) {
+
+ public void onException(IOException error) {
+ if (started.get()) {
serviceLocalException(error);
}
}
});
- remoteBroker.setTransportListener(new DefaultTransportListener(){
- public void onCommand(Command command){
- if( started.get() ) {
+ remoteBroker.setTransportListener(new DefaultTransportListener() {
+ public void onCommand(Command command) {
+ if (started.get()) {
serviceRemoteCommand(command);
}
}
- public void onException(IOException error){
- if( started.get() ) {
+
+ public void onException(IOException error) {
+ if (started.get()) {
serviceRemoteException(error);
}
}
});
masterActive.set(true);
- Thread thead=new Thread(){
- public void run(){
- try{
+ Thread thead = new Thread() {
+ public void run() {
+ try {
localBroker.start();
remoteBroker.start();
startBridge();
- }catch(Exception e){
+ }
+ catch (Exception e) {
masterActive.set(false);
- log.error("Failed to start network bridge: "+e,e);
+ log.error("Failed to start network bridge: " + e, e);
}
}
};
@@ -124,105 +151,109 @@
}
- protected void startBridge() throws Exception{
-
- connectionInfo=new ConnectionInfo();
+ protected void startBridge() throws Exception {
+ connectionInfo = new ConnectionInfo();
connectionInfo.setConnectionId(new
ConnectionId(idGenerator.generateId()));
connectionInfo.setClientId(idGenerator.generateId());
connectionInfo.setUserName(userName);
connectionInfo.setPassword(password);
localBroker.oneway(connectionInfo);
- ConnectionInfo remoteInfo=new ConnectionInfo();
+ ConnectionInfo remoteInfo = new ConnectionInfo();
connectionInfo.copy(remoteInfo);
remoteInfo.setBrokerMasterConnector(true);
remoteBroker.oneway(connectionInfo);
- sessionInfo=new SessionInfo(connectionInfo,1);
+ sessionInfo = new SessionInfo(connectionInfo, 1);
localBroker.oneway(sessionInfo);
remoteBroker.oneway(sessionInfo);
- producerInfo=new ProducerInfo(sessionInfo,1);
+ producerInfo = new ProducerInfo(sessionInfo, 1);
producerInfo.setResponseRequired(false);
remoteBroker.oneway(producerInfo);
- BrokerInfo brokerInfo=null;
- if (connector!=null){
+ BrokerInfo brokerInfo = null;
+ if (connector != null) {
- brokerInfo=connector.getBrokerInfo();
- }else{
- brokerInfo=new BrokerInfo();
+ brokerInfo = connector.getBrokerInfo();
+ }
+ else {
+ brokerInfo = new BrokerInfo();
}
brokerInfo.setBrokerName(broker.getBrokerName());
brokerInfo.setPeerBrokerInfos(broker.getBroker().getPeerBrokerInfos());
brokerInfo.setSlaveBroker(true);
remoteBroker.oneway(brokerInfo);
- log.info("Slave connection between "+localBroker+" and
"+remoteBroker+" has been established.");
+ log.info("Slave connection between " + localBroker + " and " +
remoteBroker + " has been established.");
}
- public void stop() throws Exception{
- if( !started.compareAndSet(true, false) ) {
+ public void stop() throws Exception {
+ if (!started.compareAndSet(true, false)) {
return;
}
masterActive.set(false);
- try{
-// if (connectionInfo!=null){
-// localBroker.request(connectionInfo.createRemoveCommand());
-// }
-// localBroker.setTransportListener(null);
-// remoteBroker.setTransportListener(null);
+ try {
+ // if (connectionInfo!=null){
+ // localBroker.request(connectionInfo.createRemoveCommand());
+ // }
+ // localBroker.setTransportListener(null);
+ // remoteBroker.setTransportListener(null);
remoteBroker.oneway(new ShutdownInfo());
localBroker.oneway(new ShutdownInfo());
- }catch(IOException e){
- log.debug("Caught exception stopping",e);
- }finally{
- ServiceStopper ss=new ServiceStopper();
+ }
+ catch (IOException e) {
+ log.debug("Caught exception stopping", e);
+ }
+ finally {
+ ServiceStopper ss = new ServiceStopper();
ss.stop(localBroker);
ss.stop(remoteBroker);
ss.throwFirstException();
}
}
- protected void serviceRemoteException(IOException error){
- log.error("Network connection between "+localBroker+" and
"+remoteBroker+" shutdown: "+error.getMessage(),error);
+ protected void serviceRemoteException(IOException error) {
+ log.error("Network connection between " + localBroker + " and " +
remoteBroker + " shutdown: " + error.getMessage(), error);
shutDown();
}
- protected void serviceRemoteCommand(Command command){
- try{
- if (command.isMessageDispatch()){
- MessageDispatch md=(MessageDispatch)command;
- command=md.getMessage();
+ protected void serviceRemoteCommand(Command command) {
+ try {
+ if (command.isMessageDispatch()) {
+ MessageDispatch md = (MessageDispatch) command;
+ command = md.getMessage();
}
- if (command.getDataStructureType()==CommandTypes.SHUTDOWN_INFO){
+ if (command.getDataStructureType() == CommandTypes.SHUTDOWN_INFO) {
log.warn("The Master has shutdown");
shutDown();
- }else{
+ }
+ else {
boolean responseRequired = command.isResponseRequired();
int commandId = command.getCommandId();
localBroker.oneway(command);
- if (responseRequired){
- Response response=new Response();
+ if (responseRequired) {
+ Response response = new Response();
response.setCorrelationId(commandId);
remoteBroker.oneway(response);
}
}
- }catch(IOException e){
+ }
+ catch (IOException e) {
serviceRemoteException(e);
}
}
- protected void serviceLocalException(Throwable error){
- log.info("Network connection between "+localBroker+" and
"+remoteBroker+" shutdown: "+error.getMessage(),error);
+ protected void serviceLocalException(Throwable error) {
+ log.info("Network connection between " + localBroker + " and " +
remoteBroker + " shutdown: " + error.getMessage(), error);
ServiceSupport.dispose(this);
}
/**
* @return Returns the localURI.
*/
- public URI getLocalURI(){
+ public URI getLocalURI() {
return localURI;
}
@@ -230,14 +261,14 @@
* @param localURI
* The localURI to set.
*/
- public void setLocalURI(URI localURI){
- this.localURI=localURI;
+ public void setLocalURI(URI localURI) {
+ this.localURI = localURI;
}
/**
* @return Returns the remoteURI.
*/
- public URI getRemoteURI(){
+ public URI getRemoteURI() {
return remoteURI;
}
@@ -245,43 +276,44 @@
* @param remoteURI
* The remoteURI to set.
*/
- public void setRemoteURI(URI remoteURI){
- this.remoteURI=remoteURI;
+ public void setRemoteURI(URI remoteURI) {
+ this.remoteURI = remoteURI;
}
-
+
/**
* @return Returns the password.
*/
- public String getPassword(){
+ public String getPassword() {
return password;
}
/**
- * @param password The password to set.
+ * @param password
+ * The password to set.
*/
- public void setPassword(String password){
- this.password=password;
+ public void setPassword(String password) {
+ this.password = password;
}
/**
* @return Returns the userName.
*/
- public String getUserName(){
+ public String getUserName() {
return userName;
}
/**
- * @param userName The userName to set.
+ * @param userName
+ * The userName to set.
*/
- public void setUserName(String userName){
- this.userName=userName;
+ public void setUserName(String userName) {
+ this.userName = userName;
}
- private void shutDown(){
+ private void shutDown() {
masterActive.set(false);
broker.masterFailed();
ServiceSupport.dispose(this);
}
-
}
Modified:
incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/ft/QueueMasterSlaveTest.java
URL:
http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/ft/QueueMasterSlaveTest.java?rev=432517&r1=432516&r2=432517&view=diff
==============================================================================
---
incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/ft/QueueMasterSlaveTest.java
(original)
+++
incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/ft/QueueMasterSlaveTest.java
Fri Aug 18 01:30:40 2006
@@ -40,10 +40,10 @@
protected void setUp() throws Exception{
failureCount = super.messageCount/2;
super.topic = isTopic();
- BrokerFactoryBean brokerFactory=new BrokerFactoryBean(new
ClassPathResource("org/apache/activemq/broker/ft/master.xml"));
+ BrokerFactoryBean brokerFactory=new BrokerFactoryBean(new
ClassPathResource(getMasterXml()));
brokerFactory.afterPropertiesSet();
master=brokerFactory.getBroker();
- brokerFactory=new BrokerFactoryBean(new
ClassPathResource("org/apache/activemq/broker/ft/slave.xml"));
+ brokerFactory=new BrokerFactoryBean(new
ClassPathResource(getSlaveXml()));
brokerFactory.afterPropertiesSet();
slave=brokerFactory.getBroker();
master.start();
@@ -52,6 +52,14 @@
Thread.sleep(1000);
super.setUp();
+ }
+
+ protected String getSlaveXml() {
+ return "org/apache/activemq/broker/ft/slave.xml";
+ }
+
+ protected String getMasterXml() {
+ return "org/apache/activemq/broker/ft/master.xml";
}
protected void tearDown() throws Exception{
Added:
incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/ft/QueueMasterSlaveUsingMasterConnectorElementTest.java
URL:
http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/ft/QueueMasterSlaveUsingMasterConnectorElementTest.java?rev=432517&view=auto
==============================================================================
---
incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/ft/QueueMasterSlaveUsingMasterConnectorElementTest.java
(added)
+++
incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/ft/QueueMasterSlaveUsingMasterConnectorElementTest.java
Fri Aug 18 01:30:40 2006
@@ -0,0 +1,30 @@
+/**
+ *
+ * Copyright 2005-2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.activemq.broker.ft;
+
+/**
+ * Lets test using a <masterConnector/> element instead of the old
masterConnectorURI attribute
+ *
+ * @version $Revision$
+ */
+public class QueueMasterSlaveUsingMasterConnectorElementTest extends
QueueMasterSlaveTest {
+
+ protected String getSlaveXml() {
+ return "org/apache/activemq/broker/ft/slave2.xml";
+ }
+
+}
Propchange:
incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/ft/QueueMasterSlaveUsingMasterConnectorElementTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/ft/QueueMasterSlaveUsingMasterConnectorElementTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange:
incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/broker/ft/QueueMasterSlaveUsingMasterConnectorElementTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
incubator/activemq/trunk/activemq-core/src/test/resources/org/apache/activemq/broker/ft/slave2.xml
URL:
http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-core/src/test/resources/org/apache/activemq/broker/ft/slave2.xml?rev=432517&view=auto
==============================================================================
---
incubator/activemq/trunk/activemq-core/src/test/resources/org/apache/activemq/broker/ft/slave2.xml
(added)
+++
incubator/activemq/trunk/activemq-core/src/test/resources/org/apache/activemq/broker/ft/slave2.xml
Fri Aug 18 01:30:40 2006
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<beans>
+ <bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
+
+ <broker brokerName="slave" persistent="false" useJmx="false"
deleteAllMessagesOnStartup="true" xmlns="http://activemq.org/config/1.0">
+
+ <transportConnectors>
+ <transportConnector uri="tcp://localhost:62002"/>
+ </transportConnectors>
+
+ <services>
+ <masterConnector remoteURI= "tcp://localhost:62001" userName="James"
password="Cheese"/>
+ </services>
+
+ <persistenceAdapter>
+ <kahaPersistenceAdapter dir = "${basedir}/target/activemq-data/slave"/>
+ </persistenceAdapter>
+ </broker>
+
+</beans>
Propchange:
incubator/activemq/trunk/activemq-core/src/test/resources/org/apache/activemq/broker/ft/slave2.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/activemq/trunk/activemq-core/src/test/resources/org/apache/activemq/broker/ft/slave2.xml
------------------------------------------------------------------------------
svn:executable = *
Propchange:
incubator/activemq/trunk/activemq-core/src/test/resources/org/apache/activemq/broker/ft/slave2.xml
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange:
incubator/activemq/trunk/activemq-core/src/test/resources/org/apache/activemq/broker/ft/slave2.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml