org.objectweb.petals.tools.rmi.server.remote.implementations
Class RemoteDeliveryChannelImpl

java.lang.Object
  extended by java.rmi.server.RemoteObject
      extended by java.rmi.server.RemoteServer
          extended by java.rmi.server.UnicastRemoteObject
              extended by org.objectweb.petals.tools.rmi.server.remote.implementations.RemoteDeliveryChannelImpl
All Implemented Interfaces:
java.io.Serializable, java.rmi.Remote, RemoteDeliveryChannel

public class RemoteDeliveryChannelImpl
extends java.rmi.server.UnicastRemoteObject
implements RemoteDeliveryChannel

The rmi implmentation of delivery channel.

Author:
nsalatge
See Also:
Serialized Form

Field Summary
 
Fields inherited from class java.rmi.server.RemoteObject
ref
 
Constructor Summary
RemoteDeliveryChannelImpl(javax.jbi.messaging.DeliveryChannel dl, javax.jbi.component.ComponentContext c, java.util.Map<java.lang.String,javax.jbi.messaging.MessageExchange> msgs, java.util.logging.Logger log)
          the constructor.
 
Method Summary
 javax.jbi.messaging.MessageExchange accept()
          TODO accept check multi thread Blocking call used to service a MessageExchange instance which has been initiated by another component.
 javax.jbi.messaging.MessageExchange accept(long timeoutMS)
          TODO accept check multi thread Blocking call used to service a MessageExchange instance which has been initiated by another component, within the given timeout period.
 void close()
          TODO close pending messages, remove endpoint entries ? Closes the delivery channel, halting all message traffic.
 RemoteMessageExchangeFactory createExchangeFactory()
          Create a message exchange factory.
 RemoteMessageExchangeFactory createExchangeFactory(javax.xml.namespace.QName interfaceName)
          Create a message exchange factory for the given interface name.
 RemoteMessageExchangeFactory createExchangeFactory(javax.jbi.servicedesc.ServiceEndpoint endpoint)
          Create a message exchange factory for the given endpoint.
 RemoteMessageExchangeFactory createExchangeFactoryForService(javax.xml.namespace.QName serviceName)
          Create a message exchange factory for the given service name.
 void send(javax.jbi.messaging.MessageExchange exchange)
          TODO send resolve jbi logical endpoint Routes a MessageExchange instance through the Normalized Message Router to the appropriate servicing component.
 javax.jbi.messaging.MessageExchange sendSync(javax.jbi.messaging.MessageExchange exchange)
          TODO sendSync check multithread The RMI interface of sendSync return a message exchange.
 javax.jbi.messaging.MessageExchange sendSync(javax.jbi.messaging.MessageExchange exchange, long timeoutMS)
          TODO sendSync check multithread The RMI interface of sendSync return a message exchange.
 
Methods inherited from class java.rmi.server.UnicastRemoteObject
clone, exportObject, exportObject, exportObject, unexportObject
 
Methods inherited from class java.rmi.server.RemoteServer
getClientHost, getLog, setLog
 
Methods inherited from class java.rmi.server.RemoteObject
equals, getRef, hashCode, toString, toStub
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

RemoteDeliveryChannelImpl

public RemoteDeliveryChannelImpl(javax.jbi.messaging.DeliveryChannel dl,
                                 javax.jbi.component.ComponentContext c,
                                 java.util.Map<java.lang.String,javax.jbi.messaging.MessageExchange> msgs,
                                 java.util.logging.Logger log)
                          throws java.rmi.RemoteException
the constructor.

Parameters:
dl - the delivery channel
c - the component context
msgs - the messages
log - the logger
Throws:
java.rmi.RemoteException - impossible to realize a remote access
Method Detail

accept

public javax.jbi.messaging.MessageExchange accept()
                                           throws javax.jbi.messaging.MessagingException,
                                                  java.rmi.RemoteException
