package test;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.enterprise.context.NormalScope;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@NormalScope
public @interface MyScoped {
}
package test;
import java.lang.annotation.Annotation;
import java.util.Map;
import java.util.HashMap;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.context.spi.Context;
import javax.enterprise.context.spi.Contextual;
import javax.enterprise.context.spi.CreationalContext;
public class MyContext implements Context {
    private Map<String,Object> cache = new HashMap<String,Object>();
    public <T> T get(Contextual<T> ctx) {
        return null;
    }
    public <T> T get(Contextual<T> ctx, CreationalContext<T> crectx) {
        String clz = ((Bean<T>)ctx).getBeanClass().getName();
        @SuppressWarnings("unchecked")
        T o = (T)cache.get(clz);
        if(o == null) {
            o = ctx.create(crectx);
            cache.put(clz, o);
        }
        return o;
    }
    public Class<? extends Annotation> getScope() {
        return MyScoped.class;
    }
    public boolean isActive() {
        return true;
    }
    public void reset() {
        cache.clear();
    }
}
package test;
import javax.enterprise.event.Observes;
import javax.enterprise.inject.spi.AfterBeanDiscovery;
import javax.enterprise.inject.spi.BeanManager;
import javax.enterprise.inject.spi.Extension;
public class MyContextExtension implements Extension {
    public void afterBeanDiscovery(@Observes AfterBeanDiscovery event, BeanManager manager) {
        event.addContext(new MyContext());
    }
}
...
        <jar basedir="${bin}" includes="**/My*.class" destfile="${jar}">
            <service type="javax.enterprise.inject.spi.Extension" provider="test.MyContextExtension"/>
        </jar>
...
    @Inject
    private BeanManager bm;
    ...
            // MyScope is now out of scope !!
            ((MyContext)bm.getContext(MyScoped.class)).reset();
MyScoped er i scope indtil eksplicit smidt ud.