You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by Carsten Krebs <ca...@gmx.de> on 2007/09/21 18:36:12 UTC

stale transaction using journaled jdbc and postgresql

Hi,

I have a curious problem, when running ActiveMQ 4.1.1 with a journaled jdbc
adapter using a PostgreSQL as long term persistence store. It looks like,
that ActiveMQ starts a transaction on the database an never commits it. At
present ActiveMQ is able to deliver almost all messages right after arrival,
so there is no need to store any messages in the PostgreSQL, the journal is
sufficient.
Is this the normal behaviour of ActiveMQ? or is there a way to configure
ActiveMQ to just start the transaction on demand and to commit it after some
time?

The problem of the very long running transaction is, that the transaction
locks a transaction id in the database and prevents the database from wiping
out dead rows (VACUUM). For the ActiveMQ schema it doesn't matter, but I
have some more heavily updated tables in other schemas, which needed to be
cleaned up periodically, but as long ActiveMQ doesn't commits the
transaction, the database have no chance to do so.


  Carsten

Below, the broker configuration used.

<beans>

	<!-- Allows us to use system properties as variables in this configuration
file -->
	<bean
	
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
/>

	<bean id="dataSource"
		class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="org.postgresql.Driver" />
		<property name="url" value="jdbc:postgresql://${db.host}:5432/gd" />
		<property name="defaultCatalog" value="gd" />
		<property name="username" value="activemq" />
		<property name="password" value="activemq" />
		<property name="maxActive" value="15" />
		<property name="initialSize" value="0" />
 		<property name="poolPreparedStatements" value="true" />
		<property name="maxWait" value="0" />
		<property name="defaultAutoCommit" value="false" />
		<property name="minIdle" value="0" />
		<property name="maxIdle" value="0" />
		<property name="timeBetweenEvictionRunsMillis" value="60000" />
		<property name="minEvictableIdleTimeMillis" value="600000" />
	</bean>

	<bean name="jdbcPersistenceAdapter"
		class="org.apache.activemq.store.jdbc.JDBCPersistenceAdapter">
		<property name="adapter">
			<bean
class="org.apache.activemq.store.jdbc.adapter.PostgresqlJDBCAdapter">
				<property name="batchStatments" value="true" />
			</bean>
		</property>
	</bean>
	<!-- 
		JMS Broker 
	-->
	<broker brokerName="jmsBroker" useJmx="true" persistent="true"
		xmlns="http://activemq.org/config/1.0">
		<!-- Use the following to configure how ActiveMQ is exposed in JMX -->
		<managementContext>
			<managementContext connectorPort="1616"
				jmxDomainName="org.apache.activemq" />
		</managementContext>

		<persistenceAdapter>
			<journaledJDBC journalLogFiles="10"
				jdbcAdapter="#jdbcPersistenceAdapter"
				dataSource="#dataSource" />
		</persistenceAdapter>
		
		<transportConnectors>
			<transportConnector name="openwire"
				uri="tcp://${activemq.host}:61616" />
			<transportConnector name="ssl" uri="ssl://${activemq.host}:61617" />
			<transportConnector name="stomp"
				uri="stomp://${activemq.host}:61613" />
		</transportConnectors>

		<networkConnectors>
			<networkConnector uri="multicast://default" />
		</networkConnectors>

	</broker>
</beans>


-- 
View this message in context: http://www.nabble.com/stale-transaction-using-journaled-jdbc-and-postgresql-tf4497201s2354.html#a12825214
Sent from the ActiveMQ - User mailing list archive at Nabble.com.