After some more debugging, I think that the ACTIVEMQ_LOCK.BROKER_NAME column is 
simply not maintained. I decided to dig deeper after downgrading to 
mysql-connector-java-5.0.8 did not change the behavior. 

Turning on the MySQL query log and searching for all modifications of 
ACTIVEMQ_LOCK reveal the following:

grep ACTIVEMQ_LOCK /tmp/mysql_query.log 

3 Query       CREATE TABLE ACTIVEMQ_LOCK( ID BIGINT NOT NULL, TIME BIGINT, 
BROKER_NAME VARCHAR(250), PRIMARY KEY (ID) ) ENGINE=INNODB
3 Query       INSERT INTO ACTIVEMQ_LOCK(ID) VALUES (1)
3 Query       SELECT * FROM ACTIVEMQ_LOCK FOR UPDATE
3 Query       UPDATE ACTIVEMQ_LOCK SET TIME = 1292883941305 WHERE ID = 1
3 Query       UPDATE ACTIVEMQ_LOCK SET TIME = 1292883971306 WHERE ID = 1
3 Query       UPDATE ACTIVEMQ_LOCK SET TIME = 1292884001308 WHERE ID = 1
3 Query       UPDATE ACTIVEMQ_LOCK SET TIME = 1292884031306 WHERE ID = 1
3 Query       UPDATE ACTIVEMQ_LOCK SET TIME = 1292884061307 WHERE ID = 1

It never attempts to set the BROKER_NAME column. This is corroborated by the 
SQL statement in the source code in org.apache.activemq.store.jdbc, 
Statements::getLockUpdateStatement()

https://svn.apache.org/repos/asf/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/jdbc/Statements.java


It would seem to me that at the point it executes the UPDATE ACTIVEMQ_LOCK, it 
should also be seting the BROKER_NAME column. 

   public String getLockUpdateStatement() {
        if (lockUpdateStatement == null) {
            lockUpdateStatement = "UPDATE " + getFullLockTableName() + " SET 
TIME = ? WHERE ID = 1";
        }
        return lockUpdateStatement;
    }

Can any one confirm these conclusions or am I jumping the gun here? Perhaps 
BROKER_NAME in the ACTIVEMQ_LOCKS table does not mean what I think it should 
mean. 


I apologize if this message should be posted to the ActiveMQ developers list. 
Please let me know if it would be best to repost it there.



Thanks!



Erik Osterman
<e...@osterman.com>
http://www.osterman.com





On Dec 17, 2010, at 5:53 PM, Erik Osterman wrote:

> I've recently setup ActiveMQ 5.4.2 in a JDBC Master-Slave sandbox 
> configuration on localhost (CentOS 5.4 i686) with Java(TM) SE Runtime 
> Environment (build 1.6.0_14-b08). The JDBC driver is 
> mysql-connector-java-5.1.14-bin.jar. The database is 
> mysql-server-5.0.77-4.el5_4.2.
> 
> It becomes master, but never registers it's brokerName in the database. I can 
> submit persistent messages and the successfully get logged in ACTIVEMQ_MSGS. 
> The entire schema was created automatically by ActiveMQ. 
> 
> 2010-12-17 20:34:51,793 | INFO  | Attempting to acquire the exclusive lock to 
> become the Master broker | 
> org.apache.activemq.store.jdbc.DefaultDatabaseLocker | main
> 2010-12-17 20:34:51,810 | INFO  | Becoming the master on dataSource: 
> org.apache.commons.dbcp.basicdatasou...@3b1f38 | 
> org.apache.activemq.store.jdbc.DefaultDatabaseLocker | main
> 
> mysql> select * from ACTIVEMQ_LOCK;
> +----+------+-------------+
> | ID | TIME | BROKER_NAME |
> +----+------+-------------+
> |  1 | NULL | NULL        | 
> +----+------+-------------+
> 1 row in set (0.00 sec)
> 
> mysql> select count(*) from ACTIVEMQ_MSGS;
> +----------+
> | count(*) |
> +----------+
> |     1000 | 
> +----------+
> 1 row in set (0.00 sec)
> 
> 
> The brokerName has been set in the running configuration for the <broker/>.
> <broker xmlns="http://activemq.apache.org/schema/core"; 
> brokerName="ec2-174-129-179-24.compute-1.amazonaws.com" 
> dataDirectory="${activemq.base}/data" destroyApplicationContextOnStop="true" 
> persistent="true" useShutdownHook="false" useJmx="true">
> 
> I have also tried adding 
> -Dactivemq.hostname=ec2-174-129-179-24.compute-1.amazonaws.com to the init 
> script, but it doesn't have any affect either.
> 
> Complete configuration below.
> 
> Any input greatly appreciated!
> 
> 
> Erik Osterman
> <e...@osterman.com>
> http://www.osterman.com
> 
> 
> 
> 
> 
> <beans
>  xmlns="http://www.springframework.org/schema/beans";
>  xmlns:amq="http://activemq.apache.org/schema/core";
>  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>  xsi:schemaLocation="http://www.springframework.org/schema/beans 
> http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
>  http://activemq.apache.org/schema/core 
> http://activemq.apache.org/schema/core/activemq-core.xsd";>
>  <bean 
> class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
>    <property name="locations">
>      <value>file:${activemq.base}/conf/credentials.properties</value>
>    </property>      
>  </bean>
> 
>  <broker xmlns="http://activemq.apache.org/schema/core"; 
> brokerName="ec2-174-129-179-24.compute-1.amazonaws.com" 
> dataDirectory="${activemq.base}/data" destroyApplicationContextOnStop="true" 
> persistent="true" useShutdownHook="false" useJmx="true">
>    <managementContext>
>      <managementContext createConnector="false"/>
>    </managementContext>
> 
>    <networkConnectors>
>      <networkConnector uri="multicast://default"/>
>    </networkConnectors>
> 
> 
>    <persistenceAdapter>
>      <jdbcPersistenceAdapter dataDirectory="${activemq.base}/data" 
> dataSource="#mysql-ds" />
>    </persistenceAdapter>
> 
>    <plugins>
>      <statisticsBrokerPlugin/>
>    </plugins>
> 
>    <systemUsage>
>      <systemUsage>
>        <memoryUsage>
>          <memoryUsage limit="20 mb"/>
>        </memoryUsage>
>        <storeUsage>
>          <storeUsage limit="1 gb"/>
>        </storeUsage>
>        <tempUsage>
>          <tempUsage limit="100 mb"/>
>        </tempUsage>
>      </systemUsage>
>    </systemUsage>
> 
>    <transportConnectors>
>      <!-- <transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/> -->
>      <transportConnector name="stomp" 
> uri="stomp://0.0.0.0:61612?transport.closeAsync=false"/> 
>      <transportConnector name="stomp+nio" 
> uri="stomp+nio://0.0.0.0:61613?transport.closeAsync=false"/> 
>    </transportConnectors>
> 
>  </broker>
> 
>  <import resource="jetty.xml"/>
> 
>  <bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" 
> destroy-method="close">
>    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
>    <property name="url" 
> value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/>
>    <property name="username" value="activemq"/>
>    <property name="password" value="activemq"/>
>    <property name="maxActive" value="200"/>
>    <property name="poolPreparedStatements" value="true"/>
>  </bean>
> 
> </beans>
> 
> 
> 
> 
> 

Reply via email to