# Overview

## 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.

## 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)

  - 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 http://jira.jboss.com

## How to get JBoss Remoting

The JBossRemoting distribution can be downloaded from http://www.jboss.org/jbossremoting/ . This distribution contains everything needed to run JBossRemoting stand alone. The distribution includes binaries, source, documentation, javadoc, and sample code.

## What's new in version 2.5?

Version 2.5.0 represents the process of upgrading the jars with which Remoting is tested and shipped. In particular, the jars are now equivalent to the jars found in the JBoss Application Server version 5.0.0.CR2 (as of 9/6/08, before its release). Changes to jbossweb (the JBoss version of Tomcat) have necessitated dropping the use of Apache Tomcat, which means that the "http" transport will no longer function with jdk 1.4.

Other features of Remoting 2.5.0.GA should function with jdk 1.4. However, it is the policy of JBoss, a division of Red Hat, no longer to support jdk 1.4.

### Release 2.5.3.SP1

- Performance fix to avoid excessive calls to InetAddress.getLocalHost()

### Release 2.5.3

- Security update. Calls to state changing methods of org.jboss.remoting.InvokerRegistry require permission `java.lang.RuntimePermission("invokerRegistryUpdate")`

### Release 2.5.2.SP3

- Multiple bug fixes.

### Release 2.5.2.SP2

- Multiple bug fixes.

### Release 2.5.2

- Introduction of "connection identity" concept

- Introduction of write timeout facility;

- improved reliability for callbacks in bisocket transport;

- improved treatment of invocation retries in socket and bisocket transports;

- More flexible configuration (see, for example, `org.jboss.remoting.Remoting.CONFIG_OVERRIDES_LOCATOR`)

- Added immediate shutdown option for socket transport

- Multiple bug fixes.

### Release 2.5.1

- Security fix (JBREM-1116 "Remove SecurityUtility")

- More flexible configuration (see `org.jboss.remoting.Client.USE_ALL_PARAMS`)

- Jars updated to conform to Application Server 5.1.0.CR1

- Multiple bug fixes.

### Release 2.5.0.SP2

- A few bug fixes.

### Release 2.5.0.SP1

- The distribution zip file no longer contains previous versions of jboss-remoting.jar.

- A few bug fixes.

## What's new in version 2.4?

### Release 2.4.0.SP2

- CoyoteInvoker adds the URL query to the InvocationRequest request map.

- A leak in Java serialization output marshalling has been fixed.

### Release 2.4.0.SP1

- The remote classloading facility can be configured with lists of classloaders.

- Classloading in the client can optionally start with the thread context classloader.

- Leasing can be enabled declaratively.

### Release 2.4.0.GA

JBossRemoting 2.4.0.GA is an incremental release, with dozens of bug fixes and several new features:

- servers can be bound to multiple IP addresses

- can run in the presence of a security manager

- greater configurability

- supports IPv6 addresses

- improved connection monitoring

- server gets client address in invocations