The following sections outline Oracle Tools project changes in reverse chronological order.
ORACLETOOLS-49: Introduced the concept of Capture to capture a single value from an underlying Iterator. This allows said values to be reused without causing new values to the produced by the underlying Iterator.
ORACLETOOLS-51: Introduced the CompletionListener and ExceptionListener interfaces together with FutureCompletionListener and DeferredCompletionListener implementations for the RemoteExecutor framework.
ORACLETOOLS-51: Introduced the RemoteExecutor framework to support remote execution of Callable and Runnables in Java-based Applications. Implemented support for both Container-based and Native Java Applications.
eg: application.submit(Callable<T>, CompletionListener<T>)
Stateful Callables / Runnables will need to be Serializable in order to be successfully executed correctly, for both in-process/Container-based applications and Remote/Native applications.
Introduced the com.oracle.tools.runtime.concurrent package together with a Socket-based implementation.
This framework is also used to implement "orphan" protection (see below).
ORACLETOOLS-52: Implemented "Orphan Protection" for Java-based Applications.
Refactored how Native Java Applications are started so that they may optionally be "orphaned" if the starting process terminates (deliberately or accidentally).
Added new options to the NativeJavaApplicationBuilder to selectively enable orphan protection (enabled by default) - if a parent process terminates, child processes terminate.
ORACLETOOLS-51: Introduced RemoteExecutors framework tests.
ORACLETOOLS-52: Introduced "Orphan Protection" tests.
ORACLETOOLS-54: Introduced the ability to use Deferreds to represent Remote Callables together with a new Eventually.assertThat method to allow deferred asserts based on submitted Callables.
eg: Eventually.assertThat(application, callable, matcher);
will try to eventually match the result of the specified Callable when executed, possibly numerous times, with the provided application.
ORACLETOOLS-59: Introduced the com.oracle.tools.deferred.Eventually static class to replace the now deprecated DeferredAssert class.
ORACLETOOLS-50: Introduced the ability to set the "tangosol.coherence.localport" property and have it automatically set when WKA is set.
ORACLETOOLS-53: Refactor Coherence-based Tools to use RemoteExecutors to determine Member state instead of relying on JMX/MBeans. It's now possible to use and control ClusterMembers and Clusters with JMX disabled.
ORACLETOOLS-55: Upgraded to use Coherence 220.127.116.11.
ORACLETOOLS-56: Introduced the ability to ask the name of a ClusterMember cluster.
ORACLETOOLS-57: Introduced the ability specify the operational override for a ClusterMember.
ORACLETOOLS-58: Introduced the ability to ask a ClusterMember if a particular service is running.
Refactored existing tests to take advantage of the new Remote Executables framework and avoid the requirement to use and configure JMX.
Refactored existing tests to take advantage of the new Eventually.assertThat method.
Refactored existing tests to take advantage of the Captures when creating Clusters using a ClusterBuilder.
Introduced new tests for the new features in the oracle-tools-coherence package.
Huge thanks to everyone that contributed feedback, suggestions, documentation and ideas for this release. It's great to see broader application adoption, especially outside Oracle Coherence environments. We're looking forward to an even greater release soon, simplifying the testing process even further!
ORACLETOOLS-25: Upgrade Project Parent POM to Version 4.
ORACLETOOLS-31: Upgrade GitHub Maven Site Plugin to Version 0.8.
ORACLETOOLS-14: Removed Notified Deferred implementation as by nature they are unreliable.
ORACLETOOLS-39: Introduced numerous configurable strategies for waiting for Deferreds to become available (as implemented by the Ensured class). These include: constant (polling), fibonacci (random and uniform), exponential (random and uniform).
Configuring these options occurs by setting the "oracletools.deferred.retry.strategy" system property with the values: constant, fibonacci, random.fibonacci, exponential or random.exponential. The default is now random.fibonacci (instead of constant polling)
Also introduced the ability to use a system property to set the default retry timeout (which is 30 seconds). The property is: "oracletools.defered.retry.timeout". Units of measure include: ms, s, m and h meaning milliseconds, seconds, minutes and hours respectively.
Breaking Change: While this is a breaking change, the chance of an application being impacted is very minimal, if at all. Only applications making customize time-out calls, which is rare, will be affected.
ORACLETOOLS-40: Refactored Deferred.get() semantics to allow returning null as a valid reference.
Introduced InstanceUnavailableException to represent the concept that a Deferred instance is currently unavailable, but may become available in the future. ie: this is thrown instead of null being returned.
Replaced the ObjectNotAvailableException with the UnresolveableInstanceException.
Breaking Change: While this is a breaking change, the chance of an application being impacted is very minimal, if at all. Only applications creating customized Deferred implementations, which is rare, will be affected.
ORACLETOOLS-12: Resolved issue when Native processes would fail to execute due to timing and class-path issues (on Windows Platforms).
ORACLETOOLS-13: Resolved issue Oracle Tools virtualization would fail to run when classpaths contain whitespace (on Windows Platforms).
ORACLETOOLS-21: Refactored and renamed Virtualization package and associated Virtualizeed Application, Virtualized Process and Virtualize Builders to be themed as being "ContainerBased". This was to clear up possible confusion when running Native applications on Virtualized infrastructure. As part of this work we also renamed ExternalJavaApplicationBuilder to be a NativeJavaApplicationBuilder.
ORACLETOOLS-26: Refactored the ApplicationConsole interfaces and implementations to allow separate control of stdout, stderr and stdin.
ORACLETOOLS-27: Introduced the concept of "diagnostics" to provide application life-cycle information without requiring redirection of ApplicationConsoles.
ORACLETOOLS-28: Introduced the ability to enable remote Java debugging (when using Java-based Application Schemas) for Native Java Applications.
ORACLETOOLS-29: Resolved issue where the names of Applications created as part of an Group start at 0 instead of 1.
ORACLETOOLS-30: Resolves issue where Native Windows NT / XP processes may hang when being destroyed.
ORACLETOOLS-32: ApplicationSchemas now default to inheriting environment variables from the underlying process.
ORACLETOOLS-36: Resolves issues where having spaces in a System Property may cause a Native Java application not to start.
ORACLETOOLS-37: Renamed and refactored PropertiesBuilder.fromCurrentSystemProperties to return only custom properties. The new method is called PropertiesBuilder.fromCurrentNonStandardSystemProperties.
Breaking Change: While this is a breaking change, the chance of an application being impacted is very minimal, if at all. Applications using the previous method would not support cross-platform deployment. Changing to the new method resolves this.
ORACLETOOLS-2: Resolved issue when DeferredAssert would hang (wait for a long time) when querying an MBean for a crashed server.
ORACLETOOLS-4: Resolved issue when calling "eventually" on a non existent MBean would hang forever (wait for a long time).
ORACLETOOLS-10: Add support for specifying a log destination for Coherence when using a Coherence-based MemeberSchema.
ORACLETOOLS-35: Add automatic support enabling file-base XSD loading with Coherence using Java 8 (b91) that includes JAXP 1.5 changes.
ORACLETOOLS-38: Add automatic support for running in "java.awt.headless" mode.