blob: d46a4cd55249088320780f058711c9802ae187c2 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package javax.jbi.component;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.servicedesc.ServiceEndpoint;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentFragment;
/**
* This interface, implemented by component implementations, allows
* the JBI implementation to query the component for various types
* of information. This includes:
* <ul>
* <li>The component's life cycle control interface.</li>
* <li>The component's service unit manager, for handling deployments.</li>
* <li>A method for querying service metadata describing services
* provided by this component.</li>
* <li>"Policy" methods that are called by the JBI implementation to
* query if proposed matches of this component to a provider (or
* consumer) are acceptable, according to this component's policies.</li>
* <li>Endpoint reference (EPR) resolution. Some components will provide
* the ability to resolve EPRs (typically binding components). This
* ability to resolve EPRs is used by JBI to facilitate resolution of
* EPRs received by service consumers.</li>
*
* The name of the class that implements this interface for a component is
* specified in the installation descriptor for that component.
*
* @author JSR208 Exert Group
*/
public interface Component {
/**
* Get the life cycle control interface for this component. This interface
* allows the JBI implementation to control the running state of this component.
*
* This method must be called before any other methods of this interface are
* called. In addition, the JBI implementation must call the init() method of
* the component life cycle returned by this method before calling any other
* methods on this interface, or the component life cycle interface.
*
* @return the life cycle control interface for this component; must be non-null.
*/
ComponentLifeCycle getLifeCycle();
/**
* Get the Service Unit manager for this component. If this component does not
* support deployments, it must return null.
*
* @return the ServiceUnitManager for this component, or null if there is none.
*/
ServiceUnitManager getServiceUnitManager();
/**
* Retrieves a DOM representation containing metadata which describes the service
* provided by this component, through the given endpoint. The result can use WSDL
* 1.1 or WSDL 2.0.
*
* @param endpoint the service endpoint.
* @return the description for the specified service endpoint.
*/
Document getServiceDescription(ServiceEndpoint endpoint);
/**
* This method is called by JBI to check if this component, in the role of provider
* of the service indicated by the given exchange, can actually perform the operation
* desired.
*
* @param endpoint the endpoint to be used by the consumer; must be non-null.
* @param exchange the proposed message exchange to be performed; must be non-null.
* @return true if this provider component can interact with the described consumer
* to perform the given exchange.
*/
boolean isExchangeWithConsumerOkay(ServiceEndpoint endpoint, MessageExchange exchange);
/**
* This method is called by JBI to check if this component, in the role of consumer
* of the service indicated by the given exchange, can actually interact with the
* provider properly. The provider is described by the given endpoint and the service
* description supplied by that endpoint.
*
* @param endpoint the endpoint to be used by the provider; must be non-null.
* @param exchange the proposed message exchange to be performed; must be non-null.
* @return true if this consumer component can interact with the described provider
* to perform the given exchange.
*/
boolean isExchangeWithProviderOkay(ServiceEndpoint endpoint, MessageExchange exchange);
/**
* Resolve the given endpoint reference. This is called by JBI when it is attempting to
* resolve the given EPR on behalf of a component.
*
* If this component returns a non-null result, it must conform to the following:
* <ul>
* <li>This component implements the ServiceEndpoint returned.</li>
* <li>The result must not be registered or activated with the JBI implementation.</li>
* </ul>
*
* Dynamically resolved endpoints are distinct from static ones; they must not be activated
* (see {@link javax.jbi.component.ComponentContext#activateEndpoint(javax.xml.namespace.QName, String)}),
* nor registered (see {@link ComponentContext}) by components. They can only be used to address
* message exchanges; the JBI implementation must deliver such exchanges to the component that
* resolved the endpoint reference (see
* {@link javax.jbi.component.ComponentContext#resolveEndpointReference(org.w3c.dom.DocumentFragment)}).
*
* @param epr the endpoint reference, in some XML dialect understood by the appropriate component
* (usually a binding); must be non-null.
* @return the service endpoint for the EPR; null if the EPR cannot be resolved by this component.
*/
ServiceEndpoint resolveEndpointReference(DocumentFragment epr);
}