[weld-commits] Weld SVN: r5724 - in core/trunk: jboss-tck-runner/src/test/resources and 3 other directories.

weld-commits at lists.jboss.org weld-commits at lists.jboss.org
Thu Feb 4 11:20:10 EST 2010


Author: pete.muir at jboss.org
Date: 2010-02-04 11:20:09 -0500 (Thu, 04 Feb 2010)
New Revision: 5724

Modified:
   core/trunk/impl/src/main/java/org/jboss/weld/conversation/ConversationImpl.java
   core/trunk/jboss-tck-runner/src/test/resources/tck-tests.xml
   core/trunk/tests/src/main/java/org/jboss/weld/mock/TestContainer.java
   core/trunk/tests/src/main/java/org/jboss/weld/test/harness/AbstractStandaloneContainersImpl.java
   core/trunk/tests/src/test/java/org/jboss/weld/tests/contexts/ContextTest.java
Log:
WELD-348

Modified: core/trunk/impl/src/main/java/org/jboss/weld/conversation/ConversationImpl.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/conversation/ConversationImpl.java	2010-02-04 13:14:08 UTC (rev 5723)
+++ core/trunk/impl/src/main/java/org/jboss/weld/conversation/ConversationImpl.java	2010-02-04 16:20:09 UTC (rev 5724)
@@ -18,6 +18,7 @@
 
 import static org.jboss.weld.logging.Category.CONVERSATION;
 import static org.jboss.weld.logging.LoggerFactory.loggerFactory;
+import static org.jboss.weld.logging.messages.BeanManagerMessage.CONTEXT_NOT_ACTIVE;
 import static org.jboss.weld.logging.messages.ConversationMessage.BEGIN_CALLED_ON_LONG_RUNNING_CONVERSATION;
 import static org.jboss.weld.logging.messages.ConversationMessage.DEMOTED_LRC;
 import static org.jboss.weld.logging.messages.ConversationMessage.END_CALLED_ON_TRANSIENT_CONVERSATION;
@@ -32,6 +33,9 @@
 import javax.inject.Inject;
 import javax.inject.Named;
 
+import org.jboss.weld.Container;
+import org.jboss.weld.context.ContextLifecycle;
+import org.jboss.weld.context.ContextNotActiveException;
 import org.jboss.weld.exceptions.ForbiddenStateException;
 import org.slf4j.cal10n.LocLogger;
 
@@ -66,8 +70,14 @@
    /**
     * Creates a new conversation
     */
