Announcing WildFly Swarm 2016.11.0

November means the release of 2016.11.0!

Celebrating National Pepper Month, at least for some nations, we’re happy to announce the release of WildFly Swarm version 2016.11.0.

What’s New?

  • Enhanced JAX-RS client library

  • Support for Flyway schema migration for relational databases

  • Improved Arquillian testing (still in progress)

What is WildFly Swarm?

WildFly Swarm is the decomposition and reconstitution of the popular WildFly Java Application Server in order to support just enough appserver for microservice type applications.

Each portion of the appserver is referred to as a fraction, which many times maps to a subsystem from WildFly, but also may include other discrete chunks of non-Java EE or WIldFly functionality, such as Swagger, Jolokia or NetflixOSS Ribbon.

JAX-RS Client

If you’re developing with JAX-RS and CDI we’ve just made it a lot easier to call external services!

Say we want to call an external service that returns the time. We can define an interface that maps onto the method we want to call, such as:

@Path("time")
@Service(baseUrl = "http://localhost:8080/")
public interface TimeService extends ServiceClient<TimeService> {
    @GET
    @Path("default")
    @Produces(MediaType.TEXT_PLAIN)
    String getTime();
}

We specify @Service with the url of the service. In future enhancements we will integrate this annotation with our topology for service discovery.

We can then @Inject an instance of the service and call it as if it was a local method:

@Path("/messages")
@ApplicationScoped
public class MessageResource {
    @Inject
    TimeService timeService;

    @GET
    @Path("/sync")
    public String getMessageSync() throws Exception {
        return timeService.getTime();
    }
}

If we want the external call to be handled asynchronously we can do the following:

    @GET
    @Path("/async")
    public void getMessageAsync(@Suspended final AsyncResponse asyncResponse) throws Exception {
        timeService.exec(() -> timeService.getTime(),
                         s -> asyncResponse.resume(s),
                         asyncResponse::resume);
    }

We look forward to hearing your feedback on what we’ve currently done and what additional features you would like it to support.

Flyway integration

Flyway is an open-source database migration tool. It strongly favors simplicity and convention over configuration. We’ve introduced a new flyway fraction that automatically executes your SQL scripts located in src/main/resources/db/migration when your microservice starts. Check this example and read more about Flyway here.

Improved Arquillian

While we continue to improve our testing story with Arquillian, the biggest visible change in this release the availability of @DefaultDeployment annotation. This annotation may be applied at the class level of your test, and removes the need to provide a static method marked @Deployment constructing your deployment. It attempts to construct a reasonable default deployment so that you don’t have to.

Gradle. Sigh.

We still include the Gradle plugin, but we disavow any knowledge about it or expectation that it works. We’ve removed the Gradle examples from the active build of our examples repository. We have found that Gradle does not consistently handle our tree of parent POMs and importation of BOMs for version management. We may completely remove Gradle support in a future version, unless some Gradle-loving community member wants to volunteer to knock it into shape. The core team is simply lacking the resources to improve and maintain it.

Changelog

Release notes for 2016.11.0 are available here.

