4/6

# 1 Technical Changes and Enhancements

This chapter describes the changes and enhancements made to the Oracle Coherence product for the 3.6.1 release. This document is accurate at the time of publication. Oracle updates the release notes periodically after the software release.

- Download and Install the Latest Software Patch

- Oracle Coherence for Java 3.6.1

- Oracle Coherence for .NET 3.6.1

- Oracle Coherence for C++ 3.6.1

- Known Problems and Workarounds

## 1.1 Download and Install the Latest Software Patch

Go to My Oracle Support to download the latest software patches.

`https://support.oracle.com`

See the `README` file in the patch distribution for up-to-date information on the software fixes provided by the patch.

1. Login to My Oracle Support.

2. Click the Patches & Updates tab.

3. Under the Patch Search tab, select Product or Family (Advanced Search), and select the Include all patches in a product family check box.

4. Enter Oracle Coherence as the product, select the platform and release, and click Search.

The list of currently available patches for Oracle Coherence is returned.

## 1.2 Oracle Coherence for Java 3.6.1

New features, improvements, and bug fixes have been added to these Oracle Coherence for Java components:

- Management and Monitoring Enhancements and Fixes

- Partitioned Cache Enhancements and Fixes

- TCMP Enhancements and Fixes

- Coherence*Extend Framework Enhancements and Fixes

- Coherence*Web Enhancements and Fixes

- Management Framework Enhancements and Fixes

- Serialization Framework Enhancements and Fixes

- Other Enhancements and Fixes

### 1.2.1 Management and Monitoring Enhancements and Fixes

- Fixed an issue where concurrent management invocable execution and `CacheFactory.shutdown()` caused a deadlock.

- Fixed an issue where MBeans registered by `SafeCluster` were not unregistered when cluster stopped abnormally.

### 1.2.2 Partitioned Cache Enhancements and Fixes

- Fixed an issue that can cause a filter-based `invoke()` method calls to hang when the filter throws an exception.

- Fixed issue causing endless "`Repeating *Request due to the re-distribution of PartitionSet{...}`" messages during concurrent `destroyCache()` method calls.

- Fixed an issue causing indices built by the `IndexAwareExtractor` method to not be transferred correctly during failback.

- Fixed a bug that could result in indexes (and `keySet` iterators) becoming corrupt or missing entries under heavy eviction.

- Fixed a bug that could cause spurious "null" aggregation results during a cache server shutdown.

- Fixed an issue that could result in storage-disabled clients being unable to communicate with storage nodes.

- Fixed an issue on sorted indices that could cause a `NullPointerException` during filter-based queries.

### 1.2.3 TCMP Enhancements and Fixes

- Fixed an issue that caused well known address (WKA) clusters to combine or panic due to socket address re-use.

- Increased the ping-timeout used by the `IPMonitor` class to accommodate some Windows environments.

- The `IpMonitor` senior member ping on startup is now bypassed for co-located members, to accommodate some Windows environments.

- Fixed an issue to ensure that default address selection is deterministic in multi-network interface card (NIC) environments.

### 1.2.4 Coherence*Extend Framework Enhancements and Fixes

- Fixed an issue where abnormal termination of a cache service could cause Coherence*Extend clients to lose events.

- Hardened the `ProxyService` class against exceptions thrown by custom proxy implementations.

- Resolved an intermittent issue where a new TCMP/SSL connection could trigger a `BufferOverflowException`.

- Fixed an issue that prevented clients from transparently reconnecting after being rejected by a proxy server.

- Provided a more detailed exception message when a client fails to connect to a proxy server.

### 1.2.5 Coherence*Web Enhancements and Fixes

- Fixed an issue causing the `LimitFilter` class to return an inconsistent set of results.

- Coherence Web now supports IBM WebSphere 7.

- Fixed the issue preventing session information for each session from being displayed in session tab.

- The `Session.``isNew()` method is not consistent with other session persistence types in WebLogic Server.

### 1.2.6 Management Framework Enhancements and Fixes

- Fixed an issue that could lead to version dependency becoming orphaned if commit/rollback fails after updating entries but before releasing dependency.

### 1.2.7 Serialization Framework Enhancements and Fixes

- Removed validation logic in Portable Object Format (POF) date deserialization that limited the year range to between 1582 and 2199.

- Fixed the issue where `AbstractInvocable` result was not required to implement the `Serializable` interface.

- Fixed the issue where `CompositeKey` had no entry in the `coherence-pof-config.xml` file.

### 1.2.8 Other Enhancements and Fixes

- Fixed an issue with Coherence Query Language's `backup` and `restore` commands so that it now supports objects in Portable Object Format (POF).

- Fixed race condition that could result in spurious wrong results appearing in a `ContinuousQueryCache` call.

- Fixed an issue that results in NPE during cluster start up if the system parameter `port-auto-adjust=false` and the unicast listener port is unavailable.

- Reduced contention on `BackingMapManagerContext.getBackingMap()` method.

- Fixed an issue that could result in `NullPointerException` after `Guardian` recovery or termination.

- Fixed issue causing the maintenance of sorted indices to be extremely slow.

- Fixed an issue causing service-level `Guardian` configuration to be ignored.

- Corrected the `listener` element definition in `cache-config.dtd`.

- Fixed an issue that caused aggressive write-behind operations to miss one entry per batch.

## 1.3 Oracle Coherence for .NET 3.6.1

The following is a list of new features, improvements, and bug fixes in Oracle Coherence for .NET 3.6.1:

- Fixed an issue where port `PofExtractor` failed to extract values from uniform collections to C++ and .NET.

- Provided a more detailed exception message when a client fails to connect to a proxy server.

- Introduced user-defined indexes, which can be used to control what entries are added to an index. User-defined indexes are typically used to reduce the memory and processing overhead required to maintain an index.

- Fixed an issue that prevented clients from transparently reconnecting after being rejected by a proxy server.

- Fixed an issue that prevented the `EmbeddedResource` class from being able to load assemblies installed in the GAC.

- Optimized the `PofHelper.ResizeArray()` implementation.

- Fixed an issue in `CacheFactory` that could cause an exception during concurrent `EnsureLogger()` calls.

- Fixed an issue in the `CoherenceSessionStore` that caused an exception when accessing an expired session.

- Added a new `CompositeKey` utility class.

- Fixed an issue in `PofStreamReader` that prevented reading a uniform POF collection into a generic collection object.

- Removed validation logic in POF date deserialization that limited the year range to between 1582 and 2199.

## 1.4 Oracle Coherence for C++ 3.6.1

The following is a list of new features, improvements, and bug fixes in Oracle Coherence for C++ 3.6.1:

- Provided a more detailed exception message when a client fails to connect to a proxy server.

- Added a new `AbstractEvolvable` base class for simplifying the creation of evolvable classes.

- Introduced user-defined indexes, which can be used to control what entries are added to an index. User-defined indexes are typically used to reduce the memory and processing overhead required to maintain an index.

- Fixed an issue that prevented the `Managed<T>` class from wrapping types with custom memory allocators.

- Fixed an issue that prevented clients from transparently reconnecting after being rejected by a proxy server.

- Fixed an issue that caused a segmentation fault (segfault) when creating a string from invalid UTF-8 input.

- Fixed an issue that caused the truncation of a non-ASCII string when converted to a `std::string`.

- Fixed incorrect POF mappings for the `RequestTimeoutException` and `ConnectionException` classes.

- Added a new `CompositeKey` utility class.

- Removed validation logic in POF date deserialization that limited the year range to between 1582 and 2199.

## 1.5 Known Problems and Workarounds

This section describes bugs that are know at the time of release.

### 1.5.1 Sharing Coherence*Web Sessions Between WebLogic Server and Other Application Servers

If you have a cluster with WebLogic Server nodes and nodes running other types of application servers, such as Apache Tomcat Server, then the session cookie created by WebLogic Server will not be decoded correctly by Coherence*Web on the other servers. This is because WebLogic Server adds a session affinity suffix to the cookie which is not part of the session ID stored in Coherence*Web. If the other application server type receives a request for the cookie, it will not be found and a new session cookie will be created.

To work around this problem, you must remove the session affinity suffix from the session ID when it is processed by the other application server.

For example, to allow Tomcat Server to remove the session affinity suffix:

1. Create a subclass of the `com.tangosol.coherence.servlet.tomcat55.CookieHelper` class.

   For example, name the subclass `CustomCookieHelper`. Implement the `decodeCookie` and `decodeUrl` methods to remove the session affinity information from the session cookie, for example:

       package com.example;

       import javax.servlet.ServletContext;
       import javax.servlet.http.HttpServletRequest;
       import com.tangosol.coherence.servlet.SessionHelper;

       public class CustomCookieHelper extends SessionHelper {
            protected static final char WLS_JVM_ID_SUFFIX = '!';

          public CustomCookieHelper(Factory factory, ServletContext ctx){
              super(factory, ctx);
          }

          public String decodeCookie(HttpServletRequest req){
              String sSessionId = super.decodeCookie(req);
              if (sSessionId != null){
                  int ofSeparator = sSessionId.indexOf(WLS_JVM_ID_SUFFIX);
                  if (ofSeparator >= 0){
                      sSessionId = sSessionId.substring(0, ofSeparator);
                  }
              }
              return sSessionId;
          }
       }

2. Create a subclass of the `com.tangosol.coherence.servlet.tomcat55.DefaultFactory`. For example, name the subclass `CustomDefaultFactory`. Overload the `instantiateSessionHelper` or the `setSessionHelper` method to use the `CustomDefaultFactory` class, for example:

       package com.example;

       import javax.servlet.ServletContext;

       import com.tangosol.coherence.servlet.SessionHelper;

       public class CustomDefaultFactory extends com.tangosol.coherence.servlet.api25.DefaultFactory {
            public SessionHelper instantiateSessionHelper(ServletContext ctx){
              CustomCookieHelper helper = new CustomCookieHelper(this, ctx);
              setServletContext(ctx);
              setSessionHelper(helper);
              return helper;
          }

          public String toString() {
              return "CustomDefaultFactory (2.5)\n" + indentString(getDescription(), "  ");
          }   }

3. Configure the Web application on the Tomcat Server to use the `CustomDefaultFactory`. In the Web application's `web.xml` file, set the `coherence-factory-class` context parameter to `CustomDefaultFactory`, for example:

       <context-param>
          <param-name>coherence-factory-class</param-name>
          <param-value>com.tangosol.coherence.servlet.tomcat55.CustomDefaultFactory</param-value>
       </context-param>

4. If you want to configure the session to share data across the applications, you must also configure the `coherence-scopecontroller-class` context parameter to use global scope, for example:

       <context-param>
          <param-name>coherence-scopecontroller-class</param-name>
          <param-value>com.tangosol.coherence.servlet.AbstractHttpSessionCollection$GlobalScopeController</param-value>
       </context-param>