[ 
https://issues.apache.org/jira/browse/AMQ-2497?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12969229#action_12969229
 ] 

Jan Lievens commented on AMQ-2497:
----------------------------------

We have the same issue with a PostgreSQL database. It seems that the protected 
Connection in the DefaultDatabaseLocker becomes stale when the DB goes down but 
is still used whenever the keepAlive-method is called. Only at the start of the 
DefaultDatabaseLocker is the connection retrieved from the datasource (which in 
our case has a validationQuery) so the keepAlive catches any Exception while 
using the stale connection. When this happens the keepAlive returns a false 
which results in a stopBroker()-method call on the JDBCPersistenceAdapter.

Maybe it would be better to diversify the catch-statement in the 
keepAlive-method and whenever this specific Exception (in our case 
org.postgresql.util.PSQLException: FATAL: terminating connection due to 
administrator command) occurs (but any SQLException will do I think), take the 
necessary precautions: 
- stop all the transport-connectors so that no further messages are send into 
ActiveMQ
- schedule a different keepAlive that simply checks if the DB is up again 
         -> if up again: re-initialize the DefaultDatabaseLocker and start the 
transport-connectors again

I haven't come around implementing a patch to the 5.5-SNAPSHOT yet but I am 
willing to do so if my assumptions stated above are somewhat correct.

> Message broker won't come back when the databse goes offline and comes back 
> online
> ----------------------------------------------------------------------------------
>
>                 Key: AMQ-2497
>                 URL: https://issues.apache.org/jira/browse/AMQ-2497
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.3.0
>         Environment: MS SQL 2000,2005,2008
>            Reporter: hiskill
>            Priority: Blocker
>             Fix For: 5.5.0
>
>
> - deployed ActiveMQ 5.3.0 as RAR on JBoss
> - broker comes up fine
> - at some point database goes offline
> - broker can't communicate with database and shuts down
> - now database comes back online
> - borker will never come back again and will have to restart the JBoss 
> manually again to start the broker
> This will be a blocker for us to go to production as there is no availability 
> of broker when database goes offline and comes back.
> Here is my broker-config.xml, let me know if any configuration is missing :
> <beans xmlns="http://activemq.apache.org/schema/core";>
> <bean xmlns="" 
> class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
> <bean xmlns="" id="my-ds" class="org.apache.commons.dbcp.BasicDataSource" 
> destroy-method="close">
> <property name="driverClassName" 
> value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
> <property name="url" value="jdbc:sqlserver://mydb:1433;databaseName=myds"/>
> <property name="username" value="sql"/>
> <property name="password" value="sql"/>
> <property name="initialSize" value="10"/>
> <property name="poolPreparedStatements" value="true"/>
> </bean>
> <!-- shutdown hook is disabled as RAR classloader may be gone at shutdown -->
> <broker useJmx="true" brokerName="sample.broker1" useShutdownHook="false">
> <destinations>
> <topic physicalName="pocket" />
> </destinations>
> <managementContext>
> <!-- use appserver provided context instead of creating one,
> for jboss use: -Djboss.platform.mbeanserver -->
> <managementContext createConnector="false"/>
> </managementContext>
> <persistenceAdapter>
> <!-- <amqPersistenceAdapter syncOnWrite="false" 
> directory="${jboss.server.data.dir}/activemq" maxFileLength="20 mb"/> -->
> <!-- <journaledJDBC journalLogFiles="5" 
> dataDirectory="${jboss.server.data.dir}/activemq"/> -->
> <!-- To use a different datasource, use th following syntax : -->
> <!-- <kahaPersistenceAdapter directory="${jboss.server.data.dir}/activemq" 
> maxDataFileLength="33554432"/> -->
> <journaledJDBC journalLogFiles="5" 
> dataDirectory="${jboss.server.data.dir}/activemq" dataSource="#my-ds" 
> useDatabaseLock="false" />
> </persistenceAdapter>
> <transportConnectors>
> <transportConnector name="sample.broker1" uri="tcp://localhost:3030" 
> discoveryUri="multicast://default"/>
> </transportConnectors>
> </broker>
> </beans>

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to