djencks     2004/11/09 20:35:11

  Added:       
modules/openejb-builder/src/test/org/openejb/deployment/entity/cmp/cmr
                        AbstractCMRTest.java CompoundPK.java
  Log:

  GERONIMO-402, 464. Split openejb and security deployment code into separate 
modules
  
  Revision  Changes    Path
  1.1                  
openejb/modules/openejb-builder/src/test/org/openejb/deployment/entity/cmp/cmr/AbstractCMRTest.java
  
  Index: AbstractCMRTest.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.entity.cmp.cmr;

  

  import java.io.File;

  import java.net.URI;

  import java.sql.Connection;

  import java.util.Collections;

  import java.util.HashMap;

  import java.util.HashSet;

  import java.util.Set;

  import javax.management.MalformedObjectNameException;

  import javax.management.ObjectName;

  import javax.sql.DataSource;

  import javax.transaction.TransactionManager;

  

  import junit.framework.TestCase;

  import org.apache.geronimo.deployment.util.DeploymentUtil;

  import org.apache.geronimo.gbean.jmx.GBeanMBean;

  import org.apache.geronimo.j2ee.deployment.EARContext;

  import org.apache.geronimo.j2ee.j2eeobjectnames.J2eeContext;

  import org.apache.geronimo.j2ee.j2eeobjectnames.J2eeContextImpl;

  import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;

  import org.apache.geronimo.kernel.Kernel;

  import org.apache.geronimo.kernel.config.ConfigurationModuleType;

  import org.apache.geronimo.kernel.jmx.JMXUtil;

  import org.apache.geronimo.kernel.jmx.MBeanProxyFactory;

  import org.apache.geronimo.naming.java.ReadOnlyContext;

  import org.apache.geronimo.transaction.context.ContainerTransactionContext;

  import org.apache.geronimo.xbeans.j2ee.EjbJarDocument;

  import org.apache.geronimo.xbeans.j2ee.EjbJarType;

  import org.apache.xmlbeans.XmlObject;

  import org.axiondb.jdbc.AxionDataSource;

  import org.openejb.ContainerIndex;

  import org.openejb.deployment.CMPContainerBuilder;

  import org.openejb.deployment.CMPEntityBuilderTestUtil;

  import org.openejb.deployment.DeploymentHelper;

  import org.openejb.deployment.MockConnectionProxyFactory;

  import org.openejb.deployment.OpenEJBModuleBuilder;

  import org.openejb.dispatch.InterfaceMethodSignature;

  import org.openejb.security.SecurityConfiguration;

  import org.openejb.transaction.ContainerPolicy;

  import org.openejb.transaction.TransactionPolicy;

  import org.openejb.transaction.TransactionPolicySource;

  import org.openejb.xbeans.ejbjar.OpenejbOpenejbJarDocument;

  import org.openejb.xbeans.ejbjar.OpenejbOpenejbJarType;

  import org.tranql.cache.GlobalSchema;

  import org.tranql.ejb.EJB;

  import org.tranql.ejb.EJBSchema;

  import org.tranql.ejb.TransactionManagerDelegate;

  import org.tranql.sql.sql92.SQL92Schema;

  

  //import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

  

  /**

   *

   * @version $Revision: 1.1 $ $Date: 2004/11/10 01:35:10 $

   */

  public abstract class AbstractCMRTest extends TestCase {

      private static final File basedir = new 
File(System.getProperty("basedir", System.getProperty("user.dir")));

      

      private static final String j2eeDomainName = "openejb.server";

      private static final String j2eeServerName = "TestOpenEJBServer";

      private static final J2eeContext j2eeContext = new 
J2eeContextImpl(j2eeDomainName, j2eeServerName, NameFactory.NULL, "MockModule", 
"testapp", NameFactory.J2EE_MODULE);

      protected static final ObjectName CI_NAME = 
JMXUtil.getObjectName("openejb.server:role=ContainerIndex");

      protected static final ObjectName C_NAME_A;

      protected static final ObjectName C_NAME_B;

      static {

  

          try {

              C_NAME_A = NameFactory.getEjbComponentName(null, null, null,null, 
"A", NameFactory.ENTITY_BEAN, j2eeContext);

              C_NAME_B = NameFactory.getEjbComponentName(null, null, null,null, 
"B", NameFactory.ENTITY_BEAN, j2eeContext);

          } catch (MalformedObjectNameException e) {

              throw new AssertionError(e);

          }

      }

      protected Kernel kernel;

      protected DataSource ds;

      protected EJBSchema ejbSchema;

      protected SQL92Schema sqlSchema;

      protected GlobalSchema cacheSchema;

      protected Object ahome;

      protected Object bhome;

      

      protected ContainerTransactionContext newTransactionContext() throws 
Exception {

          return (ContainerTransactionContext) 
kernel.invoke(DeploymentHelper.TRANSACTIONCONTEXTMANAGER_NAME, 
"newContainerTransactionContext", null, null);

      }

      

      protected abstract void buildDBSchema(Connection c) throws Exception;

      protected abstract String getEjbJarDD();

      protected abstract String getOpenEjbJarDD();

      protected abstract EJBClass getA();

      protected abstract EJBClass getB();

      

      protected void setUp() throws Exception {

  //        MysqlDataSource mysqlDataSource = new MysqlDataSource();

  //        mysqlDataSource.setUser("geronimo");

  //        mysqlDataSource.setPassword("geronimo");

  //        mysqlDataSource.setURL("jdbc:mysql://localhost/geronimo");

  //   

  //        ds = mysqlDataSource;

          ds = new AxionDataSource("jdbc:axiondb:testdb");

          Connection c = ds.getConnection("root", null);

          buildDBSchema(c);

  

          kernel = 
DeploymentHelper.setUpKernelWithTransactionManager("ContainerManagedPersistenceTest");

          DeploymentHelper.setUpTimer(kernel);

  

          TransactionManager tm = (TransactionManager) 
MBeanProxyFactory.getProxy(

              TransactionManager.class, kernel.getMBeanServer(), 

              DeploymentHelper.TRANSACTIONMANAGER_NAME );

          TransactionManagerDelegate tmDelegate =  new 
TransactionManagerDelegate();

          tmDelegate.setTransactionManager(tm);

  

          ejbSchema = new EJBSchema("Mock");

          sqlSchema = new SQL92Schema("Mock", ds);

          cacheSchema = new GlobalSchema("Mock");

  

          File ejbJarFile = new File(basedir, getEjbJarDD());

          File openejbJarFile = new File(basedir, getOpenEjbJarDD());

          EjbJarType ejbJarType = ((EjbJarDocument) 
XmlObject.Factory.parse(ejbJarFile)).getEjbJar();

          OpenejbOpenejbJarType openejbJarType = ((OpenejbOpenejbJarDocument) 
XmlObject.Factory.parse(openejbJarFile)).getOpenejbJar();

          

          OpenEJBModuleBuilder moduleBuilder = new OpenEJBModuleBuilder(null, 
null);

          CMPEntityBuilderTestUtil builder = new 
CMPEntityBuilderTestUtil(moduleBuilder);

          File tempDir = DeploymentUtil.createTempDir();

          try {

              EARContext earContext = new EARContext(tempDir,

                      new URI("test"),

                      ConfigurationModuleType.EJB,

                      null,

                      null,

                      j2eeDomainName,

                      j2eeServerName,

                      NameFactory.NULL,

                      null,

                      null,

                      null,

                      null,

                      null);

  

              ClassLoader cl = Thread.currentThread().getContextClassLoader();

              builder.buildCMPSchema(earContext, j2eeContext, ejbJarType, 
openejbJarType, cl, ejbSchema, sqlSchema, cacheSchema);

  

              GBeanMBean containerIndex = new 
GBeanMBean(ContainerIndex.GBEAN_INFO);

              Set patterns = new HashSet();

              patterns.add(C_NAME_A);

              patterns.add(C_NAME_B);

              containerIndex.setReferencePatterns("EJBContainers", patterns);

              start(CI_NAME, containerIndex);

  

              GBeanMBean connectionProxyFactoryGBean = new 
GBeanMBean(MockConnectionProxyFactory.GBEAN_INFO);

              ObjectName connectionProxyFactoryObjectName = 
NameFactory.getResourceComponentName(null, null, null, "jcamodule", "testcf", 
NameFactory.JCA_CONNECTION_FACTORY, j2eeContext);

              kernel.loadGBean(connectionProxyFactoryObjectName, 
connectionProxyFactoryGBean);

              kernel.startGBean(connectionProxyFactoryObjectName);

  

              setUpContainer(ejbSchema.getEJB("A"), getA().bean, getA().home, 
getA().local, C_NAME_A, tmDelegate);

              setUpContainer(ejbSchema.getEJB("B"), getB().bean, getB().home, 
getB().local, C_NAME_B, tmDelegate);

  

              ahome = kernel.getAttribute(C_NAME_A, "ejbLocalHome");

              bhome = kernel.getAttribute(C_NAME_B, "ejbLocalHome");

          } finally {

              DeploymentUtil.recursiveDelete(tempDir);

          }

      }

      

      private void setUpContainer(EJB ejb, Class beanClass, Class homeClass, 
Class localClass, ObjectName containerName, TransactionManagerDelegate 
tmDelegate) throws Exception {

          CMPContainerBuilder builder = new CMPContainerBuilder();

          builder.setClassLoader(this.getClass().getClassLoader());

          builder.setContainerId(containerName.getCanonicalName());

          builder.setEJBName(ejb.getName());

          builder.setBeanClassName(beanClass.getName());

          builder.setHomeInterfaceName(null);

          builder.setLocalHomeInterfaceName(homeClass.getName());

          builder.setRemoteInterfaceName(null);

          builder.setLocalInterfaceName(localClass.getName());

          builder.setPrimaryKeyClassName(ejb.getPrimaryKeyClass().getName());

          builder.setJndiNames(new String[0]);

          builder.setLocalJndiNames(new String[0]);

          builder.setUnshareableResources(new HashSet());

          builder.setTransactionPolicySource(new TransactionPolicySource() {

              public TransactionPolicy getTransactionPolicy(String methodIntf, 
InterfaceMethodSignature signature) {

                  return ContainerPolicy.Required;

              }

          });

          builder.setSecurityConfiguration(new SecurityConfiguration());

          builder.setEJBSchema(ejbSchema);

          builder.setSQLSchema(sqlSchema);

          builder.setGlobalSchema(cacheSchema);

          builder.setComponentContext(new ReadOnlyContext());

  //        builder.setConnectionFactoryName("defaultDatasource");

          builder.setTransactionManagerDelegate(tmDelegate);

          builder.setQueries(new HashMap());

  

          GBeanMBean container = builder.createConfiguration();

  

          container.setReferencePatterns("TransactionContextManager", 
Collections.singleton(DeploymentHelper.TRANSACTIONCONTEXTMANAGER_NAME));

          container.setReferencePatterns("TrackedConnectionAssociator", 
Collections.singleton(DeploymentHelper.TRACKEDCONNECTIONASSOCIATOR_NAME));

          container.setReferencePattern("Timer", 
DeploymentHelper.TRANSACTIONALTIMER_NAME);

          start(containerName, container);

      }

      

      protected void tearDown() throws Exception {

          kernel.shutdown();

          java.sql.Connection c = ds.getConnection();

          c.createStatement().execute("SHUTDOWN");

      }

  

      private void start(ObjectName name, GBeanMBean instance) throws Exception 
{

          kernel.loadGBean(name, instance);

          kernel.startGBean(name);

      }

  

      private void stop(ObjectName name) throws Exception {

          kernel.stopGBean(name);

          kernel.unloadGBean(name);

      }

      

      protected class EJBClass {

          public EJBClass(Class bean, Class home, Class local) {

              this.bean = bean;

              this.home = home;

              this.local = local;

          };

          public Class bean;

          public Class home;

          public Class local;

      }

  }

  
  
  
  1.1                  
openejb/modules/openejb-builder/src/test/org/openejb/deployment/entity/cmp/cmr/CompoundPK.java
  
  Index: CompoundPK.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.entity.cmp.cmr;

  

  import java.io.Serializable;

  

  

  /**

   *

   * @version $Revision: 1.1 $ $Date: 2004/11/10 01:35:10 $

   */

  public class CompoundPK implements Serializable {

      public Integer field1;

      public String field2;

  

      public CompoundPK() {};

      

      public CompoundPK(Integer field1, String field2) {

          this.field1 = field1;

          this.field2 = field2;

      }

      

      public boolean equals(Object other) {

        if ( false == other instanceof CompoundPK ) {

            return false;

        }

        CompoundPK otherPK = (CompoundPK) other;

        return field1.equals(otherPK.field1) && field2.equals(otherPK.field2);

      }

      

      public int hashCode() {

        return field1.hashCode() ^ field2.hashCode();

      }

  

  }

  
  
  

Reply via email to