Package xpetstore.services.order.ejb

Source Code of xpetstore.services.order.ejb.OrderProcessorMDB

package xpetstore.services.order.ejb;

import java.util.Collection;
import java.util.Iterator;

import javax.ejb.MessageDrivenBean;
import javax.ejb.MessageDrivenContext;

import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;

import xpetstore.domain.customer.interfaces.CustomerLocal;
import xpetstore.domain.order.interfaces.OrderItemLocal;
import xpetstore.domain.order.interfaces.OrderLocal;
import xpetstore.domain.order.model.OrderItemValue;
import xpetstore.domain.order.model.OrderStatus;
import xpetstore.domain.order.model.OrderValue;
import xpetstore.domain.order.util.OrderUtil;

import xpetstore.services.mail.model.Email;
import xpetstore.services.order.exceptions.CreditCardException;

import xpetstore.util.Debug;
import xpetstore.util.JMSUtil;
import xpetstore.util.JNDINames;


/**
* @author <a href="mailto:tchbansi@sourceforge.net">Herve Tchepannou</a>
*
* @ejb.bean
*      name="OrderProcessor"
*      acknowledge-mode="Auto-acknowledge"
*      destination-type="javax.jms.Queue"
*      subscription-durability="Durable"
*      transaction-type="Container"
* @ejb.transaction
*      type="Required"
* @ejb.ejb-ref
*      ejb-name="Order"
*      view-type="local"
*     ref-name="ejb/OrderLocal"
* @ejb.resource-ref
*      res-ref-name="${jndi.queue.ConnectionFactory}"
*      res-type="javax.jms.QueueConnectionFactory"
*      res-auth="Container"
*     jndi-name="${orion.queue.ConnectionFactory}"
* @ejb.resource-ref
*      res-ref-name="${jndi.queue.mail}"
*      res-type="javax.jms.Queue"
*      res-auth="Container"
*     jndi-name="${orion.queue.mail}"
*
* @jboss.destination-jndi-name
*      name="${jboss.queue.order}"
* @jboss.resource-ref
*      res-ref-name="${jndi.queue.ConnectionFactory}"
*      jndi-name="${jboss.queue.ConnectionFactory}"
* @jboss.resource-ref
*      res-ref-name="${jndi.queue.mail}"
*      jndi-name="${jboss.queue.mail}"
*
* @weblogic.message-driven
*      destination-jndi-name="${weblogic.queue.order}"
* @weblogic.resource-description
*      res-ref-name="${jndi.queue.ConnectionFactory}"
*      jndi-name="${weblogic.queue.ConnectionFactory}"
* @weblogic.resource-description
*      res-ref-name="${jndi.queue.mail}"
*      jndi-name="${weblogic.queue.mail}"
*
* @orion.bean
*      connection-factory-location="${orion.queue.ConnectionFactory}"
*      destination-location="${orion.queue.order}"
*/
public class OrderProcessorMDB
    implements MessageDrivenBean,
                   MessageListener
{
    //~ Methods ----------------------------------------------------------------

    /**
     * This method expect a <code>javax.jms.ObjectMessage</code> that
     * contains the orderUId as the message object
     */
    public void onMessage( Message recvMsg )
    {
        Integer    orderUId = null;
        OrderLocal order = null;

        try
        {
            Debug.print( "OrderProcessorMDB.onMessage(" + recvMsg + ")" );

            /* Get the order to proceed */
            ObjectMessage msg = ( ObjectMessage ) recvMsg;
            orderUId = ( Integer ) msg.getObject(  );
            order    = OrderUtil.getLocalHome(  ).findByPrimaryKey( orderUId );

            /* Proceed the order */
            proceedPayment( order );
            proceedOrder( order );
        }
        catch ( CreditCardException c )
        {
            try
            {
                cancelOrder( order );
            }
            catch ( Exception e )
            {
                Debug.print( "Unable to cancel the order[" + orderUId + "]", e );
            }
        }
        catch ( Exception e )
        {
            Debug.print( "Unable to proceed the order[" + orderUId + "]", e );
        }
    }

    /**
     * TODO This function should call the CreditCardProcessor webservice to proceed
     * the payment.
     */
    private void proceedPayment( OrderLocal order )
        throws CreditCardException {}

    private void proceedOrder( OrderLocal order )
        throws Exception
    {
        order.changeStatus( OrderStatus.TO_DELIVER );
        notifyCustomer( order );
    }

    private void cancelOrder( OrderLocal order )
        throws Exception
    {
        order.changeStatus( OrderStatus.CANCELLED );
        notifyCustomer( order );
    }

    private void notifyCustomer( OrderLocal order )
        throws Exception
    {
      CustomerLocal customer = order.getCustomer(  );
      if ( customer == null)
      {
        Debug.print( "No customer to notify" );
        return;
      }
      
        String to = customer.getCustomerValue(  ).getEmail(  );
        String subject = "[Petstore] Order Confirmation";
        String body = toHtml( order );
        JMSUtil.sendToJMSQueue( JNDINames.QUEUE_MAIL, new Email( to, subject, body ), false );
    }

    private String toHtml( OrderLocal order )
    {
        OrderValue   value = order.getOrderValue(  );
        StringBuffer buff = new StringBuffer(  );

        /* Id/Status */
        buff.append( "<table border='1' width='100%'>" );
        buff.append( "<tr><td width='10%'><b>Order ID:</b></td><td>" + value.getOrderUId(  ) + "</td></tr>" );
        buff.append( "<tr><td width='10%'><b>Status:</b></td><td>" + value.getStatus(  ) + "</td></tr>" );
        buff.append( "</table>" );

        /* Shipping/Bill address Address */
        buff.append( "<table border='1' width='100%'><tr>" );
        buff.append( "<td width='10%' valign='top'><b>Address:</b></td>" );
        buff.append( "<td>" );
        buff.append( value.getStreet1(  ) + "<br>" );
        buff.append( value.getStreet2(  ) + "<br>" );
        buff.append( value.getCity(  ) + "," + value.getState(  ) + "<br>" );
        buff.append( value.getZipcode(  ) + "<br>" );
        buff.append( value.getCountry(  ) );
        buff.append( "</td>" );
        buff.append( "</tr></table>" );

        /* Items */
        Collection orderItems = order.getOrderItems(  );
        buff.append( "<table border='1' width='100%'>" );
        buff.append( "<tr>" );
        buff.append( "<th bgcolor='#c0c0c0'>ID</td>" );
        buff.append( "<th bgcolor='#c0c0c0'>Description</th>" );
        buff.append( "<th bgcolor='#c0c0c0'>Unit Price</th>" );
        buff.append( "<th bgcolor='#c0c0c0'>Quantity</th>" );
        buff.append( "<th bgcolor='#c0c0c0'>&nbsp;</th>" );
        buff.append( "</tr>" );

        for ( Iterator it = orderItems.iterator(  ); it.hasNext(  ); )
        {
            OrderItemLocal orderItem = ( OrderItemLocal ) it.next(  );
            buff.append( toHtml( orderItem ) );
        }

        buff.append( "<tr>" );
        buff.append( "<td colspan=4 align=right bgcolor='#c0c0c0'>TOTAL:</td>" );
        buff.append( "<td bgcolor='#c0c0c0'><b>" + order.getTotal(  ) + "<b></td>" );
        buff.append( "</tr>" );
        buff.append( "</table>" );

        return buff.toString(  );
    }

    private String toHtml( OrderItemLocal orderItem )
    {
        StringBuffer   buff = new StringBuffer(  );
        OrderItemValue value = orderItem.getOrderItemValue(  );

        buff.append( "<tr>" );
        buff.append( "<td>" + value.getItem(  ).getItemId(  ) + "</td>>" );
        buff.append( "<td>" + value.getItem(  ).getDescription(  ) + "<br>" );
        buff.append( "<td>" + value + "</td>" );
        buff.append( "<td>" + value + "</td>" );
        buff.append( "<td>" + orderItem.getSubTotal(  ) + "</td>" );
        buff.append( "</tr>" );

        return buff.toString(  );
    }

    //=============================================
    // EJB callbacks
    //=============================================
    public void ejbCreate(  ) {}

    public void setMessageDrivenContext( MessageDrivenContext mdc ) {}

    public void ejbRemove(  ) {}
}
TOP

Related Classes of xpetstore.services.order.ejb.OrderProcessorMDB

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.