djencks     2004/10/28 17:21:30

  Added:       modules/core/src/test/org/openejb/deployment/mdb
                        BasicMDBContainerTest.java MockEJB.java
  Log:

  Move the deployment classes ***ContainerBuilder to deployment.  Drag most ofthe 
testsuite along with them. Don't you wish we were on svn?
  
  Revision  Changes    Path
  1.1                  
openejb/modules/core/src/test/org/openejb/deployment/mdb/BasicMDBContainerTest.java
  
  Index: BasicMDBContainerTest.java
  ===================================================================
  /* ====================================================================
   * Redistribution and use of this software and associated documentation
   * ("Software"), with or without modification, are permitted provided
   * that the following conditions are met:
   *
   * 1. Redistributions of source code must retain copyright
   *    statements and notices.  Redistributions must also contain a
   *    copy of this document.
   *
   * 2. Redistributions in binary form must reproduce this list of
   *    conditions and the following disclaimer in the documentation
   *    and/or other materials provided with the distribution.
   *
   * 3. The name "OpenEJB" must not be used to endorse or promote
   *    products derived from this Software without prior written
   *    permission of The OpenEJB Group.  For written permission,
   *    please contact [EMAIL PROTECTED]
   *
   * 4. Products derived from this Software may not be called "OpenEJB"
   *    nor may "OpenEJB" appear in their names without prior written
   *    permission of The OpenEJB Group. OpenEJB is a registered
   *    trademark of The OpenEJB Group.
   *
   * 5. Due credit should be given to the OpenEJB Project
   *    (http://openejb.org/).
   *
   * THIS SOFTWARE IS PROVIDED BY THE OPENEJB GROUP AND CONTRIBUTORS
   * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
   * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
   * THE OPENEJB GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
   * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   * OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the OpenEJB Project.  For more information
   * please see <http://openejb.org/>.
   *
   * ====================================================================
   */
  package org.openejb.deployment.mdb;
  
  import java.util.HashSet;
  
  import junit.framework.TestCase;
  import org.apache.geronimo.gbean.jmx.GBeanMBean;
  import org.apache.geronimo.kernel.Kernel;
  import org.apache.geronimo.naming.java.ReadOnlyContext;
  import org.openejb.deployment.DeploymentHelper;
  import org.openejb.deployment.MDBContainerBuilder;
  import org.openejb.dispatch.InterfaceMethodSignature;
  import org.openejb.transaction.ContainerPolicy;
  import org.openejb.transaction.TransactionPolicy;
  import org.openejb.transaction.TransactionPolicySource;
  
  /**
   * @version $Revision: 1.1 $ $Date: 2004/10/28 21:21:30 $
   */
  public class BasicMDBContainerTest extends TestCase {
      private Kernel kernel;
      private GBeanMBean container;
  
      protected void setUp() throws Exception {
          super.setUp();
          kernel = DeploymentHelper.setUpKernelWithTransactionManager("MDBTest");
          DeploymentHelper.setUpTimer(kernel);
          DeploymentHelper.setUpResourceAdapter(kernel);
  
          MDBContainerBuilder builder = new MDBContainerBuilder();
          builder.setClassLoader(this.getClass().getClassLoader());
          builder.setContainerId(DeploymentHelper.CONTAINER_NAME.getCanonicalName());
          builder.setEJBName("MockEJB");
          builder.setBeanClassName(MockEJB.class.getName());
          builder.setEndpointInterfaceName("javax.jms.MessageListener");
          builder.setActivationSpecName(DeploymentHelper.ACTIVATIONSPEC_NAME);
          builder.setUnshareableResources(new HashSet());
          builder.setTransactionPolicySource(new TransactionPolicySource() {
              public TransactionPolicy getTransactionPolicy(String methodIntf, 
InterfaceMethodSignature signature) {
                  return ContainerPolicy.Required;
              }
          });
          builder.setComponentContext(new ReadOnlyContext());
          container = builder.createConfiguration();
  
         //start the ejb container
          container.setReferencePattern("TransactionContextManager", 
DeploymentHelper.TRANSACTIONCONTEXTMANAGER_NAME);
          container.setReferencePattern("TrackedConnectionAssociator", 
DeploymentHelper.TRACKEDCONNECTIONASSOCIATOR_NAME);
          container.setReferencePattern("Timer", 
DeploymentHelper.TRANSACTIONALTIMER_NAME);
          DeploymentHelper.start(kernel, DeploymentHelper.CONTAINER_NAME, container);
      }
  
      protected void tearDown() throws Exception {
          DeploymentHelper.stop(kernel, DeploymentHelper.CONTAINER_NAME);
          DeploymentHelper.stop(kernel, DeploymentHelper.TRANSACTIONMANAGER_NAME);
          DeploymentHelper.stop(kernel, 
DeploymentHelper.TRACKEDCONNECTIONASSOCIATOR_NAME);
          DeploymentHelper.tearDownAdapter(kernel);
          kernel.shutdown();
      }
  
  
      public void testMessage() throws Exception {
          // @todo put a wait limit in here... otherwise this can lock a build
          // Wait for 3 messages to arrive..
          System.out.println("Waiting for message 1");
          MockEJB.messageCounter.acquire();
          System.out.println("Waiting for message 2");
          MockEJB.messageCounter.acquire();
          System.out.println("Waiting for message 3");
          MockEJB.messageCounter.acquire();
  
          System.out.println("Done.");
          assertTrue("Timer should have fired once by now...", MockEJB.timerFired);
      }
  }
  
  
  
  1.1                  
