Q:

Wildlfy-Swarm Microprofile HealthCheck not responding

I'm trying to implement a microprofile HealthCheck in my wildfly-swarm 2017.12.1 application.
Here's the
@Health
@Dependent
public class SystemHealthChecker extends AbstractHealthChecker {

  @Override
  public HealthCheckResponse call() {
    boolean up;
    Runtime runtime = Runtime.getRuntime();
    long freeMemory = runtime.freeMemory();
    long totalMemory = runtime.totalMemory();
    double percentageFree = freeMemory*100/totalMemory;
    if(percentageFree < 10.0){
      up = false;
    }else{
      up = true;
    }

    Map<String, String> attributes = new HashMap<>();
    attributes.put("Total Memory", totalMemory+"");
    attributes.put("Free Memory", freeMemory+"");
    attributes.put("Percentage Free Memory", percentageFree+"%");
    HealthCheckResponse response = getResponse("System-Check", attributes, up);
    return response;
  }
}

With AbstractHealthChecker as follows:
public abstract class AbstractHealthChecker implements HealthCheck {

  protected HealthCheckResponse getResponse(String name, Map<String, String> data, boolean up){
    HealthCheckResponseBuilder responseBuilder = HealthCheckResponse.named(name);

    responseBuilder.state(up);

    for(String key: data.keySet()){
      responseBuilder.withData(key, data.get(key));
    }
    responseBuilder.withData("Date", new Date().toString());

    return responseBuilder.build();
  }
}

It should check if the systems free memory is below 10%, but doen't really matter.
However, when I start the application, I get the warnings:
2018-01-09 15:23:28,974 WARNING [ServiceLoader] (main) Could not load service class org.wildfly.swarm.microprofile.faulttolerance.deployment.HystrixExtension
2018-01-09 15:23:28,974 WARNING [ServiceLoader] (main) Could not load service class org.wildfly.swarm.microprofile.health.deployment.HealthExtension
2018-01-09 15:23:28,974 WARNING [ServiceLoader] (main) Could not load service class org.wildfly.swarm.microprofile.metrics.deployment.MetricCdiInjectionExtension
2018-01-09 15:23:28,975 WARNING [ServiceLoader] (main) Could not load service class org.wildfly.swarm.cdi.config.deployment.InjectConfigViewExtension
2018-01-09 15:23:28,975 WARNING [ServiceLoader] (main) Could not load service class org.wildfly.swarm.microprofile.jwtauth.deployment.auth.cdi.MPJWTExtension

There is also no real output for the System-Check on the /health endpoint, I only get the following
{
  "outcome": "UP",
  "checks": []
}

so I assume, my HealthCheck wasn't found.
I use the following fractions.
Any idea, what is going wrong?
<dependency>
    <groupId>org.wildfly.swarm</groupId>
    <artifactId>jaxrs</artifactId>
</dependency>
<dependency>
    <groupId>org.wildfly.swarm</groupId>
    <artifactId>ejb</artifactId>
</dependency>
<dependency>
    <groupId>org.wildfly.swarm</groupId>
    <artifactId>cdi</artifactId>
</dependency>
<dependency>
    <groupId>org.wildfly.swarm</groupId>
    <artifactId>microprofile</artifactId>
</dependency>
<dependency>
    <groupId>org.wildfly.swarm</groupId>
    <artifactId>logging</artifactId>
</dependency>

A:

I've removed the AbstractHealthChecker to implement the HealthCheck Interface directly and now it works.
Also I had a secound HealthCheck implementation which didn't seem to work with the @Dependent annoatation. Annotating both with @ApplicationScoped works fine.
So now I have:
@Health
@ApplicationScoped
public class SystemHealthChecker extends AbstractHealthChecker {

  @Override
  public HealthCheckResponse call() {
    boolean up;
    Runtime runtime = Runtime.getRuntime();
    long freeMemory = runtime.freeMemory();
    long totalMemory = runtime.totalMemory();
    double percentageFree = freeMemory*100/totalMemory;
    if(percentageFree < 10.0){
      up = false;
    }else{
      up = true;
    }

    Map<String, String> attributes = new HashMap<>();
    attributes.put("Total Memory", totalMemory+"");
    attributes.put("Free Memory", freeMemory+"");
    attributes.put("Percentage Free Memory", percentageFree+"%");
    HealthCheckResponse response = getResponse("System-Check", attributes, up);
    return response;
  }

  private HealthCheckResponse getResponse(String name, Map<String, String> data, boolean up){
    HealthCheckResponseBuilder responseBuilder = HealthCheckResponse.named(name);

    responseBuilder.state(up);

    for(String key: data.keySet()){
        responseBuilder.withData(key, data.get(key));
    }
    responseBuilder.withData("Date", new Date().toString());

    return responseBuilder.build();
  }
}

And it works.

