001    /*
002     * Copyright (c) 2001-2004 Caucho Technology, Inc.  All rights reserved.
003     *
004     * The Apache Software License, Version 1.1
005     *
006     * Redistribution and use in source and binary forms, with or without
007     * modification, are permitted provided that the following conditions
008     * are met:
009     *
010     * 1. Redistributions of source code must retain the above copyright
011     *    notice, this list of conditions and the following disclaimer.
012     *
013     * 2. Redistributions in binary form must reproduce the above copyright
014     *    notice, this list of conditions and the following disclaimer in
015     *    the documentation and/or other materials provided with the
016     *    distribution.
017     *
018     * 3. The end-user documentation included with the redistribution, if
019     *    any, must include the following acknowlegement:
020     *       "This product includes software developed by the
021     *        Caucho Technology (http://www.caucho.com/)."
022     *    Alternately, this acknowlegement may appear in the software itself,
023     *    if and wherever such third-party acknowlegements normally appear.
024     *
025     * 4. The names "Burlap", "Hessian", "Resin", and "Caucho" must not be
026     *    used to endorse or promote products derived from this software
027     *    without prior written permission. For written permission, please contact
028     *    info@caucho.com.
029     *
030     * 5. Products derived from this software may not be called "Resin"
031     *    nor may "Resin" appear in their names without prior written
032     *    permission of Caucho Technology.
033     *
034     * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
035     * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
036     * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
037     * DISCLAIMED.  IN NO EVENT SHALL CAUCHO TECHNOLOGY OR ITS CONTRIBUTORS
038     * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
039     * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
040     * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
041     * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
042     * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
043     * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
044     * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
045     *
046     * @author Scott Ferguson
047     */
048    
049    package com.caucho.services.message;
050    
051    import java.util.HashMap;
052    
053    /**
054     * Service API for a bare-bones message server.
055     *
056     * <p>A minimal message server only needs to implement the MessageSender
057     * interface.  Keeping the server API simple makes it easier for
058     * implementations to start up message servers.
059     *
060     * <p>The MessageSender service is queue or topic specific.  So there's no
061     * need for a <b>To</b> header if there's no routing involved.
062     * In other words, the service URL generally includes the queue
063     * or topic identifier, e.g.
064     *
065     * <pre>
066     * http://www.caucho.com/hessian/hessian/message?ejbid=topic-a
067     * <pre>
068     *
069     * <p>More complicated messaging topologies, including configurations
070     * with routing mesaging servers, will use the headers to define the
071     * final destination.  The headers have the same functional purpose as
072     * RFC-822 mail headers.
073     */
074    public interface MessageSender {
075      /**
076       * Send a message to the server.
077       *
078       * @param headers any message headers
079       * @param message the message data
080       *
081       * @exception MessageServiceException if the message cannot be delivered
082       */
083      public void send(HashMap headers, Object message)
084        throws MessageServiceException;
085    }