You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by "Suchitha Koneru (sukoneru)" <su...@cisco.com> on 2007/07/23 21:57:06 UTC
active mq broker start up issue.
Hello Active MQ users ,
We use Tomcat server 5.5.20 with two web applications , namely Webapp A
and Web App. B.
The inter web app communication is via the active mq broker. The active
mq version is 4..0.2 .
As of now, the web app A is always started before B. Hence the broker is
specified as a Servlet Context Listener in web.xml of the web app A.
The problem we have is to start the broker irrespective of the order of
initialization of web apps .
We would be adding a new web app called Webapp C . In this scenario, I
will not have a control on the order in which the web apps are
initialized by Tomcat. The code to start the broker , takes into
account, that if the broker port is already occupied, it will attempt
to start the broker at a randomly generated port for 5 times.
Tomcat does not give us the flexibility of starting the web apps in
particular order. The web.xml of Webapp A is as follows
<!-- starting active mq broker -->
<listener>
<listener-class>com.messaging.ActiveMQBrokerStartListener</listener-clas
s>
</listener>
<!-- starting the rest of services in web app A -->
<listener>
<listener-class>
com.context.ApplicationInitListener
</listener-class>
</listener>
// code for ActiveMQBrokerStartListener
BrokerService broker = new BrokerService();
int counter = 0;
Properties activeMQProperties = new Properties() ;
int portNum ;
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("Starting ActiveMQ Broker Service...");
//for the broker URI , do not have leading or trailing spaces
File dir = new File("../../activemq");
Logger logger = Logger.getLogger(ActiveMQBrokerStartListener.class);
dir.mkdir();
InetAddress ipAdress ;
broker.setDataDirectory(dir);
try{
ipAdress = InetAddress.getLocalHost();
}catch(UnknownHostException e){
logger.error("error in obtaining Local Host address "+e.getMessage());
return ;
}
// getting the port number from the active mq properties file
try{
activeMQProperties.load(new
FileInputStream(MessagingConstants.ACTIVEMQ_PORT_FILE_PATH ));
portNum =
Integer.parseInt(activeMQProperties.getProperty(MessagingConstants.Activ
eMQPort,"-1"));
if(portNum == -1){
logger.error("active mq port not configured via the proeprties file
using the default port value as
"+MessagingConstants.DEFAULT_PORT_VALUE);
portNum = MessagingConstants.DEFAULT_PORT_VALUE ;
}
}catch(Exception e){
logger.error("exception while getting port properties "+e.getMessage());
}
while(counter < 5){ // 5 attempts to start the broker
try{
// broker url is
tcp://171.69.155.137:61716?trace=true&wireFormat.maxInactivityDuration=-
1
broker.addConnector(MessagingConstants.CONNECTOR+
ipAdress.getHostAddress()+":"+portNum+MessagingConstants.ACTIVEMQ_URL_SU
FFIX);
broker.start();
logger.info("Active MQ Broker Started at local host port "+ portNum);
break;
}catch(Exception e){
// System.out.println(e.getMessage());
if(e instanceof java.net.BindException){ //broker port is already
occupied by another process, try to start the broker at different
// port number
portNum = getRandomPortNumber() ;
logger.info("trying to start the broker at port "+portNum);
counter ++;
}else{
logger.error("exception while starting broker : ",e);
e.printStackTrace();
}
}
}
Please let me know, if there is a way to ensure that the broker is
started first , irrespective of the order of initilization of web apps.
I'll also do a google search on this issue.
thanks,
Suchitha.