openejb/modules/core/src/test/org/openejb/deployment/mdb/MockEJB.java
  
  Index: MockEJB.java
  ===================================================================
  /* ====================================================================
   * Redistribution and use of this software and associated documentation
   * ("Software"), with or without modification, are permitted provided
   * that the following conditions are met:
   *
   * 1. Redistributions of source code must retain copyright
   *    statements and notices.  Redistributions must also contain a
   *    copy of this document.
   *
   * 2. Redistributions in binary form must reproduce this list of
   *    conditions and the following disclaimer in the documentation
   *    and/or other materials provided with the distribution.
   *
   * 3. The name "OpenEJB" must not be used to endorse or promote
   *    products derived from this Software without prior written
   *    permission of The OpenEJB Group.  For written permission,
   *    please contact [EMAIL PROTECTED]
   *
   * 4. Products derived from this Software may not be called "OpenEJB"
   *    nor may "OpenEJB" appear in their names without prior written
   *    permission of The OpenEJB Group. OpenEJB is a registered
   *    trademark of The OpenEJB Group.
   *
   * 5. Due credit should be given to the OpenEJB Project
   *    (http://openejb.org/).
   *
   * THIS SOFTWARE IS PROVIDED BY THE OPENEJB GROUP AND CONTRIBUTORS
   * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
   * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
   * THE OPENEJB GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
   * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   * OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the OpenEJB Project.  For more information
   * please see <http://openejb.org/>.
   *
   * ====================================================================
   */
  package org.openejb.deployment.mdb;
  
  import javax.ejb.EJBException;
  import javax.ejb.MessageDrivenBean;
  import javax.ejb.MessageDrivenContext;
  import javax.ejb.TimedObject;
  import javax.ejb.Timer;
  import javax.ejb.TimerService;
  import javax.jms.Message;
  import javax.jms.MessageListener;
  
  import EDU.oswego.cs.dl.util.concurrent.Semaphore;
  
  /**
   *
   *
   *
   * @version $Revision: 1.1 $ $Date: 2004/10/28 21:21:30 $
   */
  public class MockEJB implements MessageDrivenBean, MessageListener, TimedObject {
  
      public static final Semaphore messageCounter = new Semaphore(0);
      private boolean ejbCreateCalled;
      private boolean ejbRemoveCalled;
      private MessageDrivenContext messageDrivenContext;
      public static Message lastMessage;
      public static boolean timerFired;
  
      public void ejbCreate() throws EJBException {
          ejbCreateCalled = true;
      }
  
      /**
       * @see javax.ejb.MessageDrivenBean#ejbRemove()
       */
      public void ejbRemove() throws EJBException {
          ejbRemoveCalled = true;
      }
  
      /**
       * @see 
javax.ejb.MessageDrivenBean#setMessageDrivenContext(javax.ejb.MessageDrivenContext)
       */
      public void setMessageDrivenContext(MessageDrivenContext messageDrivenContext) 
throws EJBException {
          this.messageDrivenContext = messageDrivenContext;
      }
  
      /**
       * @see javax.jms.MessageListener#onMessage(javax.jms.Message)
       */
      public void onMessage(Message message) {
          lastMessage = message;
          messageCounter.release();
          TimerService timerService = messageDrivenContext.getTimerService();
          timerService.createTimer(100L, null);
      }
  
      public void ejbTimeout(Timer timer) {
          timerFired = true;
      }
  
  }
  
  
  

Reply via email to