Bug

  • [SWARM-809] wildfly-swarm:start can be fooled by implicit deployments. (Done)

  • [SWARM-801] Missing components in camel-other fraction (Done)

  • [SWARM-799] Arq drones don’t work on mac os sierra (Done)

  • [SWARM-791] ArtifactNotFoundException is thrown when resolving dependencies in wildfly-swarm-plugin (Done)

  • [SWARM-781] CDI Fraction should ensure presence of beans.xml (Won’t Fix)

  • [SWARM-766] Fix Typos on Website Tutorial Step-5 (Done)

  • [SWARM-765] Typos on Web Tutorial Step 4 (Done)

  • [SWARM-763] Documentation typo on step-3 page of the web tutorial (Done)

  • [SWARM-762] Artifact resolution for wildfly-swarm-plugin ignores <mirrorOf> from settings.xml (Done)

  • [SWARM-757] javax.persistence.PersistenceException: [PersistenceUnit: primary] Unable to build Hibernate SessionFactory when using Infinispan as 2nd level cache for hibernate (Done)

  • [SWARM-754] Documentation typo on step-1 page (Done)

  • [SWARM-753] Documentation typo on Prerequisites page (Done)

  • [SWARM-733] Generator does not honor group/artifact id for package (Done)

  • [SWARM-691] Multiple Archive#as(Secured.class) executions occur ParseError of web.xml (Done)

  • [SWARM-687] jaxrs-validator fraction is not auto-detected by the wildfly-swarm-plugin (Done)

  • [SWARM-683] Adding camel-other as dependencies fail with a ArtifactNotFoundException when executing (Done)

  • [SWARM-676] Running tests inside IDE present java.lang.ClassNotFoundException: org.yaml.snakeyaml.Yaml (Done)

  • [SWARM-673] Weld SE container STATIC_INSTANCE is already running! (Done)

  • [SWARM-671] mvn wildfly-swarm:package fails with "File must be specified" (Done)

  • [SWARM-661] Swarmtool does not work on non-bash shells (Done)

  • [SWARM-645] When parsing standalone.xml, any unrecognized XML elements produce a scary stack trace (Done)

  • [SWARM-642] wildfly-swarm-plugin does not work when running in Gradle 3 (Cannot Reproduce Bug)

  • [SWARM-624] Add zipkin support to booker (Done)

  • [SWARM-491] Cannot use Arquillian Wildfly Swarm Container with Gradle (Done)

Task

  • [SWARM-805] Move the jdr fraction out of the fractions/javaee path (Done)

  • [SWARM-760] Verify status of unstable fractions and mark as stable where necessary (Done)

  • [SWARM-756] Restructure Maven modules (Done)

  • [SWARM-755] Remove undertow-js fraction (Done)

  • [SWARM-727] plugin:package goals executed twice (Done)

  • [SWARM-725] Update Booker to recent Swarm version (Done)

Enhancement

  • [SWARM-804] Enhance Zipkin fraction to accept a service name (Done)

  • [SWARM-769] Fix broken JIRA link in README (Done)

  • [SWARM-761] Upgrade to wildfly-camel-4.3.0 (Done)

  • [SWARM-752] ModuleLoader MBeans should be registered when Swarm boots up (Done)

  • [SWARM-750] module-rewrite.conf should support exporting modules (Done)

  • [SWARM-749] module-rewrite.conf should support including modules (Done)

  • [SWARM-706] Improve test coverage of Project Stages (Done)

  • [SWARM-603] Pluggable user space extension method (Done)

  • [SWARM-531] Investigate support for health indicators (Done)

Component Upgrade

Sub-task

  • [SWARM-787] Support a main=MyMain.class on @DefaultDeployment. (Done)

  • [SWARM-778] Make it easier to generate ARQ @Deployment-type of things (Done)

  • [SWARM-775] Turn our Arquillian support into a bonafide fraction. (Done)

Feature Request

  • [SWARM-771] Provide a zipkin fraction (Done)

  • [SWARM-768] Honor swarm.project.stage as environment variable (Done)

  • [SWARM-715] Enhanced JAX-RS Client API (Done)

  • [SWARM-478] Wildfly Swarm Flyway Integration (Done)

Resources

Per usual, we tend to hang out on irc.freenode.net in #wildfly-swarm.

All bug and feature-tracking is kept in JIRA.

Documentation for this release is available.

Thank you, Contributors!

We appreciate all of our contributors since the last release:

Core

  • Heiko Braun

  • Thomas Diesler

  • Ken Finnigan

  • George Gastaldi

  • Dimitris Mandalidis

  • Bob McWhirter

  • Charles Moulliard

  • James Netherton

  • Ted Won

Documentation

  • Ken Finnigan

  • George Gastaldi

  • Bob McWhirter

Examples

  • Ola Petersson

  • Heiko Braun

  • Thomas Diesler

  • Ken Finnigan

  • George Gastaldi

  • Bob McWhirter