You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by st...@apache.org on 2017/05/29 15:08:03 UTC

svn commit: r1796645 - in /geronimo/specs/trunk/geronimo-jcdi_2.0_spec/src/main/java/javax/enterprise/inject/se: ./ SeContainer.java SeContainerInitializer.java

Author: struberg
Date: Mon May 29 15:08:03 2017
New Revision: 1796645

URL: http://svn.apache.org/viewvc?rev=1796645&view=rev
Log:
GERONIMO-6553 adding SE support for CDI

Patch from John Ament (johndament).
Thanks for the work!

Added:
    geronimo/specs/trunk/geronimo-jcdi_2.0_spec/src/main/java/javax/enterprise/inject/se/
    geronimo/specs/trunk/geronimo-jcdi_2.0_spec/src/main/java/javax/enterprise/inject/se/SeContainer.java   (with props)
    geronimo/specs/trunk/geronimo-jcdi_2.0_spec/src/main/java/javax/enterprise/inject/se/SeContainerInitializer.java   (with props)

Added: geronimo/specs/trunk/geronimo-jcdi_2.0_spec/src/main/java/javax/enterprise/inject/se/SeContainer.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-jcdi_2.0_spec/src/main/java/javax/enterprise/inject/se/SeContainer.java?rev=1796645&view=auto
==============================================================================
--- geronimo/specs/trunk/geronimo-jcdi_2.0_spec/src/main/java/javax/enterprise/inject/se/SeContainer.java (added)
+++ geronimo/specs/trunk/geronimo-jcdi_2.0_spec/src/main/java/javax/enterprise/inject/se/SeContainer.java Mon May 29 15:08:03 2017
@@ -0,0 +1,49 @@
+/*
+ *  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 javax.enterprise.inject.se;
+
+import javax.enterprise.inject.Instance;
+import javax.enterprise.inject.spi.BeanManager;
+
+/**
+ * A representation of the SeContainer that was bootstrapped from a SeContainerInitializer
+ */
+public interface SeContainer extends Instance<Object>,AutoCloseable
+{
+    /**
+     * Shuts down this SeContainer instance.  This is invoked automatically when used with a try-with-resources block
+     *
+     * @throws IllegalStateException if the container is already shutdown
+     */
+    @Override
+    void close();
+
+    /**
+     * @return true if invoked before calling close(), false if it was shut down
+     */
+    boolean isRunning();
+
+    /**
+     * @return the BeanManager that is backing this SeContainer
+     * @throws IllegalStateException if the container was already shut down
+     */
+    BeanManager getBeanManager();
+
+}
\ No newline at end of file