-   public ConversationImpl()
+   public ConversationImpl() {}
+   
+   protected void checkConversationActive()
    {
+      if (!Container.instance().services().get(ContextLifecycle.class).getConversationContext().isActive())
+      {
+         throw new ContextNotActiveException(CONTEXT_NOT_ACTIVE, "@ConversationScoped");
+      }
    }
 
    /**
@@ -98,6 +108,7 @@
 
    public void begin()
    {
+      checkConversationActive();
       if (!isTransient())
       {
          throw new ForbiddenStateException(BEGIN_CALLED_ON_LONG_RUNNING_CONVERSATION);
@@ -108,6 +119,7 @@
 
    public void begin(String id)
    {
+      checkConversationActive();
       // Store away the (first) change to the conversation ID. If the original
       // conversation was long-running,
       // we might have to place it back for termination once the request is
@@ -122,6 +134,7 @@
 
    public void end()
    {
+      checkConversationActive();
       if (isTransient())
       {
          throw new ForbiddenStateException(END_CALLED_ON_TRANSIENT_CONVERSATION);
@@ -132,6 +145,7 @@
 
    public String getId()
    {
+      checkConversationActive();
       if (!isTransient())
       {
          return id;
@@ -155,11 +169,13 @@
 
    public long getTimeout()
    {
+      checkConversationActive();
       return timeout;
    }
 
    public void setTimeout(long timeout)
    {
+      checkConversationActive();
       this.timeout = timeout;
    }
 
@@ -172,9 +188,9 @@
    public void switchTo(ConversationImpl conversation)
    {
       log.debug(SWITCHED_CONVERSATION, this, conversation);
-      id = conversation.getUnderlyingId();
-      this._transient = conversation.isTransient();
-      timeout = conversation.getTimeout();
+      id = conversation.id;
+      this._transient = conversation._transient;
+      timeout = conversation.timeout;
    }
 
    @Override
@@ -215,6 +231,9 @@
 
    public boolean isTransient()
    {
+      checkConversationActive();
       return _transient;
    }
+   
+   
 }

Modified: core/trunk/jboss-tck-runner/src/test/resources/tck-tests.xml
===================================================================
--- core/trunk/jboss-tck-runner/src/test/resources/tck-tests.xml	2010-02-04 13:14:08 UTC (rev 5723)
+++ core/trunk/jboss-tck-runner/src/test/resources/tck-tests.xml	2010-02-04 16:20:09 UTC (rev 5724)
@@ -57,6 +57,42 @@
             </methods>
          </class>
          
+         <!-- CDITCK-109 -->
+         <class name="org.jboss.jsr299.tck.tests.context.conversation.ConversationBeginTest">
+            <methods>
+               <exclude name="testBeginAlreadyLongRunningConversationThrowsException" />
+               <exclude name="testConversationBeginMakesConversationLongRunning" />
+            </methods>
+         </class>
+         <class name="org.jboss.jsr299.tck.tests.context.conversation.ConversationContextTest">
+            <methods>
+               <exclude name="testDefaultConversationIsTransient" />
+               <exclude name="testTransientConversationHasNullId" />
+            </methods>
+         </class>
+         <class name="org.jboss.jsr299.tck.tests.context.conversation.ConversationEndTest">
+            <methods>
+               <exclude name="testConversationEndMakesConversationTransient" />
+               <exclude name="testEndTransientConversationThrowsException" />
+            </methods>
+         </class>
+         <class name="org.jboss.jsr299.tck.tests.context.conversation.ConversationIdSetByApplicationTest">
+            <methods>
+               <exclude name="testConversationIdMayBeSetByApplication" />
+            </methods>
+         </class>
+         <class name="org.jboss.jsr299.tck.tests.context.conversation.ConversationIdSetByContainerTest">
+            <methods>
+               <exclude name="testConversationBeginMakesConversationLongRunning" />
+            </methods>
+         </class>
+         <class name="org.jboss.jsr299.tck.tests.context.conversation.ConversationTimeoutTest">
+            <methods>
+               <exclude name="testConversationHasDefaultTimeout" />
+               <exclude name="testSetConversationTimeoutOverride" />
+            </methods>
+         </class>
+         
          <!-- Issues in Weld (the RI) -->
 
          <!-- WELD-390 fixed, but TCK test is broken in 1.0.1-CR1 -->

Modified: core/trunk/tests/src/main/java/org/jboss/weld/mock/TestContainer.java
===================================================================
--- core/trunk/tests/src/main/java/org/jboss/weld/mock/TestContainer.java	2010-02-04 13:14:08 UTC (rev 5723)
+++ core/trunk/tests/src/main/java/org/jboss/weld/mock/TestContainer.java	2010-02-04 16:20:09 UTC (rev 5724)
@@ -21,6 +21,7 @@
 import java.util.Collection;
 
 import org.jboss.weld.bootstrap.spi.Deployment;
+import org.jboss.weld.context.ConversationContext;
 import org.jboss.weld.manager.BeanManagerImpl;
 
 /**
@@ -129,6 +130,10 @@
       {
          getLifecycle().beginSession();
       }
+      if (!getLifecycle().isConversationActive())
+      {
+         ((ConversationContext) getLifecycle().getConversationContext()).setActive(true);
+      }
       if (!getLifecycle().isRequestActive())
       {
          getLifecycle().beginRequest();
@@ -146,6 +151,10 @@
       {
          getLifecycle().endRequest();
       }
+      if (getLifecycle().isConversationActive())
+      {
+         ((ConversationContext) getLifecycle().getConversationContext()).setActive(false);
+      }
       if (getLifecycle().isSessionActive())
       {
          getLifecycle().endSession();

Modified: core/trunk/tests/src/main/java/org/jboss/weld/test/harness/AbstractStandaloneContainersImpl.java
===================================================================
--- core/trunk/tests/src/main/java/org/jboss/weld/test/harness/AbstractStandaloneContainersImpl.java	2010-02-04 13:14:08 UTC (rev 5723)
+++ core/trunk/tests/src/main/java/org/jboss/weld/test/harness/AbstractStandaloneContainersImpl.java	2010-02-04 16:20:09 UTC (rev 5724)
@@ -44,8 +44,7 @@
          this.deploymentException = new DeploymentException("Error deploying beans", e);
          return false;
       }
-      testContainer.getLifecycle().beginSession();
-      testContainer.getLifecycle().beginRequest();
+      testContainer.ensureRequestActive();
       return true;
    }
 

Modified: core/trunk/tests/src/test/java/org/jboss/weld/tests/contexts/ContextTest.java
===================================================================
--- core/trunk/tests/src/test/java/org/jboss/weld/tests/contexts/ContextTest.java	2010-02-04 13:14:08 UTC (rev 5723)
+++ core/trunk/tests/src/test/java/org/jboss/weld/tests/contexts/ContextTest.java	2010-02-04 16:20:09 UTC (rev 5724)
@@ -16,21 +16,132 @@
  */
 package org.jboss.weld.tests.contexts;
 
