Skip to content

Instantly share code, notes, and snippets.

View ljnelson's full-sized avatar
🙃

Laird Nelson ljnelson

🙃
View GitHub Profile
private static final class PropertyLiteral extends AnnotationLiteral<Property> implements Property {
private static final long serialVersionUID = 1L;
private final String value;
private PropertyLiteral() {
this("");
}
private PropertyLiteral(final String value) {
super();
@Produces
@Dependent
@Property
private static final Object produceProperty(final InjectionPoint injectionPoint, final BigCoConfigurationEngine config) {
Objects.requireNonNull(config);
Object returnValue = null;
if (injectionPoint == null) {
// This is a case that really shouldn't happen.
return null; // ok to do with Dependent scope
} else {
/*
* Copyright © 2016–2017 Laird Nelson. Released under the terms of the MIT license: https://opensource.org/licenses/MIT
*/
package com.serverco;
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
private final void installConfigurationValueProducerMethods(@Observes final AfterBeanDiscovery event, final BeanManager beanManager) {
if (event != null && beanManager != null) {
final Instance<Object> i = beanManager.createInstance();
assert i != null;
final Instance<Configurations> configurationsInstance = i.select(Configurations.class);
assert configurationsInstance != null;
if (configurationsInstance.isResolvable()) {
final Configurations configurations = configurationsInstance.get();
assert configurations != null;
// Note: no @Produces!
@ConfigurationValue
@Dependent
private static final Object produceConfigurationValue(final InjectionPoint injectionPoint, final Configurations configurations) {
Objects.requireNonNull(injectionPoint);
Objects.requireNonNull(configurations);
final String name = getConfigurationPropertyName(injectionPoint);
assert name != null;
return configurations.getValue(name, injectionPoint.getType()); // let's say this causes conversion
}
// ConfigurationsExtension is our Extension class within which all this activity is taking place.
final AnnotatedType<ConfigurationsExtension> thisType = beanManager.createAnnotatedType(ConfigurationsExtension.class);
final AnnotatedMethod<? super ConfigurationsExtension> producerMethod = thisType.getMethods().stream()
.filter(m -> m.getJavaMember().getName().equals("produceConfigurationValue"))
.findFirst()
.get();
final BeanAttributes<?> producerAttributes = beanManager.createBeanAttributes(producerMethod);
public class DelegatingBeanAttributes<T> implements BeanAttributes<T> {
private final BeanAttributes<?> delegate;
public DelegatingBeanAttributes(final BeanAttributes<?> delegate) {
super();
Objects.requireNonNull(delegate);
this.delegate = delegate;
}
private final void installConfigurationValueProducerMethods(@Observes final AfterBeanDiscovery event, final BeanManager beanManager) {
if (event != null && beanManager != null) {
// Get a Configurations object.
final Instance<Object> i = beanManager.createInstance();
assert i != null;
final Instance<Configurations> configurationsInstance = i.select(Configurations.class);
assert configurationsInstance != null;
if (configurationsInstance.isResolvable()) {
final Configurations configurations = configurationsInstance.get();
private final CountDownLatch latch;
private final Collection<HttpServer> startedHttpServers;
public HttpServerStartingExtension() {
super();
this.startedHttpServers = new LinkedList<>();
this.latch = new CountDownLatch(1);
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
latch.countDown();
private static final class BlockingEvent {
private BlockingEvent() {
super();
}
}