违反了ActiveMQ唯一约束

违反了ActiveMQ唯一约束,activemq,Activemq,我在10000条消息的负载测试中看到了一些独特的约束冲突(10000条消息中只有8条受到影响)。我想知道我是否需要在DBCP数据源设置或活动MQ设置中更改它。错误是 org.springframework.jms.UncategorizedJmsException: Uncategorized exception occured during JMS processing; nested exception is javax.jms.JMSException: ORA-00001: unique

我在10000条消息的负载测试中看到了一些独特的约束冲突(10000条消息中只有8条受到影响)。我想知道我是否需要在DBCP数据源设置或活动MQ设置中更改它。错误是

org.springframework.jms.UncategorizedJmsException: Uncategorized exception occured during
JMS processing; nested exception is javax.jms.JMSException:
ORA-00001: unique constraint     (WEBSVC.SYS_C00181594) violated
我查找了这个约束,并将其跟踪到ACTIVEMQ_MSGS一个表,我们让ACTIVEMQ在Oracle中创建和维护它自己。e、 g

select * from all_constraints
where constraint_name = 'SYS_C00181594'

OWNER   CONSTRAINT_NAME CONSTRAINT_TYPE TABLE_NAME      SEARCH_CONDITION    R_OWNER R_CONSTRAINT_NAME   DELETE_RULE STATUS  DEFERRABLE      DEFERRED    VALIDATED   GENERATED       BAD RELY    LAST_CHANGE             INDEX_OWNER INDEX_NAME      INVALID VIEW_RELATED
------  --------------- --------------- -------------   ----------------    ------- -----------------   ----------- ------- --------------  ---------   ---------   --------------  --- ----    --------------------    ----------- -------------   ------- ------------
WEBSVC  SYS_C00181594   P               ACTIVEMQ_MSGS                                               ENABLED NOT DEFERRABLE  IMMEDIATE   VALIDATED   GENERATED NAME              22-Mar-2013 16:16:22                SYS_C00181594                       
当我在队列上放置消息时,会发生这种情况,随后会出现完整的堆栈跟踪

原因:java.io.IOException:ORA-00001:违反了唯一约束(WEBSVC.SYS_C00181594)

原因:java.sql.BatchUpdateException:ORA-00001:违反了唯一约束(webvc.SYS_C00181594)

目前我有一个相当偏执的DBCP源,即

<bean id="basicOracleDataSource" class="org.apache.commons.dbcp.BasicDataSource"
      abstract="true" destroy-method="close">
    <property name="driverClassName" value="oracle.jdbc.OracleDriver" />
    <property name="poolPreparedStatements" value="true"/>
    <property name="initialSize" value="5"/>
    <property name="maxActive" value="30"/>
    <property name="maxWait" value="60000"/> <!--  default indefinitely -->
    <property name="timeBetweenEvictionRunsMillis" value="30000" />  

    <!-- verify connections in the pool to stop connection closed errors -->
    <property name="logAbandoned" value="false"/>       <!-- default false -->
    <property name="maxIdle" value="5"/>                <!-- default 8, minIdle defaults to 0 which is OK -->
    <property name="numTestsPerEvictionRun" value="4"/> <!-- default 3 -->
    <property name="removeAbandoned" value="true"/>     <!-- default false -->
    <property name="removeAbandonedTimeout" value="60"/><!--  default 300 seconds -->
    <property name="testOnBorrow" value="true"/>        <!-- default false -->
    <property name="testOnReturn" value="true"/>        <!-- default false -->
    <property name="testWhileIdle" value="true"/>       <!-- default false -->
    <property name="validationQuery" value="SELECT 1 FROM dual"/>   
</bean>

以防万一,这也是我的JMS模板

<!-- Spring JMS Template -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory">
        <!-- lets wrap in a pool to avoid creating a connection per send -->
        <bean class="org.springframework.jms.connection.SingleConnectionFactory">
            <property name="targetConnectionFactory">
                <ref local="jmsFactory" />
            </property>
        </bean>
    </property>
</bean>

<bean id="basicOracleDataSource" class="org.apache.commons.dbcp.BasicDataSource"
      abstract="true" destroy-method="close">
    <property name="driverClassName" value="oracle.jdbc.OracleDriver" />
    <property name="poolPreparedStatements" value="true"/>
    <property name="initialSize" value="5"/>
    <property name="maxActive" value="30"/>
    <property name="maxWait" value="60000"/> <!--  default indefinitely -->
    <property name="timeBetweenEvictionRunsMillis" value="30000" />  

    <!-- verify connections in the pool to stop connection closed errors -->
    <property name="logAbandoned" value="false"/>       <!-- default false -->
    <property name="maxIdle" value="5"/>                <!-- default 8, minIdle defaults to 0 which is OK -->
    <property name="numTestsPerEvictionRun" value="4"/> <!-- default 3 -->
    <property name="removeAbandoned" value="true"/>     <!-- default false -->
    <property name="removeAbandonedTimeout" value="60"/><!--  default 300 seconds -->
    <property name="testOnBorrow" value="true"/>        <!-- default false -->
    <property name="testOnReturn" value="true"/>        <!-- default false -->
    <property name="testWhileIdle" value="true"/>       <!-- default false -->
    <property name="validationQuery" value="SELECT 1 FROM dual"/>   
</bean>
<!-- Spring JMS Template -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory">
        <!-- lets wrap in a pool to avoid creating a connection per send -->
        <bean class="org.springframework.jms.connection.SingleConnectionFactory">
            <property name="targetConnectionFactory">
                <ref local="jmsFactory" />
            </property>
        </bean>
    </property>
</bean>