question:

After I send message, I recieve it, then email this message using
processMsgInfo() function.
after that, I disconnect the network,then send message,processMsgInfo has
error,because it can not connect email server, the system gives me
information that can not send. but the message i can not find it in
database. why? 
I think it should be in database, when I reconnect network, the message
should be resend. 
Is there some thing wrong with my configuration. 


environment: activemq5.0, tomcat6, spring2.05. mysql5(localhost database)

applicationContext-jmx.xml 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans";
        xmlns:amq="http://activemq.org/config/1.0";
        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.org/config/1.0
http://activemq.apache.org/schema/core/activemq-core-5.0.0.xsd";>

        <bean id="connectionFactory"
class="org.apache.activemq.ActiveMQConnectionFactory">
                <property name="brokerURL" value="vm://localhost" />
                <property name="redeliveryPolicy">
                        <bean class="org.apache.activemq.RedeliveryPolicy">
                                <property name="backOffMultiplier" value="2" /> 
                                <property name="initialRedeliveryDelay" 
value="10" /> 
                                <property name="maximumRedeliveries" value="3" 
/> 
                                <property name="useExponentialBackOff" 
value="true" /> 
                        </bean>
                </property>
        </bean>

        <bean id="msgDestination"
class="org.apache.activemq.command.ActiveMQQueue">
                <constructor-arg index="0" value="myQueue" />
        </bean>

        <!-- Message converter bean -->
        <bean id="msgConverter" class="com.golemur.jms.MsgMessageConverter" />

        <!-- The JmsTemplate -->
        <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
                <property name="connectionFactory">
                     <bean
class="org.springframework.jms.connection.SingleConnectionFactory">
                        <property name="targetConnectionFactory">
                                <ref local="connectionFactory" />
                        </property>
                </bean>
                </property>
                <property name="defaultDestination" ref="msgDestination" />
                <property name="messageConverter" ref="msgConverter"></property>
                <property name="receiveTimeout" value="60000" />
        </bean>

        <!-- JMS transaction manager -->
        <bean id="jmsTransactionManager"
class="org.springframework.jms.connection.JmsTransactionManager">
                <property name="connectionFactory" ref="connectionFactory" />
        </bean>

        <!-- DefaultMessageListenerContainer-->

        <bean
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
                <property name="connectionFactory" ref="connectionFactory" />
                <property name="destination" ref="msgDestination" />
                <property name="concurrentConsumers" value="1" />
                <property name="messageListener" ref="msgMdp" />
                <property name="sessionAcknowledgeModeName" 
value="CLIENT_ACKNOWLEDGE"/>
                <property name="transactionManager" ref="jmsTransactionManager" 
/>
                <property name="receiveTimeout" value="-1"/>
        </bean>

        <!-- message sender beans -->
        <bean id="msgMessageImpl" class="com.golemur.jms.MsgMessageImpl">
                <property name="jmsTemplate" ref="jmsTemplate" />
                <property name="destination" ref="msgDestination" />
        </bean>

    <bean id="messageProducer" class="com.golemur.jms.MessageProducer">
                <property name="msgMessageImpl">
                        <ref bean="msgMessageImpl" />
                </property>
        </bean>

        <!-- MessageMdp-->
        <bean id="msgMdp" class="com.golemur.jms.MessageMdp" />

        <!-- 
        <bean id="pureMdp"
class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
        <property name="delegate" ref="msgMdp" />
        <property name="defaultListenerMethod" value="processMsgInfo" />
        <property name="messageConverter" ref="msgConverter" />
        </bean>
        -->
</beans>


applicationContext-jmx.xml   this is for the broker

<?xml version="1.0" encoding="UTF-8"?>
<beans 
  xmlns="http://www.springframework.org/schema/beans"; 
  xmlns:amq="http://activemq.org/config/1.0";
  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.org/config/1.0
http://activemq.apache.org/schema/core/activemq-core-5.0.0.xsd";>

  <amq:broker useJmx="true" persistent="true"> 
    <amq:persistenceAdapter> 
        <amq:jdbcPersistenceAdapter dataSource="#mysql-ds"/> 
        <!-- 
        <journaledJDBC journalLogFiles="5"
dataDirectory="${basedir}/activemq-data" dataSource="#mysql-ds"/>
        -->
      </amq:persistenceAdapter> 
    <amq:transportConnectors> 
       <amq:transportConnector
uri="tcp://localhost:0?broker.persistent=true"/> 
    </amq:transportConnectors> 
   </amq:broker>
  
  <!-- MySql DataSource Setup -->
  <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="poolPreparedStatements" value="true"/>
  </bean>
</beans>


messageMDP.java for asychronized to recieve the message. 
        public void onMessage(Message message) {

                try {
                        System.out.println("delivermode::" + 
message.getJMSDeliveryMode());

                        if (message.getJMSRedelivered()) {
                                log.error("This message was redelivered:" + 
message);
                        } else {

                                MapMessage mapMessage = (MapMessage) message;
                                
mapMessage.setJMSDeliveryMode(DeliveryMode.PERSISTENT);

                                MessageVO msg = new MessageVO();
                                msg.setMsgType(mapMessage.getString("msgType"));
                                
msg.setFromUser(mapMessage.getString("fromUser"));
                                msg.setToUser(mapMessage.getString("toUser"));
                                msg.setMessage(mapMessage.getString("message"));
                                msg.setTime(mapMessage.getString("time"));
                                msg.setEmail(mapMessage.getString("email"));
                                msg.setTitle(mapMessage.getString("title"));

                                processMsgInfo(msg);

                        }
                        message.acknowledge();
                } catch (JMSException e) {
                        log.error("Jms error:::" + e.getMessage());
                } catch (Exception e) {
                        log.error("MsgInfo error:::" + e.getMessage());
                }
        }

thanks

Alex

-- 
View this message in context: 
http://www.nabble.com/activemq5.0%2Cwhy-can-not-recieve-failure-message.-tp16186330s2354p16186330.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Reply via email to