001 /* 002 * Copyright (C) The Apache Software Foundation. All rights reserved. 003 * 004 * This software is published under the terms of the Apache Software License 005 * version 1.1, a copy of which has been included with this distribution in 006 * the LICENSE file. 007 * 008 * $Id: MessageServletDispatcher.java 155459 2005-02-26 13:24:44Z dirkv $ 009 */ 010 package org.apache.commons.messagelet.impl; 011 012 import javax.jms.JMSException; 013 import javax.jms.Message; 014 import javax.servlet.ServletException; 015 016 import org.apache.commons.messagelet.MessageDrivenObjectSupport; 017 import org.apache.commons.messenger.Messenger; 018 import org.apache.commons.messenger.MessengerListener; 019 020 /** <p><code>MessageDispatcher</code> dispatches JMS Messages 021 * into a Servlet engine for procesing.</p> 022 * 023 * @author <a href="mailto:jstrachan@apache.org">James Strachan</a> 024 * @version $Revision: 155459 $ 025 */ 026 public class MessageServletDispatcher extends MessageDrivenObjectSupport implements MessengerListener { 027 028 /** 029 * The ServletRequest object we will pass to the servlet engine 030 */ 031 private MessageletRequestImpl request; 032 033 /** 034 * The ServletResponse object we will pass to the servlet engine 035 */ 036 private MessageletResponseImpl response; 037 038 /** 039 * The reply to messenger 040 */ 041 private Messenger messenger; 042 043 /** Holds value of property path. */ 044 private String path; 045 046 047 public MessageServletDispatcher() { 048 //request.setResponse(response); 049 //response.setRequest(request); 050 } 051 052 public MessageServletDispatcher(String path) { 053 this(); 054 this.path = path; 055 } 056 057 058 public void init() throws ServletException { 059 request = new MessageletRequestImpl( new ServletRequestImpl( getServletContext() ) ); 060 response = new MessageletResponseImpl( new ServletResponseImpl() ); 061 } 062 063 // MessengerListener methods 064 //------------------------------------------------------------------------- 065 public void setMessenger(Messenger messenger) { 066 response.setReplyMessenger( messenger ); 067 } 068 069 /** 070 * Process the incoming JMS Message. 071 * 072 * @param message is the message to be processed 073 */ 074 public void onMessage(Message message) { 075 try { 076 response.setReplyToDestination( message.getJMSReplyTo() ); 077 } 078 catch (JMSException e) { 079 log( "Could not find JMS replyTo destination", e ); 080 response.setReplyToDestination( null ); 081 } 082 083 // Ask our Container to process this request 084 try { 085 // initialise the request 086 request.setMessage( message ); 087 response.reset(); 088 089 // dispatch the servlet 090 getServletContext().getRequestDispatcher( getPath() ).include(request, response); 091 092 // finish up the response, sending a reply if necessary 093 response.finish(); 094 } 095 catch (Throwable e) { 096 handleException( message, e ); 097 } 098 } 099 100 101 // Properties 102 //------------------------------------------------------------------------- 103 /** Getter for property path. 104 * @return Value of property path. 105 */ 106 public String getPath() { 107 return path; 108 } 109 110 /** Setter for property path. 111 * @param path New value of property path. 112 */ 113 public void setPath(String path) { 114 this.path = path; 115 116 //request.setRequestURI(path); 117 } 118 119 120 121 // Implementation methods 122 //------------------------------------------------------------------------- 123 protected void handleException(Message message, Throwable t) { 124 log( "Caught exception processing message: " + message, t); 125 } 126 }