initial import
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..49ca981
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea
+*.iml
+target
+
diff --git a/README.adoc b/README.adoc
new file mode 100644
index 0000000..8d4a2f1
--- /dev/null
+++ b/README.adoc
@@ -0,0 +1,10 @@
+= Geronimo Microprofile Health Implementation
+
+[source,xml]
+----
+<parent>
+  <groupId>org.apache.geronimo</groupId>
+  <artifactId>geronimo-health</artifactId>
+  <version>${project.version}</version>
+</parent>
+----
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..dd41ce4
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="
+          http://maven.apache.org/POM/4.0.0
+          http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache</groupId>
+    <artifactId>apache</artifactId>
+    <version>20</version>
+  </parent>
+
+  <groupId>org.apache.geronimo</groupId>
+  <artifactId>geronimo-health</artifactId>
+  <version>1.0.0-SNAPSHOT</version>
+  <name>Geronimo Microprofile Health Implementation</name>
+
+  <description>
+    Apache Geronimo implementation of the Microprofile Health Specification
+  </description>
+
+  <scm>
+    <connection>scm:git:https://gitbox.apache.org/repos/asf/geronimo-health.git</connection>
+    <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/geronimo-health.git</developerConnection>
+    <url>https://gitbox.apache.org/repos/asf/geronimo-health.git</url>
+    <tag>HEAD</tag>
+  </scm>
+
+  <properties>
+    <spec.version>1.0</spec.version>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.eclipse.microprofile.health</groupId>
+      <artifactId>microprofile-health-api</artifactId>
+      <version>${spec.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>tomcat-servlet-api</artifactId>
+      <version>9.0.7</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-jaxrs_2.0_spec</artifactId>
+      <version>1.0-alpha-1</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-json_1.1_spec</artifactId>
+      <version>1.0</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-jsonb_1.0_spec</artifactId>
+      <version>1.0</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-interceptor_1.2_spec</artifactId>
+      <version>1.0</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-atinject_1.0_spec</artifactId>
+      <version>1.0</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-jcdi_2.0_spec</artifactId>
+      <version>1.0.1</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-annotation_1.3_spec</artifactId>
+      <version>1.0</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.microprofile.config</groupId>
+      <artifactId>microprofile-config-api</artifactId>
+      <version>1.2</version>
+      <scope>provided</scope>
+      <optional>true</optional>
+    </dependency>
+
+    <dependency> <!-- issue with the cache key -->
+      <groupId>org.apache.openwebbeans</groupId>
+      <artifactId>openwebbeans-impl</artifactId>
+      <version>2.0.5</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-jacc_1.1_spec</artifactId>
+      <version>1.0.2</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.arquillian.testng</groupId>
+      <artifactId>arquillian-testng-container</artifactId>
+      <version>1.1.13.Final</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.testng</groupId>
+      <artifactId>testng</artifactId>
+      <version>6.8.21</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.meecrowave</groupId>
+      <artifactId>meecrowave-arquillian</artifactId>
+      <version>1.2.1</version>
+      <scope>test</scope>
+      <exclusions>
+        <exclusion>
+          <groupId>javax.inject</groupId>
+          <artifactId>javax.inject</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.microprofile.health</groupId>
+      <artifactId>microprofile-health-tck</artifactId>
+      <version>${spec.version}</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>3.7.0</version>
+        <configuration>
+          <source>1.8</source>
+          <target>1.8</target>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <version>2.22.0</version>
+        <configuration>
+          <dependenciesToScan>
+            <dependency>org.eclipse.microprofile.health:microprofile-health-tck</dependency>
+          </dependenciesToScan>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <version>3.0.2</version>
+        <configuration>
+          <archive combine.children="append">
+            <manifestEntries>
+              <Automatic-Module-Name>org.apache.geronimo.microprofile.health</Automatic-Module-Name>
+            </manifestEntries>
+          </archive>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+  <organization>
+    <name>The Apache Software Foundation</name>
+    <url>http://www.apache.org/</url>
+  </organization>
+
+  <inceptionYear>2018</inceptionYear>
+
+  <licenses>
+    <license>
+      <name>Apache License, Version 2.0</name>
+      <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
+      <distribution>repo</distribution>
+    </license>
+  </licenses>
+
+  <developers>
+    <developer>
+      <name>Apache Geronimo Community</name>
+      <url>https://geronimo.apache.org</url>
+      <organization>Apache</organization>
+    </developer>
+  </developers>
+
+  <issueManagement>
+    <system>ASF JIRA</system>
+    <url>https://issues.apache.org/jira/browse/GERONIMO</url>
+  </issueManagement>
+</project>
diff --git a/src/main/java/org/apache/geronimo/microprofile/impl/health/cdi/GeronimoHealthExtension.java b/src/main/java/org/apache/geronimo/microprofile/impl/health/cdi/GeronimoHealthExtension.java
new file mode 100644
index 0000000..40bc569
--- /dev/null
+++ b/src/main/java/org/apache/geronimo/microprofile/impl/health/cdi/GeronimoHealthExtension.java
@@ -0,0 +1,87 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.geronimo.microprofile.impl.health.cdi;
+
+import static java.util.stream.Collectors.toList;
+
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.AfterDeploymentValidation;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.BeforeShutdown;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.inject.spi.ProcessBean;
+
+import org.eclipse.microprofile.health.Health;
+import org.eclipse.microprofile.health.HealthCheck;
+
+public class GeronimoHealthExtension implements Extension {
+    private final Collection<Bean<?>> beans = new ArrayList<>();
+    private final Collection<CreationalContext<?>> contexts = new ArrayList<>();
+    private List<HealthCheck> checks;
+
+    void findChecks(@Observes final ProcessBean<?> bean) {
+        if (bean.getAnnotated().isAnnotationPresent(Health.class) && bean.getBean().getTypes().contains(HealthCheck.class)) {
+            beans.add(bean.getBean());
+        }
+    }
+
+    void start(@Observes final AfterDeploymentValidation afterDeploymentValidation, final BeanManager beanManager) {
+        checks = beans.stream()
+             .map(it -> lookup(it, beanManager))
+             .collect(toList());
+    }
+
+    void stop(@Observes final BeforeShutdown beforeShutdown) {
+        final IllegalStateException ise = new IllegalStateException("Something went wrong releasing health checks");
+        contexts.forEach(c -> {
+            try {
+                c.release();
+            } catch (final RuntimeException re) {
+                ise.addSuppressed(re);
+            }
+        });
+        final Throwable[] suppressed = ise.getSuppressed();
+        if (suppressed.length == 1) {
+            throw RuntimeException.class.cast(suppressed[0]);
+        } else if (suppressed.length > 1) {
+            throw ise;
+        }
+    }
+
+    public List<HealthCheck> getChecks() {
+        return checks;
+    }
+
+    private HealthCheck lookup(final Bean<?> bean, final BeanManager manager) {
+        final Class<?> type = bean.getBeanClass() == null ? HealthCheck.class : bean.getBeanClass();
+        final Set<Bean<?>> beans = manager.getBeans(type, bean.getQualifiers().toArray(new Annotation[bean.getQualifiers().size()]));
+        final Bean<?> resolvedBean = manager.resolve(beans);
+        final CreationalContext<Object> creationalContext = manager.createCreationalContext(null);
+        if (!manager.isNormalScope(resolvedBean.getScope())) {
+            contexts.add(creationalContext);
+        }
+        return HealthCheck.class.cast(manager.getReference(resolvedBean, HealthCheck.class, creationalContext));
+    }
+}
diff --git a/src/main/java/org/apache/geronimo/microprofile/impl/health/impl/HealthCheckResponseBuilderImpl.java b/src/main/java/org/apache/geronimo/microprofile/impl/health/impl/HealthCheckResponseBuilderImpl.java
new file mode 100644
index 0000000..7e69da6
--- /dev/null
+++ b/src/main/java/org/apache/geronimo/microprofile/impl/health/impl/HealthCheckResponseBuilderImpl.java
@@ -0,0 +1,85 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.geronimo.microprofile.impl.health.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.microprofile.health.HealthCheckResponse;
+import org.eclipse.microprofile.health.HealthCheckResponseBuilder;
+
+public class HealthCheckResponseBuilderImpl extends HealthCheckResponseBuilder {
+    private HealthCheckResponseImpl response = new HealthCheckResponseImpl();
+
+    @Override
+    public HealthCheckResponseBuilder name(final String name) {
+        response.setName(name);
+        return this;
+    }
+
+    @Override
+    public HealthCheckResponseBuilder withData(final String key, final String value) {
+        data().put(key, value);
+        return this;
+    }
+
+    @Override
+    public HealthCheckResponseBuilder withData(final String key, final long value) {
+        data().put(key, value);
+        return this;
+    }
+
+    @Override
+    public HealthCheckResponseBuilder withData(final String key, final boolean value) {
+        data().put(key, value);
+        return this;
+    }
+
+    @Override
+    public HealthCheckResponseBuilder up() {
+        response.setState(HealthCheckResponse.State.UP);
+        return this;
+    }
+
+    @Override
+    public HealthCheckResponseBuilder down() {
+        response.setState(HealthCheckResponse.State.DOWN);
+        return this;
+    }
+
+    @Override
+    public HealthCheckResponseBuilder state(final boolean up) {
+        if (up) {
+            up();
+        } else {
+            down();
+        }
+        return this;
+    }
+
+    @Override
+    public HealthCheckResponse build() {
+        return response;
+    }
+
+    private Map<String, Object> data() {
+        if (response.getRawData() == null) {
+            response.setData(new HashMap<>());
+        }
+        return response.getRawData();
+    }
+}
diff --git a/src/main/java/org/apache/geronimo/microprofile/impl/health/impl/HealthCheckResponseImpl.java b/src/main/java/org/apache/geronimo/microprofile/impl/health/impl/HealthCheckResponseImpl.java
new file mode 100644
index 0000000..aa927dd
--- /dev/null
+++ b/src/main/java/org/apache/geronimo/microprofile/impl/health/impl/HealthCheckResponseImpl.java
@@ -0,0 +1,64 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.geronimo.microprofile.impl.health.impl;
+
+import java.util.Map;
+import java.util.Optional;
+
+import javax.json.bind.annotation.JsonbProperty;
+import javax.json.bind.annotation.JsonbTransient;
+
+import org.eclipse.microprofile.health.HealthCheckResponse;
+
+public class HealthCheckResponseImpl extends HealthCheckResponse {
+    private String name;
+    private State state;
+    private Map<String, Object> data;
+
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public State getState() {
+        return state;
+    }
+
+    @JsonbProperty("data")
+    public Map<String, Object> getRawData() {
+        return data;
+    }
+
+    @Override
+    @JsonbTransient
+    public Optional<Map<String, Object>> getData() {
+        return Optional.ofNullable(data);
+    }
+
+    public void setName(final String name) {
+        this.name = name;
+    }
+
+    public void setState(final State state) {
+        this.state = state;
+    }
+
+    public void setData(final Map<String, Object> data) {
+        this.data = data;
+    }
+}
diff --git a/src/main/java/org/apache/geronimo/microprofile/impl/health/impl/HealthCheckResponseProviderImpl.java b/src/main/java/org/apache/geronimo/microprofile/impl/health/impl/HealthCheckResponseProviderImpl.java
new file mode 100644
index 0000000..c22c651
--- /dev/null
+++ b/src/main/java/org/apache/geronimo/microprofile/impl/health/impl/HealthCheckResponseProviderImpl.java
@@ -0,0 +1,27 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.geronimo.microprofile.impl.health.impl;
+
+import org.eclipse.microprofile.health.HealthCheckResponseBuilder;
+import org.eclipse.microprofile.health.spi.HealthCheckResponseProvider;
+
+public class HealthCheckResponseProviderImpl implements HealthCheckResponseProvider {
+    @Override
+    public HealthCheckResponseBuilder createResponseBuilder() {
+        return new HealthCheckResponseBuilderImpl();
+    }
+}
diff --git a/src/main/java/org/apache/geronimo/microprofile/impl/health/jaxrs/HealthChecksEndpoint.java b/src/main/java/org/apache/geronimo/microprofile/impl/health/jaxrs/HealthChecksEndpoint.java
new file mode 100644
index 0000000..bde8326
--- /dev/null
+++ b/src/main/java/org/apache/geronimo/microprofile/impl/health/jaxrs/HealthChecksEndpoint.java
@@ -0,0 +1,81 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.geronimo.microprofile.impl.health.jaxrs;
+
+import static java.util.stream.Collectors.toList;
+
+import java.util.Collection;
+import java.util.List;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.apache.geronimo.microprofile.impl.health.cdi.GeronimoHealthExtension;
+import org.eclipse.microprofile.health.HealthCheck;
+import org.eclipse.microprofile.health.HealthCheckResponse;
+
+@Path("health")
+@ApplicationScoped
+public class HealthChecksEndpoint {
+    @Inject
+    private GeronimoHealthExtension extension;
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public Response getChecks() {
+        final List<HealthCheckResponse> checks = extension.getChecks()
+                                                           .stream()
+                                                           .map(HealthCheck::call)
+                                                           .collect(toList());
+        final HealthCheckResponse.State globalState = checks.stream()
+                    .reduce(HealthCheckResponse.State.UP, (a, b) -> combine(a, b.getState()), this::combine);
+        return Response.status(globalState == HealthCheckResponse.State.DOWN ? Response.Status.SERVICE_UNAVAILABLE : Response.Status.OK).entity(new AggregatedResponse(globalState, checks)).build();
+    }
+
+    private HealthCheckResponse.State combine(final HealthCheckResponse.State a, final HealthCheckResponse.State b) {
+        return a == HealthCheckResponse.State.DOWN || b == HealthCheckResponse.State.DOWN ? HealthCheckResponse.State.DOWN : a;
+    }
+
+    public static class AggregatedResponse {
+        private HealthCheckResponse.State status;
+        private Collection<HealthCheckResponse> checks;
+
+        private AggregatedResponse(final HealthCheckResponse.State state,
+                                  final Collection<HealthCheckResponse> checks) {
+            this.status = state;
+            this.checks = checks;
+        }
+
+        public HealthCheckResponse.State getStatus() {
+            return status;
+        }
+
+        @Deprecated
+        public HealthCheckResponse.State getOutcome() {
+            return status;
+        }
+
+        public Collection<HealthCheckResponse> getChecks() {
+            return checks;
+        }
+    }
+}
diff --git a/src/main/resources/META-INF/beans.xml b/src/main/resources/META-INF/beans.xml
new file mode 100644
index 0000000..70dd4a9
--- /dev/null
+++ b/src/main/resources/META-INF/beans.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="
+        http://xmlns.jcp.org/xml/ns/javaee
+        http://xmlns.jcp.org/xml/ns/javaee/beans_2_0.xsd"
+       bean-discovery-mode="all"
+       version="2.0">
+  <trim/>
+</beans>
diff --git a/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension b/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
new file mode 100644
index 0000000..611f876
--- /dev/null
+++ b/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
@@ -0,0 +1 @@
+org.apache.geronimo.microprofile.impl.health.cdi.GeronimoHealthExtension
diff --git a/src/main/resources/META-INF/services/org.eclipse.microprofile.health.spi.HealthCheckResponseProvider b/src/main/resources/META-INF/services/org.eclipse.microprofile.health.spi.HealthCheckResponseProvider
new file mode 100644
index 0000000..e8b051a
--- /dev/null
+++ b/src/main/resources/META-INF/services/org.eclipse.microprofile.health.spi.HealthCheckResponseProvider
@@ -0,0 +1 @@
+org.apache.geronimo.microprofile.impl.health.impl.HealthCheckResponseProviderImpl
diff --git a/src/test/resources/arquillian.xml b/src/test/resources/arquillian.xml
new file mode 100644
index 0000000..71adc2b
--- /dev/null
+++ b/src/test/resources/arquillian.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+       http://www.apache.org/licenses/LICENSE-2.0
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<arquillian xmlns="http://jboss.org/schema/arquillian"
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xsi:schemaLocation="
+              http://jboss.org/schema/arquillian
+              http://jboss.org/schema/arquillian/arquillian_1_0.xsd">
+  <container qualifier="default" default="true">
+    <configuration>
+      <property name="tempDir">target/meecrowave/temp</property>
+      <property name="scanningExcludes">
+        org.osgi,
+        arquillian,
+        microprofile-
+      </property>
+    </configuration>
+  </container>
+</arquillian>