TODO accept check multi thread Blocking call used to service a MessageExchange instance which has been initiated by another component. This method supports concurrent invocation for multi-threaded environments. This must be interruptable (Thread.interrupt()).

Specified by:
accept in interface RemoteDeliveryChannel
Returns:
message exchange instance; must be non-null
Throws:
javax.jbi.messaging.MessagingException - failed to accept
javax.jbi.messaging.MessagingException - when the blocked thread is interrupted
java.rmi.RemoteException - impossible to realize a remote access

accept

public javax.jbi.messaging.MessageExchange accept(long timeoutMS)
                                           throws javax.jbi.messaging.MessagingException,
                                                  java.rmi.RemoteException
TODO accept check multi thread Blocking call used to service a MessageExchange instance which has been initiated by another component, within the given timeout period. This method supports concurrent invocation for multi-threaded environments.

Specified by:
accept in interface RemoteDeliveryChannel
Parameters:
timeoutMS - timeout period, in milliseconds (0 means no timeout); must be greater than or equal to zero
Returns:
message exchange instance, or null if timed out
Throws:
javax.jbi.messaging.MessagingException - failed to accept
javax.jbi.messaging.MessagingException - when the blocked thread is interrupted
java.rmi.RemoteException - impossible to realize a remote access

close

public void close()
           throws javax.jbi.messaging.MessagingException,
                  java.rmi.RemoteException
TODO close pending messages, remove endpoint entries ? Closes the delivery channel, halting all message traffic.

Specified by:
close in interface RemoteDeliveryChannel
Throws:
javax.jbi.messaging.MessagingException - fatal error while closing channel
java.rmi.RemoteException - impossible to realize a remote access

createExchangeFactory

public RemoteMessageExchangeFactory createExchangeFactory()
                                                   throws java.rmi.RemoteException
Create a message exchange factory. This factory will create exchange instances with all appropriate properties set to null.

Specified by:
createExchangeFactory in interface RemoteDeliveryChannel
Returns:
a message exchange factory; must be non-null
Throws:
java.rmi.RemoteException - impossible to realize a remote access

createExchangeFactory

public RemoteMessageExchangeFactory createExchangeFactory(javax.xml.namespace.QName interfaceName)
                                                   throws java.rmi.RemoteException
Create a message exchange factory for the given interface name.

Specified by:
createExchangeFactory in interface RemoteDeliveryChannel
Parameters:
interfaceName - name of the interface for which all exchanges created by the returned factory will be set for; may be null
Returns:
an exchange factory that will create exchanges for the the given interface; must be non-null
Throws:
java.rmi.RemoteException - impossible to realize a remote access

createExchangeFactory

public RemoteMessageExchangeFactory createExchangeFactory(javax.jbi.servicedesc.ServiceEndpoint endpoint)
                                                   throws java.rmi.RemoteException
Create a message exchange factory for the given endpoint.

Specified by:
createExchangeFactory in interface RemoteDeliveryChannel
Parameters:
endpoint - endpoint for which all exchanges created by the returned factory will be set for; may be null
Returns:
an exchange factory that will create exchanges for the given endpoint; must be non-null
Throws:
java.rmi.RemoteException - impossible to realize a remote access

createExchangeFactoryForService

public RemoteMessageExchangeFactory createExchangeFactoryForService(javax.xml.namespace.QName serviceName)
                                                             throws java.rmi.RemoteException
Create a message exchange factory for the given service name.

Specified by:
createExchangeFactoryForService in interface RemoteDeliveryChannel
Parameters:
serviceName - name of the service for which all exchanges created by the returned factory will be set for; may be null
Returns:
an exchange factory that will create exchanges for the the given service; must be non-null
Throws:
java.rmi.RemoteException - impossible to realize a remote access

send

public void send(javax.jbi.messaging.MessageExchange exchange)
          throws javax.jbi.messaging.MessagingException,
                 java.rmi.RemoteException