Propchange: geronimo/specs/trunk/geronimo-jcdi_2.0_spec/src/main/java/javax/enterprise/inject/se/SeContainer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: geronimo/specs/trunk/geronimo-jcdi_2.0_spec/src/main/java/javax/enterprise/inject/se/SeContainerInitializer.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-jcdi_2.0_spec/src/main/java/javax/enterprise/inject/se/SeContainerInitializer.java?rev=1796645&view=auto
==============================================================================
--- geronimo/specs/trunk/geronimo-jcdi_2.0_spec/src/main/java/javax/enterprise/inject/se/SeContainerInitializer.java (added)
+++ geronimo/specs/trunk/geronimo-jcdi_2.0_spec/src/main/java/javax/enterprise/inject/se/SeContainerInitializer.java Mon May 29 15:08:03 2017
@@ -0,0 +1,187 @@
+/*
+ *  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 javax.enterprise.inject.se;
+
+
+import java.lang.annotation.Annotation;
+import java.util.Map;
+import java.util.ServiceLoader;
+
+import javax.enterprise.inject.spi.Extension;
+
+/**
+ * This is a builder class for a synthetic bean archive that will be used in an SE Deployment of CDI.
+ *
+ * Invoking newInstance() creates a new one from a ServiceLoader, and by default will load all JARs from the classpath
+ * unless you invoke disableDiscovery() and manually load classes in to the archive.
+ */
+@SuppressWarnings("unchecked")
+public abstract class SeContainerInitializer
+{
+
+    /**
+     * Instantiates a new SeContainerInitializer via ServiceLoader
+     * @return the SeContainerInitializer implementation found via ServiceLoader
+     * @throws IllegalStateException if 0 or more than 1 SeContainerInitializer found.
+     */
+    public static SeContainerInitializer newInstance()
+    {
+        ServiceLoader<SeContainerInitializer> serviceLoader =
+                ServiceLoader.load(SeContainerInitializer.class, SeContainerInitializer.class.getClassLoader());
+        long exactSize = serviceLoader.spliterator().getExactSizeIfKnown();
+        if(exactSize == 0)
+        {
+            throw new IllegalStateException("No valid implementation of SeContainerInitializer found via ServiceLoader");
+        }
+        else if(exactSize > 1)
+        {
+            throw new IllegalStateException("Multiple implementations ("+exactSize+") of SeContainerInitializer found via ServiceLoader");
+        }
+        return serviceLoader.iterator().next();
+    }
+
+    /**
+     * Adds the listed classes to the resulting synthetic bean archive
+     * @param classes
+     * @return this
+     */
+    public abstract SeContainerInitializer addBeanClasses(Class<?>... classes);
+
+    /**
+     * Adds packages of the given classes to the synthetic bean archive, the result of packageClass.getPackage()
+     *
+     * @param packageClasses
+     * @return this
+     */
+    public abstract SeContainerInitializer addPackages(Class<?>... packageClasses);
+
+    /**
+     * Add packages for the given classes to the synthetic bean archive.
+     *
+     * @param scanRecursively if true, will recursively check the child packages of each of these classes' packages
+     * @param packageClasses
+     * @return this
+     */
+    public abstract SeContainerInitializer addPackages(boolean scanRecursively, Class<?>... packageClasses);
+
+    /**
+     * Adds the given packages to the synthetic bean archive.
+     *
+     * @param packages
+     * @return this
+     */
+    public abstract SeContainerInitializer addPackages(Package... packages);
+
+    /**
+     * Adds the given packages to the synthetic bean archive.
+     *
+     * @param scanRecursively if true, will recursively check the child packages of each of these classes' packages
+     * @param packages
+     * @return this
+     */
+    public abstract SeContainerInitializer addPackages(boolean scanRecursively, Package... packages);
+
+    /**
+     * Adds the given Extension instances to the synthetic bean archive
+     *
+     * @param extensions
+     * @return this
+     */
+    public abstract SeContainerInitializer addExtensions(Extension... extensions);
+
+    /**
+     * Adds the given Extension classes to the synthetic bean archive
+     *
+     * @param extensions
+     * @return this
+     */
+    public abstract SeContainerInitializer addExtensions(Class<? extends Extension>... extensions);
+
+    /**
+     * Enables the given interceptors in the synthetic bean archive
+     *
+     * @param interceptorClasses
+     * @return this
+     */
+    public abstract SeContainerInitializer enableInterceptors(Class<?>... interceptorClasses);
+
+    /**
+     * Enables the given decorators in the synthetic bean archive
+     * @param decoratorClasses
+     * @return this
+     */
+    public abstract SeContainerInitializer enableDecorators(Class<?>... decoratorClasses);
+
+    /**
+     * Adds the given alternatives to the list of available alternatives in the bean archive
+     *
+     * @param alternativeClasses
+     * @return this
+     */
+    public abstract SeContainerInitializer selectAlternatives(Class<?>... alternativeClasses);
+
+    /**
+     * Adds the given alternative stereotypes to the list of available alternative stereotypes in the bean archive
+     *
+     * @param alternativeStereotypeClasses
+     * @return
+     */
+    public abstract SeContainerInitializer selectAlternativeStereotypes(Class<? extends Annotation>... alternativeStereotypeClasses);
+
+    /**
+     * Adds a configuration property to the container
+     *
+     * @param key
+     * @param value
+     * @return this
+     */
+    public abstract SeContainerInitializer addProperty(String key, Object value);
+
+    /**
+     * Overwrites all existing properties with the contents of the new given map
+     *
+     * @param properties
+     * @return this
+     */
+    public abstract SeContainerInitializer setProperties(Map<String, Object> properties);
+
+    /**
+     * Disables bean discovery of the classpath and instead relies solely on the classes defined in the archive
+     *
+     * @return this
+     */
+    public abstract SeContainerInitializer disableDiscovery();
+
+    /**
+     * Sets the default ClassLoader for this synthetic bean archive
+     *
+     * @param classLoader
+     * @return this
+     */
+    public abstract SeContainerInitializer setClassLoader(ClassLoader classLoader);
+
+    /**
+     * Bootstraps the container that has been built from this SeContainerInitializer
+     *
+     * @return a new SeContainer representing this synthetic bean archive
+     */
+    public abstract SeContainer initialize();
+
+}
\ No newline at end of file

Propchange: geronimo/specs/trunk/geronimo-jcdi_2.0_spec/src/main/java/javax/enterprise/inject/se/SeContainerInitializer.java
------------------------------------------------------------------------------
    svn:eol-style = native