Chapter 1. Overview

1.1. What is JBoss Remoting

The purpose of JBoss Remoting is to provide a single API for most network based invocations and related service that uses pluggable transports and data marshallers. The JBossRemoting API provides the ability for making synchronous and asynchronous remote calls, push and pull callbacks, and automatic discovery of remoting servers. The intention is to allow for the use of different transports to fit different needs, yet still maintain the same API for making the remote invocations and only requiring configuration changes, not code changes.

JBossRemoting is a standalone project, separate from the JBoss Application Server project, but will be the framework used for many of the JBoss projects and components when making remote calls. JBossRemoting is included in the recent releases of the JBoss Application Server and can be run as a service within the container as well. Service configurations are included in the configuration section below.

1.2. Features

The features available with JBoss Remoting are:

  • Server identification – a simple url based identifier which allows for remoting servers to be identified and called upon.

  • Pluggable transports – can use different protocol transports the same remoting API.

    Provided transports:

    • Socket (SSL Socket)

    • RMI (SSL RMI)

    • HTTP(S)

    • Multiplex (SSL Multiplex)

    • Servlet (SSL Servlet)

    • BiSocket (SSL BiSocket)

  • Pluggable data marshallers – can use different data marshallers and unmarshallers to convert the invocation payloads into desired data format for wire transfer.

  • Pluggable serialization - can use different serialization implementations for data streams.

    Provided serialization implementations:

    • Java serialization

    • JBoss serialization

  • Automatic discovery – can detect remoting servers as they come on and off line.

    Provided detection implementations:

    • Multicast

    • JNDI

  • Server grouping – ability to group servers by logical domains, so only communicate with servers within specified domains.

  • Callbacks – can receive server callbacks via push and pull models. Pull model allows for persistent stores and memory management.

  • Asynchronous calls – can make asynchronous, or one way, calls to server.

  • Local invocation – if making an invocation on a remoting server that is within the same process space, remoting will automatically make this call by reference, to improve performance.

  • Remote classloading – allows for classes, such as custom marshallers, that do not exist within client to be loaded from server.

  • Sending of streams – allows for clients to send input streams to server, which can be read on demand on the server.

  • Clustering - seamless client failover for remote invocations.

  • Connection failure notification - notification if client or server has failed

  • Data Compression - can use compression marshaller and unmarshaller for compresssion of large payloads.

All the features within JBoss Remoting were created with ease of use and extensibility in mind. If you have a suggestion for a new feature or an improvement to a current feature, please log in our issue tracking system at

1.3. How to get JBoss Remoting

The JBossRemoting distribution can be downloaded from . This distribution contains everything needed to run JBossRemoting stand alone. The distribution includes binaries, source, documentation, javadoc, and sample code.

1.4. What's new?

1.4.1. Release 2.2.4

  • New server identity feature

  • New configuration parameters

  • Multiple enhancements and bug fixes

1.4.2. In release 2.2.3.SP3

  1. miscellaneous bug fixes.

1.4.3. In release 2.2.3.SP2

  1. Improved handling of IPv6 addresses in URLs;

  2. miscellaneous bug fixes.

1.4.4. In release 2.2.3.SP1

  1. Introduction of write timeout facility;

  2. improved reliability for callbacks in bisocket transport;

  3. improved treatment of invocation retries in socket and bisocket transports;

  4. miscellaneous bug fixes.

1.4.5. In release 2.2.3

  1. Introduction of "connection identity" concept;

  2. upgrading of servlet transport;

  3. improved configuration flexibility;

  4. miscellaneous bug fixes.

1.4.6. In release 2.2.2.SP11

  1. More flexible classloading by client side unmarshallers;

  2. miscellaneous bug fixes.

1.4.7. In release 2.2.2.SP10

  1. CoyoteInvoker stores InvokerLocator query in InvocationRequest;

  2. miscellaneous bug and documentation fixes.

1.4.8. In release 2.2.2.SP9

  1. Fixed potential build up of cancelled TimerTasks in bisocket transport;

  2. it's possible to turn on server side connection monitoring (leasing) declaratively;

  3. miscellaneous bug fixes.

1.4.9. In release 2.2.2.SP8

  1. Remoting remote classloading facility now works with isolated EARs;

  2. InvokerLocator can process zone indices;

  3. improved client side connection monitoring;

  4. miscellaneous bug fixes.

1.4.10. In release 2.2.2.SP7

  1. Server side and client side connection listeners can be tied together.

1.4.11. In release 2.2.2.SP4

  1. IPv6 addresses are supported;

  2. org.jboss.remoting.callback.ServerInvokerCallbackHandler can register itself as a lease connection listener.

1.4.12. In release 2.2.2.SP2

  1. The servlet transport can throw an exception generated on the server side;

  2. servers can bind to

1.4.13. In release 2.2.2.GA

Release 2.2.2.GA includes a number of bug fixes, greater configurability, and a couple of new features, including

  1. an improved callback polling method;

  2. the ability for the client to discover its IP address as seen by the server side of the connection;

The following changes affect configurability:

  1. The address and port of the bisocket transport secondary server socket are configurable;

  2. org.jboss.remoting.ConnectorValidator parameters are configurable;

  3. the maximum number of errors before a org.jboss.remoting.callback.CallbackPoller shuts down can be specified;

  4. there is a separate timeout parameter for callbacks.

For the JIRA items related to release 2.2.2.GA, see Release Notes.