TODO send resolve jbi logical endpoint Routes a MessageExchange instance through the Normalized Message Router to the appropriate servicing component. This method supports concurrent invocation for multi-threaded environments.

This is used not only to send the initial message in an exchange, but also for the servicer to "return" the exchange with the appropriate response (response, fault, or ExchangeStatus). In more complex message exchange patterns, a single MessageExchange can be sent back-and-forth via send() several times, but always terminating with the MessageExchange instance being sent with a terminal ExchangeStatus.

Specified by:
send in interface RemoteDeliveryChannel
Parameters:
exchange - message exchange to send; must be non-null
Throws:
javax.jbi.messaging.MessagingException - unable to send exchange
java.rmi.RemoteException - impossible to realize a remote access

sendSync

public javax.jbi.messaging.MessageExchange sendSync(javax.jbi.messaging.MessageExchange exchange)
                                             throws javax.jbi.messaging.MessagingException,
                                                    java.rmi.RemoteException
TODO sendSync check multithread The RMI interface of sendSync return a message exchange. it is different of jbi interface because the message exchange in input parameter is not a remote object, so, it cannot be setted in the method. Routes a MessageExchange instance through the Normalized Message Router to the appropriate servicing component, and blocks until the exchange is returned (that is, the other participant sends the message exchange back). This method supports concurrent invocation for multi-threaded environments.

If the thread making this call is interrupted, the message exchange is treated in the same fashion as a timed-out sendSync call; see RemoteDeliveryChannel.sendSync(MessageExchange, long).

Note that the "returned" message exchange (the instance returned by the other participant in the exchange) is the same instance referred to by the parameter exchange.

Specified by:
sendSync in interface RemoteDeliveryChannel
Parameters:
exchange - message exchange to send; must be non-null
Returns:
the message exchange if the exchange has been returned, or null
Throws:
javax.jbi.messaging.MessagingException - unable to send exchange, or no response is expected from the send() operation (i.e., the MessageExchange is being used to convey an ExchangeStatus)
javax.jbi.messaging.MessagingException - when the blocked thread is interrupted
java.rmi.RemoteException - impossible to realize a remote access

sendSync

public javax.jbi.messaging.MessageExchange sendSync(javax.jbi.messaging.MessageExchange exchange,
                                                    long timeoutMS)
                                             throws javax.jbi.messaging.MessagingException,
                                                    java.rmi.RemoteException
TODO sendSync check multithread The RMI interface of sendSync return a message exchange. it is different of jbi interface because the message exchange in input parameter is not a remote object, so, it cannot be setted in the method. Routes a MessageExchange instance through the Normalized Message Router to the appropriate servicing component, and blocks until the exchange is returned (that is, the other participant sends the message exchange back), or the specified timeout interval elapses. This method supports concurrent invocation for multi-threaded environments.

If the thread making this call is interrupted while this method is blocked, the message exchange is treated as if the time out occurred.

If this method returns false (indicating that timeout occurred), the message exchange must be marked by the implementation as being in the ExchangeStatus.ERROR state. Attempts by the service provider to send a MessageExchange in such an ERROR state must result in the send (or sendSync) method called ending abruptly with an appropriate MessagingException.

Note that the "returned" message exchange (the instance returned by the other participant in the exchange) is the same instance referred to by the parameter exchange.

Specified by:
sendSync in interface RemoteDeliveryChannel
Parameters:
exchange - message exchange to send; must be non-null
timeoutMS - timeout period, in milliseconds (0 means no timeout); must be greater than or equal to zero
Returns:
the message exchange if the exchange has been returned, or null if the method timed out while waiting
Throws:
javax.jbi.messaging.MessagingException - unable to send exchange, or no response is expected from the send() operation (i.e., the MessageExchange is being used to convey an ExchangeStatus)
javax.jbi.messaging.MessagingException - when the blocked thread is interrupted
java.rmi.RemoteException - impossible to realize a remote access


Copyright © 2005-2011 Petals Link (EBM Websourcing). All Rights Reserved.