/* * 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. */ /** * Transport that reads messages from a UNIX pipe. * <p> * The transport accesses pipes using standard Java file I/O. Note that * this only works with UNIX pipes (FIFOs), not with Windows * named pipes. Also, Java does not support non blocking I/O * on files. * <p> * While pipes are streams, this transport is built as a datagram * transport, i.e. messages are read entirely into memory before they * are processed. Indeed, given that a pipe is a unique communication * channel between two local processes it would not make sense to let * the processing of a message block the reception of the next message. * This is different from other stream based transports such as HTTP * where multiple concurrent channels exist and where it makes sense * to use streaming, i.e. read the message while it is being processed. * <p> * To listen on a given pipe, the datagram stream protocol and the * content type must be specified. The stream protocol describes how * the stream is decoded into individual datagrams (messages) while * the content type determines how these datagrams are decoded. * The protocol is specified by an implementation of the * {@link org.apache.synapse.transport.pipe.Protocol} interface, while * the content type is used to select the appropriate * {@link org.apache.axis2.builder.Builder} with the standard * lookup mechanisms in Axis2. * <p> * See the documentation of {@link org.apache.synapse.transport.pipe.PipeListener} * for more information about how to configure a service to listen to * a pipe. * * <h4>Known issues and limitations</h4> * * <ul> * <li>The listener doesn't implement all management operations * specified by * {@link org.apache.synapse.transport.base.ManagementSupport}.</li> * <li>Configuring the protocol at the transport level while allowing * to specify the content type on a per service basis (see * {@link org.apache.synapse.transport.pipe.PipeListener}) is somewhat * arbitrary. This may not be suitable for some use cases.</li> * </ul> */ package org.apache.synapse.transport.pipe;