All Downloads are FREE. Search and download functionalities are using the official Maven repository.

javax.resource.spi.endpoint.MessageEndpointFactory Maven / Gradle / Ivy

There is a newer version: 1.7.1
Show newest version
/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
 *
 * The contents of this file are subject to the terms of either the GNU
 * General Public License Version 2 only ("GPL") or the Common Development
 * and Distribution License("CDDL") (collectively, the "License").  You
 * may not use this file except in compliance with the License.  You can
 * obtain a copy of the License at
 * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
 * or packager/legal/LICENSE.txt.  See the License for the specific
 * language governing permissions and limitations under the License.
 *
 * When distributing the software, include this License Header Notice in each
 * file and include the License file at packager/legal/LICENSE.txt.
 *
 * GPL Classpath Exception:
 * Oracle designates this particular file as subject to the "Classpath"
 * exception as provided by Oracle in the GPL Version 2 section of the License
 * file that accompanied this code.
 *
 * Modifications:
 * If applicable, add the following below the License Header, with the fields
 * enclosed by brackets [] replaced by your own identifying information:
 * "Portions Copyright [year] [name of copyright owner]"
 *
 * Contributor(s):
 * If you wish your version of this file to be governed by only the CDDL or
 * only the GPL Version 2, indicate your decision by adding "[Contributor]
 * elects to include this software in this distribution under the [CDDL or GPL
 * Version 2] license."  If you don't indicate a single choice of license, a
 * recipient has the option to distribute your version of this file under
 * either the CDDL, the GPL Version 2 or to extend the choice of license to
 * its licensees as provided above.  However, if you add GPL Version 2 code
 * and therefore, elected the GPL Version 2 license, then the option applies
 * only if the new code is made subject to such option by the copyright
 * holder.
 */

package javax.resource.spi.endpoint;

import java.lang.NoSuchMethodException;
import javax.transaction.xa.XAResource;
import javax.resource.spi.UnavailableException;

/**
 * This serves as a factory for creating message endpoints.
 *
 * @version 1.0
 * @author  Ram Jeyaraman
 */
public interface MessageEndpointFactory {

    /**
     * This is used to create a message endpoint. The message endpoint is
     * expected to implement the correct message listener type.
     *
     * @param xaResource an optional XAResource 
     * instance used to get transaction notifications when the message delivery
     * is transacted.
     *
     * @return a message endpoint instance.
     *
     * @throws UnavailableException indicates a transient failure
     * in creating a message endpoint. Subsequent attempts to create a message
     * endpoint might succeed.
     */
    MessageEndpoint createEndpoint(XAResource xaResource)
	throws UnavailableException;

    /**
     * This is used to create a message endpoint. The message endpoint is
     * expected to implement the correct message listener type.
     *
     * @param xaResource an optional XAResource 
     * instance used to get transaction notifications when the message delivery
     * is transacted.
     * 
     * @param timeout an optional value used to specify the time duration
     * (in milliseconds) within which the message endpoint needs to be
     * created by the MessageEndpointFactory. Otherwise, the
     * MessageEndpointFactory rejects the creation of the
     * MessageEndpoint with an UnavailableException.  Note, this
     * does not offer real-time guarantees.
     * 
     * @return a message endpoint instance.
     *
     * @throws UnavailableException indicates a transient failure
     * in creating a message endpoint. Subsequent attempts to create a message
     * endpoint might succeed.
     */
    MessageEndpoint createEndpoint(XAResource xaResource, long timeout)
    throws UnavailableException;

    /**
     * This is used to find out whether message deliveries to a target method
     * on a message listener interface that is implemented by a message 
     * endpoint will be transacted or not. 
     *
     * The message endpoint may indicate its transacted delivery preferences 
     * (at a per method level) through its deployment descriptor. The message 
     * delivery preferences must not change during the lifetime of a 
     * message endpoint. 
     * 
     * @param method description of a target method. This information about
     * the intended target method allows an application server to find out 
     * whether the target method call will be transacted or not.
     *
     * @throws NoSuchMethodException indicates that the specified method
     * does not exist on the target endpoint.
     *
     * @return true, if message endpoint requires transacted message delivery.
     */
    boolean isDeliveryTransacted(java.lang.reflect.Method method)
	throws NoSuchMethodException;
    
    /**
     * Returns a unique name for this message endpoint. If the application has 
     * been deployed into a clustered application server then this method must 
     * return the same name for the same endpoint in each application server 
     * instance. Otherwise, a different name must be returned for every endpoint 
     * in every application in every application server instance.
     * 
     * The name must consist of Java letters or digits (as defined in the Java 
     * Language Specification) or the ASCII underscore (_ or \u005f).
     *
     * Since a subscription name may be visible to the user or administrator it
     * is recommended that this name is at least partly human-readable.
     *
     * The resource adapter may use this value as a valid JMS subscription name, 
     * either on its own or in combination with the value returned by the 
     * BootstrapContext.getInstanceName method. This value may be 
     * used on its own if the subscription name needs to be the same for the same 
     * endpoint in each application server instance within a cluster but otherwise 
     * unique. This value may be used in combination with the value returned by the 
     * BootstrapContext.getInstanceName method if the subscription 
     * name needs to be unique to this endpoint.
     *
     * Since a durable subscription can be used to store messages indefinitely it
     * is recommended that this name remains unchanged even if the application
     * server is restarted or reconfigured, or if the application is redeployed.
     *
     * The combination of this value and the value returned by the
     * BootstrapContext.getInstanceName  method should be no longer
     * than 128 characters.
     *
     * @return a new String instance.
     * @see javax.resource.spi.BootstrapContext
     * @version Java EE Connector Architecture 1.7
     */
    String getActivationName();

}







© 2015 - 2024 Weber Informatics LLC | Privacy Policy