You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by st...@apache.org on 2012/07/16 12:58:01 UTC

[1/2] git commit: DELTASPILE-172 log warning for Dependent scoped beans

Updated Branches:
  refs/heads/master 855dcd423 -> 3dfa03963


DELTASPILE-172 log warning for Dependent scoped beans

A @Dependent scoped bean shall not be created via
BeanProvider as this cannot cleaned up properly
via it's CreationalContext.


Project: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/commit/3dfa0396
Tree: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/tree/3dfa0396
Diff: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/diff/3dfa0396

Branch: refs/heads/master
Commit: 3dfa03963fe22bb475ce4442321f84c5e6a849cb
Parents: c883f53
Author: Mark Struberg <st...@apache.org>
Authored: Mon Jul 16 12:55:10 2012 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Mon Jul 16 12:55:10 2012 +0200

----------------------------------------------------------------------
 .../deltaspike/core/api/provider/BeanProvider.java |   28 +++++++++++
 .../test/core/api/provider/BeanProviderTest.java   |    8 +++
 .../test/core/api/provider/DependentTestBean.java  |   37 +++++++++++++++
 3 files changed, 73 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/3dfa0396/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/provider/BeanProvider.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/provider/BeanProvider.java b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/provider/BeanProvider.java
index 01046c4..51dff71 100644
--- a/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/provider/BeanProvider.java
+++ b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/provider/BeanProvider.java
@@ -19,6 +19,8 @@
 package org.apache.deltaspike.core.api.provider;
 
 import org.apache.deltaspike.core.api.literal.AnyLiteral;
+import org.apache.deltaspike.core.api.projectstage.ProjectStage;
+import org.apache.deltaspike.core.util.ProjectStageProducer;
 
 import javax.enterprise.context.Dependent;
 import javax.enterprise.context.spi.CreationalContext;
@@ -36,6 +38,8 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 /**
  * <p>This class contains utility methods to resolve contextual references
@@ -54,6 +58,14 @@ import java.util.Set;
 @Typed()
 public final class BeanProvider
 {
+    private static final Logger LOG = Logger.getLogger(BeanProvider.class.getName());
+
+    private static final boolean LOG_DEPENDENT_WARNINGS;
+    static {
+        ProjectStage ps = ProjectStageProducer.getInstance().getProjectStage();
+        LOG_DEPENDENT_WARNINGS = ps.equals(ProjectStage.Development) || ps.equals(ProjectStage.UnitTest);
+    }
+
     private BeanProvider()
     {
         // this is a utility class which doesn't get instantiated.
@@ -371,6 +383,8 @@ public final class BeanProvider
     {
         Bean<?> bean = beanManager.resolve(beans);
 
+        logWarningIfDependent(bean);
+
         CreationalContext<?> creationalContext = beanManager.createCreationalContext(bean);
 
         @SuppressWarnings({ "unchecked", "UnnecessaryLocalVariable" })
@@ -379,6 +393,20 @@ public final class BeanProvider
     }
 
     /**
+     * Log a warning if the produced creational instance is of
+     * Scope &#064;Dependent as we cannot properly cleanup
+     * the contextual instance afterwards.
+     */
+    private static void logWarningIfDependent(Bean<?> bean)
+    {
+        if (LOG_DEPENDENT_WARNINGS && bean.getScope().equals(Dependent.class))
+        {
+            LOG.log(Level.WARNING, "BeanProvider shall not be used to create @Dependent scoped beans. "
+                    + "Bean: " + bean.toString());
+        }
+    }
+
+    /**
      * Internal method to resolve the BeanManager via the {@link BeanManagerProvider}
      * @return current bean-manager
      */

http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/3dfa0396/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/provider/BeanProviderTest.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/provider/BeanProviderTest.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/provider/BeanProviderTest.java
index 4a7ab2b..010b44e 100644
--- a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/provider/BeanProviderTest.java
+++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/provider/BeanProviderTest.java
@@ -194,4 +194,12 @@ public class BeanProviderTest
 
         testBean.setI(4711); // reset the value if this test is executed first
     }
+
+    @Test
+    public void dependentBeanResolving() throws Exception
+    {
+        DependentTestBean dependentTestBean = BeanProvider.getContextualReference(DependentTestBean.class);
+        Assert.assertNotNull(dependentTestBean);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/3dfa0396/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/provider/DependentTestBean.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/provider/DependentTestBean.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/provider/DependentTestBean.java
new file mode 100644
index 0000000..31630bb
--- /dev/null
+++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/provider/DependentTestBean.java
@@ -0,0 +1,37 @@
+/*
+* 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 org.apache.deltaspike.test.core.api.provider;
+
+import javax.enterprise.context.Dependent;
+
+@Dependent
+public class DependentTestBean
+{
+    private int i = 42;
+
+    public int getI()
+    {
+        return i;
+    }
+
+    public void setI(int i)
+    {
+        this.i = i;
+    }
+}