Oracle Bedrock
Java
Latest commit b8513eb Mar 26, 2017 Brian Oliver Minor JavaDoc corrections
Permalink
Failed to load latest commit information.
bedrock-coherence Minor JavaDoc corrections Mar 26, 2017
bedrock-core Minor JavaDoc corrections Mar 26, 2017
bedrock-runtime-docker-tests Issue #407: Upgraded dependencies (resolved test failures) Mar 9, 2017
bedrock-runtime-docker [maven-release-plugin] prepare for next development iteration Feb 22, 2017
bedrock-runtime-jacoco [maven-release-plugin] prepare for next development iteration Feb 22, 2017
bedrock-runtime-jprofiler [maven-release-plugin] prepare for next development iteration Feb 22, 2017
bedrock-runtime-maven-tests [maven-release-plugin] prepare for next development iteration Feb 22, 2017
bedrock-runtime-maven [maven-release-plugin] prepare for next development iteration Feb 22, 2017
bedrock-runtime-remote-tests [maven-release-plugin] prepare for next development iteration Feb 22, 2017
bedrock-runtime-remote [maven-release-plugin] prepare for next development iteration Feb 22, 2017
bedrock-runtime-tests Issue #407: Upgraded dependencies (resolved test failures) Mar 9, 2017
bedrock-runtime-vagrant-tests [maven-release-plugin] prepare for next development iteration Feb 22, 2017
bedrock-runtime-vagrant [maven-release-plugin] prepare for next development iteration Feb 22, 2017
bedrock-runtime-virtual-tests [maven-release-plugin] prepare for next development iteration Feb 22, 2017
bedrock-runtime-virtual [maven-release-plugin] prepare for next development iteration Feb 22, 2017
bedrock-runtime-windows-tests [maven-release-plugin] prepare for next development iteration Feb 22, 2017
bedrock-runtime-windows [maven-release-plugin] prepare for next development iteration Feb 22, 2017
bedrock-runtime Minor JavaDoc corrections Mar 26, 2017
bedrock-testing-support-tests [maven-release-plugin] prepare for next development iteration Feb 22, 2017
bedrock-testing-support [maven-release-plugin] prepare for next development iteration Feb 22, 2017
documents ORACLETOOLS-145: Introduced the ability for Platforms to be used (imp… May 3, 2016
.gitignore ORACLETOOLS-285: Introduced Maven Flatten Plugin to remove unnecessar… Jan 31, 2016
CONTRIBUTING.md Updated README, LICENSE and CONTRIBUTIONS documents (for rename) May 2, 2016
LICENSE.md Updated README, LICENSE and CONTRIBUTIONS documents (for rename) May 2, 2016
README.md Updated copyright Jan 11, 2017
pom.xml Issue #407: Upgraded dependencies Mar 9, 2017

README.md

Oracle Bedrock

Oracle Bedrock provides a general purpose Java framework for the development, orchestration and testing of highly concurrent distributed applications.

It's often used for orchestrating and testing multi-server, multi-process distributed applications, meaning it's especially useful for working with Coherence-based applications. However it can be used for any type of application or server, Java or not.

Oracle Bedrock provides extremely uniform mechanisms to start/stop and manage applications and processes on a variety of platforms, including;

  • Local Platforms
  • Remote Platforms (via ssh, powershell et al)
  • Virtualized Platforms (via Vagrant), including machine / platform orchestration (VirtualBox, VMWare etc)
  • Containerized Platforms (via Docker), including image management
  • Java Virtual Machines (aka: in-process applications)

Which means it can orchestrate launching applications/servers in any environment, locally, on-premise, across data-centers or in one or more clouds.

For example: To Launch a "HelloWorld" Java Application on the current classpath on the LocalPlatform, use the following:

    LocalPlatform platform = LocalPlatform.get();

    try (JavaApplication application = platform.launch(JavaApplication.class,
                                                       ClassName.of(HelloWorld.class))) {

        // potentially do something with the application ...

        // wait until it finishes execution
        application.waitFor();
    }

To launch this application on another platform, simply change the platform. The rest of the code remains the same.

    // launch using a RemotePlatform
    RemotePlatform platform = new RemotePlatform(address, username, authentication);

    // ... or launch inside the running JavaVirtualMachine Platform (ie: in-process)
    JavaVirtualMachine platform = JavaVirtualMachine.get();

For Java-based applications, Oracle Bedrock uniquely provides support for:

  • Packaging and automatically deploying applications (based on a ClassPath or Maven Dependency POM)
  • Dynamically interacting with applications at runtime, without requiring technologies like RMI, including the ability to dynamically execute lambdas / remote callables / runnables through an ExecutorService like interface.
    // execute the lambda in the java application, where ever it is running!
    application.submit(() -> { System.out.println("Hello World");});

    // request a lambda to execute (in the java application) and return a result (as a CompleteableFuture)
    CompletableFuture<String> property = application.submit(() -> System.getProperty("os.name"));

Lastly, Oracle Bedrock provides a powerful extension to testing tools, allow developers to Eventually assert that conditions in concurrent data-structures and distributed applications are reached.

   // ensure that the application internal state reaches some condition
   Eventually.assertThat(application, () -> { someFunction() }, is(someValue));

Contributing

Oracle Bedrock is an open source project. Pull Requests are accepted. See CONTRIBUTING for details.

License

Copyright (c) 2010, 2017 Oracle and/or its affiliates. Licensed under the Common Development and Distribution License v1.0 ("CDDL")