+import javax.enterprise.context.ContextNotActiveException;
+import javax.enterprise.context.Conversation;
+
 import org.jboss.testharness.impl.packaging.Artifact;
-import org.jboss.testharness.impl.packaging.IntegrationTest;
+import org.jboss.weld.Container;
+import org.jboss.weld.context.ContextLifecycle;
 import org.jboss.weld.test.AbstractWeldTest;
 import org.testng.annotations.Test;
 
 @Artifact
- at IntegrationTest
 public class ContextTest extends AbstractWeldTest
 {
-   // WBRI-155
-   @Test(description="WBRI155", groups="stub")
-   public void testSessionContextActiveForMultipleSimultaneousThreads()
+
+   @Test(description = "WELD-348")
+   public void testCallToConversationWithContextNotActive()
    {
-      // TODO impl
-      assert false;
+      boolean alreadyActive = false;
+      try
+      {
+         alreadyActive = Container.instance().services().get(ContextLifecycle.class).isConversationActive();
+         if (alreadyActive)
+         {
+            Container.instance().services().get(ContextLifecycle.class).getConversationContext().setActive(false);
+         }
+         try
+         {
+            getReference(Conversation.class).getId();
+            assert false;
+         }
+         catch (ContextNotActiveException e) 
+         {
+            // Expected
+         }
+         catch (Exception e) 
+         {
+            assert false;
+         }
+         try
+         {
+            getReference(Conversation.class).getTimeout();
+            assert false;
+         }
+         catch (ContextNotActiveException e) 
+         {
+            // Expected
+         }
+         catch (Exception e) 
+         {
+            assert false;
+         }
+         try
+         {
+            getReference(Conversation.class).begin();
+            assert false;
+         }
+         catch (ContextNotActiveException e) 
+         {
+            // Expected
+         }
+         catch (Exception e) 
+         {
+            assert false;
+         }
+         try
+         {
+            getReference(Conversation.class).begin("foo");
+            assert false;
+         }
+         catch (ContextNotActiveException e) 
+         {
+            // Expected
+         }
+         catch (Exception e) 
+         {
+            assert false;
+         }
+         try
+         {
+            getReference(Conversation.class).end();
+            assert false;
+         }
+         catch (ContextNotActiveException e) 
+         {
+            // Expected
+         }
+         catch (Exception e) 
+         {
+            assert false;
+         }
+         try
+         {
+            getReference(Conversation.class).isTransient();
+            assert false;
+         }
+         catch (ContextNotActiveException e) 
+         {
+            // Expected
+         }
+         catch (Exception e) 
+         {
+            assert false;
+         }
+         try
+         {
+            getReference(Conversation.class).setTimeout(0);
+            assert false;
+         }
+         catch (ContextNotActiveException e) 
+         {
+            // Expected
+         }
+         catch (Exception e) 
+         {
+            assert false;
+         }
+      }
+      finally
+      {
+         if (alreadyActive)
+         {
+            Container.instance().services().get(ContextLifecycle.class).getConversationContext().setActive(true);
+         }
+      }
+      
    }
    
+   
+   
 }



More information about the weld-commits mailing list