# `net.jini.jeri`
Apache River v3.0.0 Release Notes

### Description

The `net.jini.jeri` package and its subpackages provide APIs for Jini extensible remote invocation (Jini ERI) and several Jini ERI transport layer providers.

### Changes since the v2.2.0 release

- [RIVER-397] - Mux.start() can block indefinitely
- [RIVER-142] - concurrency problem in DGC lease expiration handling

### Changes since the v2.1.1 release

- [RIVER-22] - NPE in net.jini.jeri.tcp.TcpEndpoint$ConnectionImpl.checkConnectPermission
- [RIVER-209] - NullPointerException in SslConnection.checkConnectPermission()
- [RIVER-212] - use of "enum" as a variable name
- [RIVER-229] - reduce number of Reaper threads created by ConnectionManager
- [RIVER-230] - (mux) SelectionManager catch Error block assumes getMessage() returns non-null
- [RIVER-240] - BasicInvocationDispatcher.dispatch could log more info for some exceptions
- [RIVER-254] - request initiation can block on I/O for inapplicable connection

### Changes since the v2.0.1 release

Multihomed host support

  As recommended by RFC 1123, the transport endpoints now attempt connections to all the IP addresses that a given host name may resolve to, instead of just the first one.

Trust verification restriction

  `BasicJeriTrustVerifier` has been changed to trust fewer dynamic proxies. In particular, in addition to implementing `RemoteMethodControl`, the dynamic proxy must now implement one or more well-formed remote interfaces (ones that extend `Remote` and for which all methods declare `RemoteException` or a superclass in their throws clause), and must not implement any other interfaces except `TrustEquivalence`.

New `BasicJeriTrustVerifier` `protected` methods

  `BasicJeriTrustVerifier` has five new `protected` methods to allow for more convenient implementation of certain behaviors through subclassing:

  - `hasTrustedProxyClass` can be overridden by subclasses to control which dynamic proxy classes for Jini ERI proxies are considered locally trusted.
  - `hasTrustedClassLoader` can be overridden by subclasses to control the set of class loaders for which the class of a Jini ERI proxy, when defined by one of those loaders, is considered locally trusted.
  - `isTrustedProxyInterface` can be overridden by subclasses to control which dynamic proxy interfaces for Jini ERI proxies are considered locally trusted.
  - `isTrustedInvocationHandler` can be overridden by subclasses to support verification of invocation handlers that have a locally trusted class other than `BasicInvocationHandler` (such as a subclass of `BasicInvocationHandler`).
  - `checkInvocationHandlerContent` can be invoked by subclasses that override `isTrustedInvocationHandler` to perform the verification steps that the default implementation of `isTrustedInvocationHandler` would perform, except that the class of the invocation handler is not required to be `BasicInvocationHandler` exactly, so that trusted subclasses can be supported.

  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.