> visitorFunction) {
bytecodeTransformers.add(visitorFunction);
diff --git a/core/deployment/src/main/java/org/jboss/shamrock/deployment/ClassOutput.java b/core/deployment/src/main/java/org/jboss/shamrock/deployment/ClassOutput.java
index fc025799dce5b..e827bead9964d 100644
--- a/core/deployment/src/main/java/org/jboss/shamrock/deployment/ClassOutput.java
+++ b/core/deployment/src/main/java/org/jboss/shamrock/deployment/ClassOutput.java
@@ -16,4 +16,6 @@ public interface ClassOutput {
*/
void writeClass(boolean applicationClass, String className, byte[] data) throws IOException;
+ void writeResource(String name, byte[] data) throws IOException;
+
}
diff --git a/core/deployment/src/main/java/org/jboss/shamrock/deployment/CoreSetup.java b/core/deployment/src/main/java/org/jboss/shamrock/deployment/CoreSetup.java
index 4d88dfee50ecc..f4fa41262bedf 100644
--- a/core/deployment/src/main/java/org/jboss/shamrock/deployment/CoreSetup.java
+++ b/core/deployment/src/main/java/org/jboss/shamrock/deployment/CoreSetup.java
@@ -4,5 +4,7 @@ public class CoreSetup implements ShamrockSetup {
@Override
public void setup(SetupContext context) {
context.addInjectionProvider(new ConfigInjectionProvider());
+ context.addInjectionProvider(new BeanDeploymentInjectionProvider());
+ context.addResourceProcessor(new BeanArchiveProcessor());
}
}
diff --git a/core/deployment/src/main/java/org/jboss/shamrock/deployment/ProcessorContext.java b/core/deployment/src/main/java/org/jboss/shamrock/deployment/ProcessorContext.java
index d27bcd41558b7..5215d5e2ff8fb 100644
--- a/core/deployment/src/main/java/org/jboss/shamrock/deployment/ProcessorContext.java
+++ b/core/deployment/src/main/java/org/jboss/shamrock/deployment/ProcessorContext.java
@@ -50,6 +50,8 @@ public interface ProcessorContext {
*/
void addGeneratedClass(boolean applicationClass, String name, byte[] classData) throws IOException;
+ void addResource(String name, byte[] data) throws IOException;
+
/**
* Adds a bytecode transformer that can transform application classes.
*
diff --git a/core/deployment/src/main/java/org/jboss/shamrock/deployment/RuntimePriority.java b/core/deployment/src/main/java/org/jboss/shamrock/deployment/RuntimePriority.java
index e8276c7efe700..146bab928106c 100644
--- a/core/deployment/src/main/java/org/jboss/shamrock/deployment/RuntimePriority.java
+++ b/core/deployment/src/main/java/org/jboss/shamrock/deployment/RuntimePriority.java
@@ -12,6 +12,7 @@ public class RuntimePriority {
public static final int HEALTH_DEPLOYMENT = 260;
public static final int WELD_DEPLOYMENT = 300;
public static final int JAXRS_DEPLOYMENT = 350;
+ public static final int ARC_DEPLOYMENT = 300;
public static final int UNDERTOW_DEPLOY = 400;
public static final int UNDERTOW_START = 500;
diff --git a/core/deployment/src/main/java/org/jboss/shamrock/runner/RuntimeClassLoader.java b/core/deployment/src/main/java/org/jboss/shamrock/runner/RuntimeClassLoader.java
index 432ba1cd5d235..d17feae3c9ab8 100644
--- a/core/deployment/src/main/java/org/jboss/shamrock/runner/RuntimeClassLoader.java
+++ b/core/deployment/src/main/java/org/jboss/shamrock/runner/RuntimeClassLoader.java
@@ -1,19 +1,19 @@
package org.jboss.shamrock.runner;
+import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
-import java.lang.reflect.AccessibleObject;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLStreamHandler;
import java.nio.file.Files;
import java.nio.file.Path;
-import java.security.AccessController;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-import java.security.ProtectionDomain;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -27,13 +27,13 @@
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
-import sun.misc.Unsafe;
-
public class RuntimeClassLoader extends ClassLoader implements ClassOutput, Consumer>>> {
private final Map appClasses = new HashMap<>();
private final Set frameworkClasses = new HashSet<>();
+ private final Map resources = new HashMap<>();
+
private volatile List>> functions = null;
private final Path applicationClasses;
@@ -46,6 +46,31 @@ public RuntimeClassLoader(ClassLoader parent, Path applicationClasses) {
this.applicationClasses = applicationClasses;
}
+ @Override
+ public Enumeration getResources(String name) throws IOException {
+ // TODO some superugly hack for bean provider
+ byte[] data = resources.get(name);
+ if (data != null) {
+ URL url = new URL(null, "shamrock:" + name + "/", new URLStreamHandler() {
+ @Override
+ protected URLConnection openConnection(final URL u) throws IOException {
+ return new URLConnection(u) {
+ @Override
+ public void connect() throws IOException {
+ }
+
+ @Override
+ public InputStream getInputStream() throws IOException {
+ return new ByteArrayInputStream(resources.get(name));
+ }
+ };
+ }
+ });
+ return Collections.enumeration(Collections.singleton(url));
+ }
+ return super.getResources(name);
+ }
+
@Override
protected Class> loadClass(String name, boolean resolve) throws ClassNotFoundException {
Class> ex = findLoadedClass(name);
@@ -137,8 +162,12 @@ public void writeClass(boolean applicationClass, String className, byte[] data)
}
}
- @Override
public void accept(List>> functions) {
this.functions = functions;
}
+
+ public void writeResource(String name, byte[] data) throws IOException {
+ resources.put(name, data);
+ }
+
}
diff --git a/core/deployment/src/test/java/org/jboss/shamrock/deployment/codegen/BytecodeRecorderTestCase.java b/core/deployment/src/test/java/org/jboss/shamrock/deployment/codegen/BytecodeRecorderTestCase.java
index 615856342f165..bdfa62f7afb93 100644
--- a/core/deployment/src/test/java/org/jboss/shamrock/deployment/codegen/BytecodeRecorderTestCase.java
+++ b/core/deployment/src/test/java/org/jboss/shamrock/deployment/codegen/BytecodeRecorderTestCase.java
@@ -106,5 +106,10 @@ public TestClassOutput(TestClassLoader tcl) {
public void writeClass(boolean applicationClass, String className, byte[] data) throws IOException {
tcl.write(className, data);
}
+
+ @Override
+ public void writeResource(String name, byte[] data) throws IOException {
+ throw new UnsupportedOperationException();
+ }
}
}
diff --git a/core/runtime/src/main/java/org/jboss/shamrock/runtime/BeanContainer.java b/core/runtime/src/main/java/org/jboss/shamrock/runtime/BeanContainer.java
new file mode 100644
index 0000000000000..ddfb3f47e6445
--- /dev/null
+++ b/core/runtime/src/main/java/org/jboss/shamrock/runtime/BeanContainer.java
@@ -0,0 +1,9 @@
+package org.jboss.shamrock.runtime;
+
+import java.lang.annotation.Annotation;
+
+public interface BeanContainer {
+
+ T instance(Class type, Annotation... qualifiers);
+
+}
diff --git a/examples/permissive/pom.xml b/examples/permissive/pom.xml
index 6e727ab510bfc..86d646c007421 100644
--- a/examples/permissive/pom.xml
+++ b/examples/permissive/pom.xml
@@ -17,11 +17,6 @@
shamrock-undertow-deployment
provided
-
- org.jboss.shamrock
- shamrock-weld-deployment
- provided
-
org.jboss.shamrock
shamrock-jaxrs-deployment
@@ -126,6 +121,39 @@
+
+
+ weld
+
+
+ !arc
+
+
+
+
+ org.jboss.shamrock
+ shamrock-weld-deployment
+ provided
+
+
+
+
+
+ arc
+
+
+ arc
+ true
+
+
+
+
+ org.jboss.shamrock
+ shamrock-arc-deployment
+ provided
+
+
+
diff --git a/examples/permissive/src/main/java/org/jboss/shamrock/example/InjectionServlet.java b/examples/permissive/src/main/java/org/jboss/shamrock/example/InjectionServlet.java
index c8372faca86c5..cc945ac295363 100644
--- a/examples/permissive/src/main/java/org/jboss/shamrock/example/InjectionServlet.java
+++ b/examples/permissive/src/main/java/org/jboss/shamrock/example/InjectionServlet.java
@@ -13,7 +13,7 @@
public class InjectionServlet extends HttpServlet {
@Inject
- private MessageBean messageBean;
+ MessageBean messageBean;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
diff --git a/examples/permissive/src/main/java/org/jboss/shamrock/example/MessageBean.java b/examples/permissive/src/main/java/org/jboss/shamrock/example/MessageBean.java
index 70f945622122b..7723f71bcee03 100644
--- a/examples/permissive/src/main/java/org/jboss/shamrock/example/MessageBean.java
+++ b/examples/permissive/src/main/java/org/jboss/shamrock/example/MessageBean.java
@@ -1,9 +1,8 @@
package org.jboss.shamrock.example;
-import javax.enterprise.context.ApplicationScoped;
-
import java.util.Optional;
+import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import org.eclipse.microprofile.config.Config;
@@ -12,7 +11,7 @@
public class MessageBean {
@Inject
- private Config config;
+ Config config;
public String getMessage() {
Optional message = config.getOptionalValue("message", String.class);
diff --git a/examples/permissive/src/main/java/org/jboss/shamrock/example/SimpleHealthCheck.java b/examples/permissive/src/main/java/org/jboss/shamrock/example/SimpleHealthCheck.java
index 6212ca57cb65e..c2e459db51230 100644
--- a/examples/permissive/src/main/java/org/jboss/shamrock/example/SimpleHealthCheck.java
+++ b/examples/permissive/src/main/java/org/jboss/shamrock/example/SimpleHealthCheck.java
@@ -3,13 +3,17 @@
import java.util.Map;
import java.util.Optional;
+import javax.enterprise.context.Dependent;
+
import org.eclipse.microprofile.health.Health;
import org.eclipse.microprofile.health.HealthCheck;
import org.eclipse.microprofile.health.HealthCheckResponse;
+@Dependent
@Health
public class SimpleHealthCheck implements HealthCheck {
- @Override
+
+ @Override
public HealthCheckResponse call() {
return new HealthCheckResponse() {
@Override
diff --git a/examples/permissive/src/main/java/org/jboss/shamrock/example/rest/InjectionResource.java b/examples/permissive/src/main/java/org/jboss/shamrock/example/rest/InjectionResource.java
index c3adaa8087d91..cc82bd5595b63 100644
--- a/examples/permissive/src/main/java/org/jboss/shamrock/example/rest/InjectionResource.java
+++ b/examples/permissive/src/main/java/org/jboss/shamrock/example/rest/InjectionResource.java
@@ -10,19 +10,19 @@
@Path("/test")
public class InjectionResource {
- @Inject
- private MessageBean messageBean;
+ @Inject
+ MessageBean messageBean;
- @GET
- @Counted(monotonic = true)
- public String getTest() {
- return "TEST";
- }
+ @GET
+ @Counted(monotonic = true)
+ public String getTest() {
+ return "TEST";
+ }
- @GET
- @Path("/injection")
- public String get() {
- return messageBean.getMessage();
- }
+ @GET
+ @Path("/injection")
+ public String get() {
+ return messageBean.getMessage();
+ }
}
diff --git a/health/deployment/pom.xml b/health/deployment/pom.xml
index 0107640cda5b6..f48cdd040a1b8 100644
--- a/health/deployment/pom.xml
+++ b/health/deployment/pom.xml
@@ -17,10 +17,6 @@
org.jboss.shamrock
shamrock-core-deployment
-
- org.jboss.shamrock
- shamrock-weld-deployment
-
org.jboss.shamrock
shamrock-undertow-deployment
diff --git a/health/deployment/src/main/java/org/jboss/shamrock/health/HealthProcessor.java b/health/deployment/src/main/java/org/jboss/shamrock/health/HealthProcessor.java
index 77ef689479158..34ad4da9f644c 100644
--- a/health/deployment/src/main/java/org/jboss/shamrock/health/HealthProcessor.java
+++ b/health/deployment/src/main/java/org/jboss/shamrock/health/HealthProcessor.java
@@ -3,18 +3,20 @@
import javax.inject.Inject;
import org.jboss.shamrock.deployment.ArchiveContext;
+import org.jboss.shamrock.deployment.BeanDeployment;
import org.jboss.shamrock.deployment.ProcessorContext;
import org.jboss.shamrock.deployment.ResourceProcessor;
import org.jboss.shamrock.deployment.ShamrockConfig;
import org.jboss.shamrock.health.runtime.HealthServlet;
import org.jboss.shamrock.undertow.ServletData;
import org.jboss.shamrock.undertow.ServletDeployment;
-import org.jboss.shamrock.weld.deployment.WeldDeployment;
+
+import io.smallrye.health.SmallRyeHealthReporter;
class HealthProcessor implements ResourceProcessor {
@Inject
- private WeldDeployment weldDeployment;
+ private BeanDeployment beanDeployment;
@Inject
private ShamrockConfig config;
@@ -27,7 +29,8 @@ public void process(ArchiveContext archiveContext, ProcessorContext processorCon
ServletData servletData = new ServletData("health", HealthServlet.class.getName());
servletData.getMapings().add(config.getConfig("health.path", "/health"));
servletDeployment.addServlet(servletData);
- weldDeployment.addAdditionalBean(HealthServlet.class);
+ beanDeployment.addAdditionalBean(SmallRyeHealthReporter.class);
+ beanDeployment.addAdditionalBean(HealthServlet.class);
}
@Override
diff --git a/health/runtime/src/main/java/org/jboss/shamrock/health/runtime/HealthServlet.java b/health/runtime/src/main/java/org/jboss/shamrock/health/runtime/HealthServlet.java
index d47c2a87d83c3..958455ac8f4ff 100644
--- a/health/runtime/src/main/java/org/jboss/shamrock/health/runtime/HealthServlet.java
+++ b/health/runtime/src/main/java/org/jboss/shamrock/health/runtime/HealthServlet.java
@@ -18,7 +18,7 @@
public class HealthServlet extends HttpServlet {
@Inject
- private SmallRyeHealthReporter reporter;
+ SmallRyeHealthReporter reporter;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
diff --git a/jaxrs/runtime/src/main/java/org/jboss/shamrock/jaxrs/runtime/graal/JaxrsTemplate.java b/jaxrs/runtime/src/main/java/org/jboss/shamrock/jaxrs/runtime/graal/JaxrsTemplate.java
index 85677afe8a6be..8b98e6e4db362 100644
--- a/jaxrs/runtime/src/main/java/org/jboss/shamrock/jaxrs/runtime/graal/JaxrsTemplate.java
+++ b/jaxrs/runtime/src/main/java/org/jboss/shamrock/jaxrs/runtime/graal/JaxrsTemplate.java
@@ -1,7 +1,6 @@
package org.jboss.shamrock.jaxrs.runtime.graal;
-import javax.enterprise.inject.se.SeContainer;
-
+import org.jboss.shamrock.runtime.BeanContainer;
import org.jboss.shamrock.runtime.ContextObject;
/**
@@ -9,7 +8,7 @@
*/
public class JaxrsTemplate {
- public void setupIntegration(@ContextObject("weld.container")SeContainer container) {
+ public void setupIntegration(@ContextObject("bean.container") BeanContainer container) {
ShamrockInjectorFactory.CONTAINER = container;
}
diff --git a/jaxrs/runtime/src/main/java/org/jboss/shamrock/jaxrs/runtime/graal/ShamrockConstructorInjector.java b/jaxrs/runtime/src/main/java/org/jboss/shamrock/jaxrs/runtime/graal/ShamrockConstructorInjector.java
index c88408bf6dc7f..3fe7d551ddeb9 100644
--- a/jaxrs/runtime/src/main/java/org/jboss/shamrock/jaxrs/runtime/graal/ShamrockConstructorInjector.java
+++ b/jaxrs/runtime/src/main/java/org/jboss/shamrock/jaxrs/runtime/graal/ShamrockConstructorInjector.java
@@ -2,7 +2,6 @@
import java.lang.reflect.Constructor;
-import javax.enterprise.inject.Instance;
import javax.ws.rs.WebApplicationException;
import org.jboss.resteasy.spi.ApplicationException;
@@ -33,8 +32,7 @@ public Object construct(HttpRequest request, HttpResponse response) throws Failu
if (ShamrockInjectorFactory.CONTAINER == null) {
return delegate.construct(request, response);
}
- Instance object = ShamrockInjectorFactory.CONTAINER.select(this.ctor.getDeclaringClass());
- return object.get();
+ return ShamrockInjectorFactory.CONTAINER.instance(this.ctor.getDeclaringClass());
}
@Override
diff --git a/jaxrs/runtime/src/main/java/org/jboss/shamrock/jaxrs/runtime/graal/ShamrockInjectorFactory.java b/jaxrs/runtime/src/main/java/org/jboss/shamrock/jaxrs/runtime/graal/ShamrockInjectorFactory.java
index 5cdb7bda6cc40..fce37d1c7d980 100644
--- a/jaxrs/runtime/src/main/java/org/jboss/shamrock/jaxrs/runtime/graal/ShamrockInjectorFactory.java
+++ b/jaxrs/runtime/src/main/java/org/jboss/shamrock/jaxrs/runtime/graal/ShamrockInjectorFactory.java
@@ -2,19 +2,18 @@
import java.lang.reflect.Constructor;
-import javax.enterprise.inject.se.SeContainer;
-
import org.jboss.resteasy.core.InjectorFactoryImpl;
import org.jboss.resteasy.spi.ConstructorInjector;
import org.jboss.resteasy.spi.ResteasyProviderFactory;
import org.jboss.resteasy.spi.metadata.ResourceConstructor;
+import org.jboss.shamrock.runtime.BeanContainer;
/**
* Created by bob on 7/31/18.
*/
public class ShamrockInjectorFactory extends InjectorFactoryImpl {
- public static volatile SeContainer CONTAINER = null;
+ public static volatile BeanContainer CONTAINER = null;
@Override
public ConstructorInjector createConstructor(Constructor constructor, ResteasyProviderFactory providerFactory) {
diff --git a/maven/src/main/java/org/jboss/shamrock/maven/BuildMojo.java b/maven/src/main/java/org/jboss/shamrock/maven/BuildMojo.java
index 85d899b93cfd5..ecc83b1dd560f 100644
--- a/maven/src/main/java/org/jboss/shamrock/maven/BuildMojo.java
+++ b/maven/src/main/java/org/jboss/shamrock/maven/BuildMojo.java
@@ -36,7 +36,6 @@
import org.apache.maven.project.MavenProject;
import org.jboss.shamrock.deployment.BuildTimeGenerator;
import org.jboss.shamrock.deployment.ClassOutput;
-import org.jboss.shamrock.deployment.index.MapArtifactResolver;
import org.jboss.shamrock.deployment.index.ResolvedArtifact;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
@@ -169,6 +168,16 @@ public void writeClass(boolean applicationClass, String className, byte[] data)
out.write(data);
}
}
+
+ @Override
+ public void writeResource(String name, byte[] data) throws IOException {
+ File file = new File(wiringClassesDirectory, name);
+ file.getParentFile().mkdirs();
+ try (FileOutputStream out = new FileOutputStream(file)) {
+ out.write(data);
+ }
+ }
+
}, runnerClassLoader, useStaticInit);
ClassLoader old = Thread.currentThread().getContextClassLoader();
try {
diff --git a/metrics/deployment/pom.xml b/metrics/deployment/pom.xml
index fb4b822decc72..3f972e3519694 100644
--- a/metrics/deployment/pom.xml
+++ b/metrics/deployment/pom.xml
@@ -17,10 +17,6 @@
org.jboss.shamrock
shamrock-core-deployment
-
- org.jboss.shamrock
- shamrock-weld-deployment
-
org.jboss.shamrock
shamrock-undertow-deployment
diff --git a/metrics/deployment/src/main/java/org/jboss/shamrock/metrics/MetricsProcessor.java b/metrics/deployment/src/main/java/org/jboss/shamrock/metrics/MetricsProcessor.java
index 7848d758953f4..6eec7280d23f8 100644
--- a/metrics/deployment/src/main/java/org/jboss/shamrock/metrics/MetricsProcessor.java
+++ b/metrics/deployment/src/main/java/org/jboss/shamrock/metrics/MetricsProcessor.java
@@ -3,15 +3,19 @@
import java.util.Collection;
import javax.inject.Inject;
+import javax.interceptor.Interceptor;
import org.eclipse.microprofile.metrics.annotation.Counted;
import org.jboss.jandex.AnnotationInstance;
import org.jboss.jandex.AnnotationTarget;
+import org.jboss.jandex.AnnotationTarget.Kind;
import org.jboss.jandex.ClassInfo;
import org.jboss.jandex.DotName;
import org.jboss.jandex.IndexView;
import org.jboss.jandex.MethodInfo;
import org.jboss.shamrock.deployment.ArchiveContext;
+import org.jboss.shamrock.deployment.BeanArchiveIndex;
+import org.jboss.shamrock.deployment.BeanDeployment;
import org.jboss.shamrock.deployment.ProcessorContext;
import org.jboss.shamrock.deployment.ResourceProcessor;
import org.jboss.shamrock.deployment.RuntimePriority;
@@ -21,8 +25,6 @@
import org.jboss.shamrock.metrics.runtime.MetricsServlet;
import org.jboss.shamrock.undertow.ServletData;
import org.jboss.shamrock.undertow.ServletDeployment;
-import org.jboss.shamrock.weld.deployment.BeanArchiveIndex;
-import org.jboss.shamrock.weld.deployment.WeldDeployment;
import io.smallrye.metrics.MetricProducer;
import io.smallrye.metrics.MetricRegistries;
@@ -40,7 +42,7 @@ public class MetricsProcessor implements ResourceProcessor {
@Inject
- private WeldDeployment weldDeployment;
+ private BeanDeployment beanDeployment;
@Inject
private ShamrockConfig config;
@@ -57,16 +59,16 @@ public void process(ArchiveContext archiveContext, ProcessorContext processorCon
servletData.getMapings().add(config.getConfig("metrics.path", "/metrics"));
servletDeployment.addServlet(servletData);
- weldDeployment.addAdditionalBean(MetricProducer.class,
+ beanDeployment.addAdditionalBean(MetricProducer.class,
MetricNameFactory.class,
MetricRegistries.class);
- weldDeployment.addAdditionalBean(MetricsInterceptor.class,
+ beanDeployment.addAdditionalBean(MetricsInterceptor.class,
MeteredInterceptor.class,
CountedInterceptor.class,
TimedInterceptor.class);
- weldDeployment.addAdditionalBean(MetricsRequestHandler.class, MetricsServlet.class);
+ beanDeployment.addAdditionalBean(MetricsRequestHandler.class, MetricsServlet.class);
//weldDeployment.addInterceptor(MetricsInterceptor.class);
//weldDeployment.addInterceptor(MeteredInterceptor.class);
//weldDeployment.addInterceptor(CountedInterceptor.class);
@@ -86,6 +88,12 @@ public void process(ArchiveContext archiveContext, ProcessorContext processorCon
for (AnnotationInstance anno : annos) {
AnnotationTarget target = anno.target();
+ // TODO ugly hack to exclude metrics interceptors
+ if (Kind.CLASS.equals(target.kind())
+ && target.asClass().classAnnotations().stream().anyMatch(a -> a.name().equals(DotName.createSimple(Interceptor.class.getName())))) {
+ continue;
+ }
+
MethodInfo methodInfo = target.asMethod();
ClassInfo classInfo = methodInfo.declaringClass();
diff --git a/metrics/runtime/src/main/java/org/jboss/shamrock/metrics/runtime/MetricsDeploymentTemplate.java b/metrics/runtime/src/main/java/org/jboss/shamrock/metrics/runtime/MetricsDeploymentTemplate.java
index da20ed118be3a..4d2d3cdbd469d 100644
--- a/metrics/runtime/src/main/java/org/jboss/shamrock/metrics/runtime/MetricsDeploymentTemplate.java
+++ b/metrics/runtime/src/main/java/org/jboss/shamrock/metrics/runtime/MetricsDeploymentTemplate.java
@@ -3,26 +3,19 @@
import java.lang.management.GarbageCollectorMXBean;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
-import java.lang.management.MemoryPoolMXBean;
import java.lang.management.ThreadMXBean;
-import java.lang.reflect.AnnotatedElement;
-import java.lang.reflect.Member;
-import java.lang.reflect.Method;
-import java.util.Arrays;
import java.util.List;
-import javax.enterprise.inject.se.SeContainer;
-
-import io.smallrye.metrics.MetricRegistries;
-import io.smallrye.metrics.app.CounterImpl;
-import io.smallrye.metrics.interceptors.MetricResolver;
import org.eclipse.microprofile.metrics.Metadata;
import org.eclipse.microprofile.metrics.MetricRegistry;
import org.eclipse.microprofile.metrics.MetricType;
-import org.eclipse.microprofile.metrics.annotation.Counted;
-import org.eclipse.microprofile.metrics.annotation.Metric;
+import org.jboss.shamrock.runtime.BeanContainer;
import org.jboss.shamrock.runtime.ContextObject;
+import io.smallrye.metrics.MetricRegistries;
+import io.smallrye.metrics.app.CounterImpl;
+import io.smallrye.metrics.interceptors.MetricResolver;
+
/**
* Created by bob on 7/30/18.
*/
@@ -108,7 +101,7 @@ public void registerVendorMetrics() {
}
- public void createRegistries(@ContextObject("weld.container") SeContainer container) {
+ public void createRegistries(@ContextObject("bean.container") BeanContainer container) {
System.err.println("creating registries");
MetricRegistries.get(MetricRegistry.Type.APPLICATION);
MetricRegistries.get(MetricRegistry.Type.BASE);
@@ -117,6 +110,6 @@ public void createRegistries(@ContextObject("weld.container") SeContainer contai
//HACK: registration is does via statics, but cleanup is done via pre destroy
//however if the bean is not used it will not be created, so no cleanup will be done
//we force bean creation here to make sure the container can restart correctly
- container.select(MetricRegistries.class).iterator().next().getApplicationRegistry();
+ container.instance(MetricRegistries.class).getApplicationRegistry();
}
}
diff --git a/metrics/runtime/src/main/java/org/jboss/shamrock/metrics/runtime/MetricsServlet.java b/metrics/runtime/src/main/java/org/jboss/shamrock/metrics/runtime/MetricsServlet.java
index e8bcd83caf9d9..261a3fdd7614c 100644
--- a/metrics/runtime/src/main/java/org/jboss/shamrock/metrics/runtime/MetricsServlet.java
+++ b/metrics/runtime/src/main/java/org/jboss/shamrock/metrics/runtime/MetricsServlet.java
@@ -19,7 +19,7 @@
public class MetricsServlet extends HttpServlet {
@Inject
- private MetricsRequestHandler metricsHandler;
+ MetricsRequestHandler metricsHandler;
@Override
protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws IOException {
diff --git a/pom.xml b/pom.xml
index 194dc4f4f531f..f000c47dd8baf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,7 +15,7 @@
pom
- 2.0.5.Final
+ 2.0.6.Final-SNAPSHOT
3.5.1.Final
3.0.4.Final
2.0.12.Final
@@ -45,6 +45,7 @@
2.9.5
1.8.3
1.2
+ 1.0.0-SNAPSHOT
@@ -59,6 +60,7 @@
examples
jpa
gizmo
+ arc
@@ -199,6 +201,16 @@
shamrock-jpa-runtime
${project.version}
+
+ org.jboss.shamrock
+ shamrock-arc-deployment
+ ${project.version}
+
+
+ org.jboss.shamrock
+ shamrock-arc-runtime
+ ${project.version}
+
org.jboss.protean.gizmo
@@ -416,6 +428,16 @@
weld-se-core
${weld-se-core.version}
+
+ org.jboss.protean.arc
+ arc-processor
+ ${arc.version}
+
+
+ org.jboss.protean.arc
+ arc-runtime
+ ${arc.version}
+
org.jboss.xnio
xnio-api
diff --git a/weld/deployment/src/main/java/org/jboss/shamrock/weld/deployment/WeldAnnotationProcessor.java b/weld/deployment/src/main/java/org/jboss/shamrock/weld/deployment/WeldAnnotationProcessor.java
index 92aa8a509a34a..df65fe21d20dc 100644
--- a/weld/deployment/src/main/java/org/jboss/shamrock/weld/deployment/WeldAnnotationProcessor.java
+++ b/weld/deployment/src/main/java/org/jboss/shamrock/weld/deployment/WeldAnnotationProcessor.java
@@ -7,6 +7,8 @@
import org.jboss.jandex.ClassInfo;
import org.jboss.jandex.IndexView;
import org.jboss.shamrock.deployment.ArchiveContext;
+import org.jboss.shamrock.deployment.BeanArchiveIndex;
+import org.jboss.shamrock.deployment.BeanDeployment;
import org.jboss.shamrock.deployment.ProcessorContext;
import org.jboss.shamrock.deployment.ResourceProcessor;
import org.jboss.shamrock.deployment.RuntimePriority;
@@ -18,15 +20,16 @@
public class WeldAnnotationProcessor implements ResourceProcessor {
@Inject
- private WeldDeployment weldDeployment;
+ private BeanDeployment beanDeployment;
@Inject
private BeanArchiveIndex beanArchiveIndex;
@Override
public void process(ArchiveContext archiveContext, ProcessorContext processorContext) throws Exception {
- weldDeployment.addAdditionalBean(ConfigProducer.class);
IndexView index = beanArchiveIndex.getIndex();
+ //make config injectable
+ beanDeployment.addAdditionalBean(ConfigProducer.class);
try (BytecodeRecorder recorder = processorContext.addStaticInitTask(RuntimePriority.WELD_DEPLOYMENT)) {
WeldDeploymentTemplate template = recorder.getRecordingProxy(WeldDeploymentTemplate.class);
SeContainerInitializer init = template.createWeld();
@@ -35,13 +38,11 @@ public void process(ArchiveContext archiveContext, ProcessorContext processorCon
template.addClass(init, recorder.classProxy(name));
processorContext.addReflectiveClass(true, true, name);
}
- for (Class> clazz : weldDeployment.getAdditionalBeans()) {
+ for (Class> clazz : beanDeployment.getAdditionalBeans()) {
template.addClass(init, clazz);
}
- for (Class> clazz : weldDeployment.getInterceptors()) {
- template.addInterceptor(init, clazz);
- }
SeContainer weld = template.doBoot(null, init);
+ template.initBeanContainer(weld);
template.setupInjection(null, weld);
}
diff --git a/weld/deployment/src/main/java/org/jboss/shamrock/weld/deployment/WeldDeployment.java b/weld/deployment/src/main/java/org/jboss/shamrock/weld/deployment/WeldDeployment.java
deleted file mode 100644
index 4705f3dc2dde0..0000000000000
--- a/weld/deployment/src/main/java/org/jboss/shamrock/weld/deployment/WeldDeployment.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package org.jboss.shamrock.weld.deployment;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-public class WeldDeployment {
-
- private final List> additionalBeans = new ArrayList<>();
- private final List> interceptors = new ArrayList<>();
-
- public void addAdditionalBean(Class> ... beanClass) {
- additionalBeans.addAll(Arrays.asList(beanClass));
- }
-
- List> getAdditionalBeans() {
- return additionalBeans;
- }
-
- public void addInterceptor(Class> interceptorClass) {
- this.interceptors.add( interceptorClass);
- }
-
- List> getInterceptors() {
- return this.interceptors;
- }
-
-}
diff --git a/weld/deployment/src/main/java/org/jboss/shamrock/weld/deployment/WeldSetup.java b/weld/deployment/src/main/java/org/jboss/shamrock/weld/deployment/WeldSetup.java
index add9c61ee3951..3b151ddf5eaa5 100644
--- a/weld/deployment/src/main/java/org/jboss/shamrock/weld/deployment/WeldSetup.java
+++ b/weld/deployment/src/main/java/org/jboss/shamrock/weld/deployment/WeldSetup.java
@@ -6,9 +6,7 @@
public class WeldSetup implements ShamrockSetup {
@Override
public void setup(SetupContext context) {
- context.addInjectionProvider(new WeldInjectionProvider());
context.addResourceProcessor(new WeldAnnotationProcessor());
- context.addResourceProcessor(new BeanArchiveProcessor());
context.addApplicationArchiveMarker("META-INF/beans.xml");
context.addApplicationArchiveMarker("META-INF/services/javax.enterprise.inject.spi.Extension");
}
diff --git a/weld/runtime/src/main/java/org/jboss/shamrock/weld/runtime/WeldDeploymentTemplate.java b/weld/runtime/src/main/java/org/jboss/shamrock/weld/runtime/WeldDeploymentTemplate.java
index b6162cdba606c..fe2062bd66e54 100644
--- a/weld/runtime/src/main/java/org/jboss/shamrock/weld/runtime/WeldDeploymentTemplate.java
+++ b/weld/runtime/src/main/java/org/jboss/shamrock/weld/runtime/WeldDeploymentTemplate.java
@@ -2,6 +2,7 @@
import java.io.Closeable;
import java.io.IOException;
+import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.net.URL;
import java.net.URLConnection;
@@ -15,6 +16,7 @@
import javax.enterprise.inject.se.SeContainerInitializer;
import javax.enterprise.inject.spi.Bean;
+import org.jboss.shamrock.runtime.BeanContainer;
import org.jboss.shamrock.runtime.ContextObject;
import org.jboss.shamrock.runtime.InjectionFactory;
import org.jboss.shamrock.runtime.InjectionInstance;
@@ -122,4 +124,15 @@ public void close() throws IOException {
});
}
+ @ContextObject("bean.container")
+ public BeanContainer initBeanContainer(SeContainer container) throws Exception {
+ return new BeanContainer() {
+
+ @Override
+ public T instance(Class type, Annotation... qualifiers) {
+ return container.select(type, qualifiers).get();
+ }
+ };
+ }
+
}