/* * Copyright 2013 eXo Platform SAS * * Licensed 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 juzu.impl.inject.spi.cdi.weld; import juzu.Scope; import juzu.impl.inject.ScopeController; import juzu.impl.fs.spi.ReadFileSystem; import juzu.impl.inject.spi.cdi.Container; import org.jboss.weld.bootstrap.WeldBootstrap; import org.jboss.weld.bootstrap.api.Bootstrap; import org.jboss.weld.bootstrap.api.Environments; import org.jboss.weld.bootstrap.api.ServiceRegistry; import org.jboss.weld.bootstrap.api.helpers.SimpleServiceRegistry; import org.jboss.weld.bootstrap.spi.BeanDeploymentArchive; import org.jboss.weld.bootstrap.spi.Deployment; import org.jboss.weld.bootstrap.spi.Metadata; import javax.enterprise.inject.spi.BeanManager; import javax.enterprise.inject.spi.Extension; import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Set; /** @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> */ public class WeldContainer extends Container { /** . */ final ClassLoader classLoader; /** . */ final Bootstrap bootstrap; /** . */ private BeanManager manager; @Override protected void doStart(List<ReadFileSystem<?>> fileSystems) throws Exception { final BeanDeploymentArchiveImpl bda = new BeanDeploymentArchiveImpl(this, "foo", fileSystems); // Deployment deployment = new Deployment() { /** . */ final SimpleServiceRegistry registry = new SimpleServiceRegistry(); /** . */ final List<BeanDeploymentArchive> bdas = Arrays.<BeanDeploymentArchive>asList(bda); public Collection<BeanDeploymentArchive> getBeanDeploymentArchives() { return bdas; } public BeanDeploymentArchive loadBeanDeploymentArchive(Class<?> beanClass) { return bda; } public ServiceRegistry getServices() { return registry; } public Iterable<Metadata<Extension>> getExtensions() { return bootstrap.loadExtensions(Thread.currentThread().getContextClassLoader()); } }; // bootstrap.startContainer(Environments.SERVLET, deployment); bootstrap.startInitialization(); bootstrap.deployBeans(); bootstrap.validateBeans(); bootstrap.endInitialization(); // manager = bootstrap.getManager(bda); } public WeldContainer(ClassLoader classLoader, ScopeController scopeController, Set<Scope> scopes) { super(scopeController, scopes); // this.classLoader = classLoader; this.bootstrap = new WeldBootstrap(); } @Override public BeanManager getManager() { return manager; } @Override public ClassLoader getClassLoader() { return classLoader; } @Override protected void doStop() { if (bootstrap != null) { bootstrap.shutdown(); } } }