Hi all,

I temporarily fixed it by

SimpleAMQQueue.java

public void bind(Exchange exchange, AMQShortString routingKey, FieldTable arguments) throws AMQException
   {
       exchange.registerQueue(routingKey, this, arguments);
       ---if (isDurable() && exchange.isDurable())
+++if (isDurable() && exchange.isDurable() && !exchange.isBound(routingKey, arguments, this))
       {
_virtualHost.getMessageStore().bindQueue(exchange, routingKey, this, arguments);
       }

       _bindings.addBinding(routingKey, arguments, exchange);
   }


Regards,
Stephen

----- Original Message ----- From: "Stephen Lau" <[email protected]>
To: <[email protected]>
Sent: Monday, December 29, 2008 3:59 PM
Subject: Error in startup with durable vhost


Hi all,

I am running Qpid Trunk in Windows Vista.

I have config 3 queues to a virtualhost, and start Qpid with the virtual host using derby as persistence store.

When Qpid first starts up normally, I press Ctrl-C to terminate Qpid, then start Qpid again,

then I have the following error, it seems that after recoverExchange(), data in table QPID_BINDINGS does not clear, then it builds queues again and insert duplicate values.

2008-12-29 15:54:22,136 INFO [main] server.Main (Main.java:274) - Starting Qpid Broker 1.0-incubating-M4 build: 727972M Error initialising message broker: org.apache.qpid.AMQException: Error writing binding for AMQQueue with name admin_in to exchange <<default>> to data base: java.sql.SQLIntegrityConstraintViolationException: The statement was aborted because it would have caused a duplicate key value in a unique or p rimary key constraint or unique index identified by 'SQL081229155407620' defined on 'QPID_BINDINGS'. 2008-12-29 15:54:22,319 ERROR [main] server.Main (Main.java:213) - Error initialising message broker: org.apache.qpid.AMQException: Error writing bind ing for AMQQueue with name admin_in to exchange <<default>> to database: java.sql.SQLIntegrityConstraintViolationException: The statement was aborted because it would have caused a duplicate key value in a unique or primary key constraint or unique index identified by 'SQL081229155407620' defined on
'QPID_BINDINGS'.
org.apache.qpid.AMQException: Error writing binding for AMQQueue with name admin_in to exchange <<default>> to database: java.sql.SQLIntegrityConstrai ntViolationException: The statement was aborted because it would have caused a duplicate key value in a unique or primary key constraint or unique ind
ex identified by 'SQL081229155407620' defined on 'QPID_BINDINGS'.
at org.apache.qpid.server.store.DerbyMessageStore.bindQueue(DerbyMessageStore.java:662) at org.apache.qpid.server.queue.SimpleAMQQueue.bind(SimpleAMQQueue.java:213) at org.apache.qpid.server.configuration.VirtualHostConfiguration.configureQueue(VirtualHostConfiguration.java:253) at org.apache.qpid.server.configuration.VirtualHostConfiguration.configureVirtualHost(VirtualHostConfiguration.java:91) at org.apache.qpid.server.configuration.VirtualHostConfiguration.performBindings(VirtualHostConfiguration.java:274)
       at org.apache.qpid.server.Main.setupVirtualHosts(Main.java:370)
       at org.apache.qpid.server.Main.startup(Main.java:326)
       at org.apache.qpid.server.Main.execute(Main.java:195)
       at org.apache.qpid.server.Main.<init>(Main.java:95)
       at org.apache.qpid.server.Main.main(Main.java:487)
Caused by: java.sql.SQLIntegrityConstraintViolationException: The statement was aborted because it would have caused a duplicate key value in a unique or primary key constraint or unique index identified by 'SQL081229155407620' defined on 'QPID_BINDINGS'. at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source) at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source) at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source) at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source) at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source) at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source) at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown Source) at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(Unknown Source) at org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeUpdate(Unknown Source) at org.apache.qpid.server.store.DerbyMessageStore.bindQueue(DerbyMessageStore.java:656)
       ... 9 more
Caused by: java.sql.SQLException: The statement was aborted because it would have caused a duplicate key value in a unique or primary key constraint o r unique index identified by 'SQL081229155407620' defined on 'QPID_BINDINGS'. at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source) at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source)
       ... 19 more
Caused by: ERROR 23505: The statement was aborted because it would have caused a duplicate key value in a unique or primary key constraint or unique i
ndex identified by 'SQL081229155407620' defined on 'QPID_BINDINGS'.
at org.apache.derby.iapi.error.StandardException.newException(Unknown Source) at org.apache.derby.impl.sql.execute.IndexChanger.insertAndCheckDups(Unknown Source) at org.apache.derby.impl.sql.execute.IndexChanger.doInsert(Unknown Source) at org.apache.derby.impl.sql.execute.IndexChanger.insert(Unknown Source) at org.apache.derby.impl.sql.execute.IndexSetChanger.insert(Unknown Source) at org.apache.derby.impl.sql.execute.RowChangerImpl.insertRow(Unknown Source) at org.apache.derby.impl.sql.execute.InsertResultSet.normalInsertCore(Unknown Source) at org.apache.derby.impl.sql.execute.InsertResultSet.open(Unknown Source) at org.apache.derby.impl.sql.GenericPreparedStatement.execute(Unknown Source)
       ... 13 more


Regards,

Stephen Lau

Reply via email to