Package org.jboss.test.metadata.ejb

Source Code of org.jboss.test.metadata.ejb.ResolveJndiNameDecoratorUnitTestCase

/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.test.metadata.ejb;

import junit.framework.TestCase;

import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeansMetaData;
import org.jboss.metadata.ejb.jboss.JBossEntityBeanMetaData;
import org.jboss.metadata.ejb.jboss.JBossMetaData;
import org.jboss.metadata.ejb.jboss.JBossServiceBeanMetaData;
import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
import org.jboss.metadata.ejb.jboss.jndipolicy.plugins.BasicJndiBindingPolicy;
import org.jboss.metadata.ejb.jboss.jndipolicy.plugins.EjbNameJndiBindingPolicy;
import org.jboss.metadata.ejb.jboss.jndipolicy.plugins.JBossSessionPolicyDecorator;
import org.jboss.metadata.ejb.jboss.jndipolicy.plugins.JbossEntityPolicyDecorator;
import org.jboss.metadata.ejb.jboss.jndipolicy.spi.DefaultJndiBindingPolicy;
import org.jboss.metadata.ejb.jboss.jndipolicy.spi.DeploymentSummary;
import org.jboss.metadata.ejb.jboss.jndipolicy.spi.JbossEnterpriseBeanJndiNameResolver;
import org.jboss.metadata.ejb.jboss.jndipolicy.spi.JbossSessionBeanJndiNameResolver;
import org.jboss.metadata.ejb.jboss.jndipolicy.spi.KnownInterfaces;
import org.jboss.metadata.ejb.jboss.jndipolicy.spi.PackagingType;
import org.jboss.metadata.ejb.jboss.jndipolicy.spi.KnownInterfaces.KnownInterfaceType;
import org.jboss.metadata.ejb.spec.BusinessLocalsMetaData;
import org.jboss.metadata.ejb.spec.BusinessRemotesMetaData;

/**
* Tests that the JNDI Policy Decorators for Object Model
* Metadata properly resolve JNDI targets according to
* values expected of the given JNDI Policies
*
* @author <a href="mailto:emuckenh@redhat.com">Emanuel Muckenhuber</a>
* @author <a href="mailto:andrew.rubinger@jboss.org">ALR</a>
* @version $Revision$
*/
public class ResolveJndiNameDecoratorUnitTestCase extends TestCase
{

   @SuppressWarnings(value="deprecation")
   public void testResolvedJndiName()
   {
      // Obtain MD and define expected values for resolution
      JBossSessionBeanMetaData beanMD = getDecoratedEjbMetaData();
      String expected = "base/testResolvedJndiName-ejb/home";
     
      // Resolve
      String resolved = beanMD.getHomeJndiName();
     
      // Test
      assertEquals(expected, resolved);
     
      // Test Deprecated, backwards-compat behavior (may be removed when these methods no longer exist, JBMETA-68)
      String resolvedDeprecated = beanMD.determineResolvedJndiName(KnownInterfaces.HOME, null);
      assertEquals(expected, resolvedDeprecated);
   }
  
   @SuppressWarnings(value="deprecation")
   public void testResolvedJndiNameNoBaseName()
   {
      // Obtain MD
      JBossSessionBeanMetaData beanMD = getDecoratedEjbMetaData();
     
      // Remove the baseName
      JBossMetaData jbMd = beanMD.getEnterpriseBeansMetaData().getEjbJarMetaData();
      jbMd.getDeploymentSummary().setDeploymentScopeBaseName(null);
     
      String expected = "testResolvedJndiNameNoBaseName-ejb/home";
     
      // Resolve
      String resolved = beanMD.getHomeJndiName();
     
      // Test
      assertEquals(expected, resolved);
     
      // Test Deprecated, backwards-compat behavior (may be removed when these methods no longer exist, JBMETA-68)
      String resolvedDeprecated = beanMD.determineResolvedJndiName(KnownInterfaces.HOME, null);
      assertEquals(expected, resolvedDeprecated);
   }
  
   /**
    * JBMETA-83
    *
    * When deploymentScopeBaseName is equal to the mappedName,
    * the base JNDI name becomes bound and is therefore an
    * invalid target for a JNDI subcontext
    */
   @SuppressWarnings(value="deprecation")
   public void testResolvedJndiNameWhenMappedNameIsInBaseName()
   {
      // Obtain MD
      JBossSessionBeanMetaData beanMD = getDecoratedEjbMetaData();
     
      // Set a deploymentScopeBaseName equal to that of mappedName
      String commonName = "commonBase";
      JBossMetaData jbMd = beanMD.getEnterpriseBeansMetaData().getEjbJarMetaData();
      jbMd.getDeploymentSummary().setDeploymentScopeBaseName(commonName);
      beanMD.setMappedName(commonName);
     
      // Resolve the business default and the home JNDI name
      String resolvedRemoteBusinessDefaultJndiName = beanMD.getJndiName();
      String resolvedRemoteHomeJndiName = beanMD.getHomeJndiName();
     
      // Test that the Home JNDI Name does not have a base of the mappedName (due to collisions with
      assertTrue("When depoymentScopeBaseName is equal to mappedName, JNDI Collisions occur",
            !resolvedRemoteHomeJndiName.startsWith(resolvedRemoteBusinessDefaultJndiName + "/"));
     
      // Test Deprecated, backwards-compat behavior (may be removed when these methods no longer exist, JBMETA-68)
      String resolvedDeprecated = beanMD.determineResolvedJndiName(KnownInterfaces.HOME, null);
      assertTrue(!resolvedDeprecated.startsWith(resolvedRemoteBusinessDefaultJndiName + "/"));
   }
  
   /**
    * JBMETA-86
    *
    * When deploymentScopeBaseName is equal to the jndiName,
    * the base JNDI name becomes bound and is therefore an
    * invalid target for a JNDI subcontext
    */
   @SuppressWarnings(value="deprecation")
   public void testResolvedJndiNameWhenJndiNameIsInBaseName()
   {
      // Obtain MD
      JBossSessionBeanMetaData beanMD = getDecoratedEjbMetaData();
     
      // Set a deploymentScopeBaseName equal to that of mappedName
      String commonName = "commonBase";
      JBossMetaData jbMd = beanMD.getEnterpriseBeansMetaData().getEjbJarMetaData();
      jbMd.getDeploymentSummary().setDeploymentScopeBaseName(commonName);
      beanMD.setJndiName(commonName);
     
      // Resolve the business default and the home JNDI name
      String resolvedRemoteBusinessDefaultJndiName = beanMD.getJndiName();
      String resolvedRemoteHomeJndiName = beanMD.getHomeJndiName();
     
      // Test that the Home JNDI Name does not have a base of the mappedName (due to collisions with
      assertTrue("When depoymentScopeBaseName is equal to jndiName, JNDI Collisions occur",
            !resolvedRemoteHomeJndiName.startsWith(resolvedRemoteBusinessDefaultJndiName + "/"));
     
      // Test Deprecated, backwards-compat behavior (may be removed when these methods no longer exist, JBMETA-68)
      String resolvedDeprecated = beanMD.determineResolvedJndiName(KnownInterfaces.HOME, null);
      assertTrue(!resolvedDeprecated.startsWith(resolvedRemoteBusinessDefaultJndiName + "/"));
   }
  
   @SuppressWarnings(value="deprecation")
   public void testResolvedJndiNameExplicitHomeBinding()
   {
      // Obtain MD
      JBossSessionBeanMetaData beanMD = getDecoratedEjbMetaData();
     
      // Set some override names
      String overrideJndiNameRemote = "overrideJndiNameRemote";
      String overrideJndiNameLocal = "overrideJndiNameLocal";
     
      // Override
      beanMD.setHomeJndiName(overrideJndiNameRemote);
      beanMD.setLocalHomeJndiName(overrideJndiNameLocal);
      beanMD.setMappedName(overrideJndiNameRemote);
     
      // Set the expected values
      String expectedRemote = overrideJndiNameRemote;
      String expectedLocal = overrideJndiNameLocal;
     
      // Resolve
      String resolvedRemote = beanMD.getHomeJndiName();
      String resolvedLocal = beanMD.getLocalHomeJndiName();
     
      // Test
      assertEquals(expectedRemote, resolvedRemote);
      assertEquals(expectedLocal, resolvedLocal);
     
      // Test Deprecated, backwards-compat behavior (may be removed when these methods no longer exist, JBMETA-68)
      String resolvedDeprecatedRemote = beanMD.determineResolvedJndiName(KnownInterfaces.HOME, null);
      assertEquals(expectedRemote, resolvedDeprecatedRemote);
      String resolvedDeprecatedLocal = beanMD.determineResolvedJndiName(KnownInterfaces.LOCAL_HOME, null);
      assertEquals(expectedLocal, resolvedDeprecatedLocal);
   }
  
   /**
    * Tests that JNDI Names for an EJB packaged
    * in a JAR have no "appName" in the base
    */
   @SuppressWarnings(value="deprecation")
   public void testResolvedJndiNameJarPackaging()
   {
      // Obtain MD
      JBossSessionBeanMetaData beanMD = this.getDecoratedEjbMetaData();
      JBossMetaData jbossMd = beanMD.getJBossMetaData();
      DeploymentSummary deploymentSummary = jbossMd.getDeploymentSummary();
     
      // Set packaging type to "JAR"
      deploymentSummary.setPackagingType(PackagingType.JAR);
     
      String expectedHome = "testResolvedJndiNameJarPackaging-ejb/home";
      String expectedRemote = "testResolvedJndiNameJarPackaging-ejb/remote";
      String expectedLocalHome = "testResolvedJndiNameJarPackaging-ejb/localHome";
      String expectedLocal = "testResolvedJndiNameJarPackaging-ejb/local";
     
      // Resolve
      String resolvedHome = beanMD.getHomeJndiName();
      String resolvedRemote = beanMD.getJndiName();
      String resolvedLocalHome = beanMD.getLocalHomeJndiName();
      String resolvedLocal = beanMD.getLocalJndiName();
     
      // Test
      assertEquals(expectedHome, resolvedHome);
      assertEquals(expectedRemote, resolvedRemote);
      assertEquals(expectedLocalHome, resolvedLocalHome);
      assertEquals(expectedLocal, resolvedLocal);
     
      // Test Deprecated, backwards-compat behavior (may be removed when these methods no longer exist, JBMETA-68)
      String resolvedDeprecatedHome = beanMD.determineResolvedJndiName(KnownInterfaces.HOME, null);
      assertEquals(expectedHome, resolvedDeprecatedHome);
      String resolvedDeprecatedRemote = beanMD.determineResolvedJndiName(KnownInterfaces.REMOTE, null);
      assertEquals(expectedRemote, resolvedDeprecatedRemote);
      String resolvedDeprecatedLocalHome = beanMD.determineResolvedJndiName(KnownInterfaces.LOCAL_HOME, null);
      assertEquals(expectedLocalHome, resolvedDeprecatedLocalHome);
      String resolvedDeprecatedLocal = beanMD.determineResolvedJndiName(KnownInterfaces.LOCAL, null);
      assertEquals(expectedLocal, resolvedDeprecatedLocal);
   }

   @SuppressWarnings(value="deprecation")
   public void testResolvedJndiNameWithMappedName()
   {
      // Obtain MD, set mappedName, and define expected values for resolution
      JBossSessionBeanMetaData beanMD = getDecoratedEjbMetaData();
      String mappedName = "testResolvedJndiName-mapped-name";
      beanMD.setMappedName(mappedName);
     
      // Execute the tests
      String expectedBase = "base/testResolvedJndiNameWithMappedName-ejb/";
      this.resolvedOverrideName(beanMD, mappedName, expectedBase);
     
   }
  
   @SuppressWarnings(value="deprecation")
   public void testResolvedJndiNameWithJndiName()
   {
      // Obtain MD, set mappedName, and define expected values for resolution
      JBossSessionBeanMetaData beanMD = this.getEjbMetaData();
      String jndiName = "testResolvedJndiName-jndi-name";
      beanMD.setJndiName(jndiName);
     
      // Now decorate
      beanMD = this.decorateEjbMetaData(beanMD);
     
      // Execute the tests
      String expectedBase = "base/testResolvedJndiNameWithJndiName-ejb/";
      this.resolvedOverrideName(beanMD, jndiName, expectedBase);
     
   }
  
   /**
    * JBMETA-144
    *
    * Ensure that explicit "jndi-name" on decorated
    * @Service bean is honored
    */
   @SuppressWarnings(value="deprecation")
   public void testResolvedJndiNameWithJndiNameServiceMetadata()
   {
      // Obtain MD, set mappedName, and define expected values for resolution
      JBossSessionBeanMetaData beanMD = this.getServiceBeanMetaData();
      String jndiName = "testResolvedJndiName-jndi-name";
      beanMD.setJndiName(jndiName);
     
      // Now decorate
      beanMD = this.decorateEjbMetaData(beanMD);
     
      // Test
      TestCase.assertEquals("Overriding jndi-name did not have impact upon "
            + JBossServiceBeanMetaData.class.getSimpleName(), jndiName, beanMD.getJndiName());
   }
  
   /**
    * Tests for resolved JNDI names in presense of a mapped-name or
    * jndi-name override
    *
    * @param md
    * @param overrideName
    */
   private void resolvedOverrideName(JBossSessionBeanMetaData md, String overrideName, String expectedBase)
   {
      String expectedRemoteBusiness = overrideName;
      String expectedLocalBusiness = expectedBase + "local";
      String expectedLocalHome = expectedBase + "localHome";
      String expectedHome = expectedBase + "home";

      // Resolve
      String resolvedRemoteBusiness = md.getJndiName();
      String resolvedHome = md.getHomeJndiName();

      // Test
      assertEquals(
            "JNDI Target for default remote business interface in presense of mapped-name must be equal to overridden name",
            expectedRemoteBusiness, resolvedRemoteBusiness);
      assertEquals("JNDI Target for Remote Home in presense of an overridden name is invalid", expectedHome,
            resolvedHome);

      // Test Deprecated, backwards-compat behavior (may be removed when these methods no longer exist, JBMETA-68)
      String resolvedDeprecatedRemoteDefault = md.determineJndiName();
      String resolvedDeprecatedRemoteDefault2 = md.determineResolvedJndiName(KnownInterfaces.REMOTE, null);
      String resolvedDeprecatedLocalDefault = md.determineLocalJndiName();
      String resolvedDeprecatedLocalDefault2 = md.determineResolvedJndiName(KnownInterfaces.LOCAL, null);
      String resolvedDeprecatedLocalHome = md.determineResolvedJndiName(KnownInterfaces.LOCAL_HOME, null);
      String resolvedDeprecatedHome = md.determineResolvedJndiName(KnownInterfaces.HOME, null);
      assertEquals(expectedHome, resolvedDeprecatedHome);
      assertEquals(expectedRemoteBusiness, resolvedDeprecatedRemoteDefault);
      assertEquals(expectedRemoteBusiness, resolvedDeprecatedRemoteDefault2);
      assertEquals(expectedLocalBusiness, resolvedDeprecatedLocalDefault);
      assertEquals(expectedLocalBusiness, resolvedDeprecatedLocalDefault2);
      assertEquals(expectedLocalHome, resolvedDeprecatedLocalHome);
   }

   @SuppressWarnings(value="deprecation")
   public void testResolvedJndiNames()
   {
      // Get Metadata
      JBossSessionBeanMetaData beanMD = getDecoratedEjbMetaData();
     
      // Remove a defined jndi-name
     
      // Define expected resolved values
      String expectedBase = "base/testResolvedJndiNames-ejb/";
      String expectedRemote = beanMD.getJndiName();
      String expectedHome = expectedBase + KnownInterfaceType.REMOTE_HOME.toSuffix();
      String expectedLocal = expectedBase + KnownInterfaceType.BUSINESS_LOCAL.toSuffix();
      String expectedLocalHome = expectedBase + KnownInterfaceType.LOCAL_HOME.toSuffix();
     
      // Resolve
      String resolvedJndiNameRemote = beanMD.getJndiName();
      String resolvedJndiNameHome = beanMD.getHomeJndiName();
      String resolvedJndiNameLocal = beanMD.getLocalJndiName();
      String resolvedJndiNameLocalHome = beanMD.getLocalHomeJndiName();

      // Test
      assertEquals(expectedRemote, resolvedJndiNameRemote);
      assertEquals(expectedHome, resolvedJndiNameHome);
      assertEquals(expectedLocal, resolvedJndiNameLocal);
      assertEquals(expectedLocalHome, resolvedJndiNameLocalHome);

      // Test Deprecated, backwards-compat behavior (may be removed when these methods no longer exist, JBMETA-68)
      String resolvedJndiNameRemoteD = beanMD.determineResolvedJndiName(KnownInterfaces.REMOTE, null);
      String resolvedJndiNameRemoteD2 = beanMD.determineJndiName();
      assertEquals(expectedRemote, resolvedJndiNameRemoteD);
      assertEquals(expectedRemote, resolvedJndiNameRemoteD2);
      String resolvedJndiNameHomeD = beanMD.determineResolvedJndiName(KnownInterfaces.HOME, null);
      assertEquals(expectedHome, resolvedJndiNameHomeD);
      String resolvedJndiNameLocalD = beanMD.determineResolvedJndiName(KnownInterfaces.LOCAL, null);
      String resolvedJndiNameLocalD2 = beanMD.determineLocalJndiName();
      assertEquals(expectedLocal, resolvedJndiNameLocalD);
      assertEquals(expectedLocal, resolvedJndiNameLocalD2);
      String resolvedJndiNameLocalHomeD = beanMD.determineResolvedJndiName(KnownInterfaces.LOCAL_HOME, null);
      assertEquals(expectedLocalHome, resolvedJndiNameLocalHomeD);
   }

   /**
    * JBMETA-36, JBMETA-37
    */
   @SuppressWarnings(value="deprecation")
   public void testResolvedJndiNamesWithKnownIfaces()
   {
      // Obtain MD
      JBossSessionBeanMetaData beanMD = getDecoratedEjbMetaData();

      // Define some interfaces
      String localInterface1 = "org.jboss.ifaces.LocalIF1";
      String localInterface2 = "org.jboss.ifaces.LocalIF2";
      String localHomeInterface = "org.jboss.ifaces.LocalHomeIF";
      String homeInterface = "org.jboss.ifaces.HomeIF";
      String remoteInterface1 = "org.jboss.ifaces.RemoteIF1";
      String remoteInterface2 = "org.jboss.ifaces.RemoteIF2";

      // Manually Set Interfaces
      beanMD.setLocal(localInterface1);
      beanMD.setLocalHome(localHomeInterface);
      beanMD.setHome(homeInterface);
      beanMD.setRemote(remoteInterface1);
      BusinessLocalsMetaData locals = new BusinessLocalsMetaData();
      locals.add(localInterface1);
      locals.add(localInterface2);
      beanMD.setBusinessLocals(locals);
      BusinessRemotesMetaData remotes = new BusinessRemotesMetaData();
      remotes.add(remoteInterface1);
      remotes.add(remoteInterface2);
      beanMD.setBusinessRemotes(remotes);

      // Define expected resolved values
      String base = "base/testResolvedJndiNamesWithKnownIfaces-ejb/";
      String expectedRemoteDefault = base + "remote";
      String expectedRemote1 = base + "remote-org.jboss.ifaces.RemoteIF1";
      String expectedRemote2 = base + "remote-org.jboss.ifaces.RemoteIF2";
      String expectedHome = base + KnownInterfaceType.REMOTE_HOME.toSuffix();
      String expectedLocalDefault = base + KnownInterfaceType.BUSINESS_LOCAL.toSuffix();
      String expectedLocal1 = base + "local-org.jboss.ifaces.LocalIF1";
      String expectedLocal2 = base + "local-org.jboss.ifaces.LocalIF2";
      String expectedLocalHome = base + KnownInterfaceType.LOCAL_HOME.toSuffix();

      // Resolve
      String resolvedJndiNameRemoteDefaultFromMDMethod = beanMD.getJndiName();
      String resolvedJndiNameRemoteDefaultUsingResovler = JbossSessionBeanJndiNameResolver
            .resolveRemoteBusinessDefaultJndiName(beanMD);
      String resolvedJndiNameRemoteDefaultUsingResovlerType = JbossSessionBeanJndiNameResolver.resolveJndiName(beanMD,
            KnownInterfaces.REMOTE);
      String resolvedJndiNameRemote1 = JbossSessionBeanJndiNameResolver.resolveJndiName(beanMD, remoteInterface1);
      String resolvedJndiNameRemote2 = JbossSessionBeanJndiNameResolver.resolveJndiName(beanMD, remoteInterface2);
      String resolvedJndiNameHomeFromMdMethod = beanMD.getHomeJndiName();
      String resolvedJndiNameHomeUsingResolver = JbossSessionBeanJndiNameResolver.resolveRemoteHomeJndiName(beanMD);
      String resolvedJndiNameLocalDefaultFromMDMethod = beanMD.getLocalJndiName();
      String resolvedJndiNameLocalDefaultUsingResovler = JbossSessionBeanJndiNameResolver
            .resolveLocalBusinessDefaultJndiName(beanMD);
      String resolvedJndiNameLocalDefaultUsingResovlerType = JbossSessionBeanJndiNameResolver.resolveJndiName(beanMD,
            KnownInterfaces.LOCAL);
      String resolvedJndiNameLocal = JbossSessionBeanJndiNameResolver.resolveJndiName(beanMD, localInterface1);
      String resolvedJndiNameLocal2 = JbossSessionBeanJndiNameResolver.resolveJndiName(beanMD, localInterface2);
      String resolvedJndiNameLocalHomeFromMdMethod = beanMD.getLocalHomeJndiName();
      String resolvedJndiNameLocalHomeUsingResolver = JbossSessionBeanJndiNameResolver.resolveLocalHomeJndiName(beanMD);

      // Test
      assertEquals(expectedRemoteDefault, resolvedJndiNameRemoteDefaultFromMDMethod);
      assertEquals(expectedRemoteDefault, resolvedJndiNameRemoteDefaultUsingResovler);
      assertEquals(expectedRemoteDefault, resolvedJndiNameRemoteDefaultUsingResovlerType);
      assertEquals(expectedRemote1, resolvedJndiNameRemote1);
      assertEquals(expectedRemote2, resolvedJndiNameRemote2);
      assertEquals(expectedHome, resolvedJndiNameHomeFromMdMethod);
      assertEquals(expectedHome, resolvedJndiNameHomeUsingResolver);
      assertEquals(expectedLocalDefault, resolvedJndiNameLocalDefaultFromMDMethod);
      assertEquals(expectedLocalDefault, resolvedJndiNameLocalDefaultUsingResovler);
      assertEquals(expectedLocalDefault, resolvedJndiNameLocalDefaultUsingResovlerType);
      assertEquals(expectedLocal1, resolvedJndiNameLocal);
      assertEquals(expectedLocal2, resolvedJndiNameLocal2);
      assertEquals(expectedLocalHome, resolvedJndiNameLocalHomeFromMdMethod);
      assertEquals(expectedLocalHome, resolvedJndiNameLocalHomeUsingResolver);
     
      // Test Deprecated, backwards-compat behavior (may be removed when these methods no longer exist, JBMETA-68)
      String resolvedJndiNameRemoteD = beanMD.determineResolvedJndiName(remoteInterface1, null);
      assertEquals(expectedRemote1, resolvedJndiNameRemoteD);
      String resolvedJndiNameRemote2D = beanMD.determineResolvedJndiName(remoteInterface2, null);
      assertEquals(expectedRemote2, resolvedJndiNameRemote2D);
      String resolvedJndiNameHomeD = beanMD.determineResolvedJndiName(homeInterface, null);
      assertEquals(expectedHome, resolvedJndiNameHomeD);
      String resolvedJndiNameLocalD = beanMD.determineResolvedJndiName(localInterface1, null);
      assertEquals(expectedLocal1, resolvedJndiNameLocalD);
      String resolvedJndiNameLocal2D = beanMD.determineResolvedJndiName(localInterface2, null);
      assertEquals(expectedLocal2, resolvedJndiNameLocal2D);
      String resolvedJndiNameLocalHomeD = beanMD.determineResolvedJndiName(localHomeInterface, null);
      assertEquals(expectedLocalHome, resolvedJndiNameLocalHomeD);
   }

   @SuppressWarnings(value="deprecation")
   public void testResolvedJndiNamesWithKnownIfaces2x()
   {
      // Get MD
      JBossSessionBeanMetaData sbeanMD = getDecoratedEjbMetaData();
     
      // Manually set Version to EJB2.x
      sbeanMD.getJBossMetaData().setEjbVersion("2.1");
     
      // Define Interfaces
      String local ="org.jboss.ifaces.LocalIF";
      String localHome = "org.jboss.ifaces.LocalHomeIF";
      String home = "org.jboss.ifaces.HomeIF";
      String remote = "org.jboss.ifaces.RemoteIF";
     
      // Manually Set Interfaces
      sbeanMD.setLocal(local);
      sbeanMD.setLocalHome(localHome);
      sbeanMD.setHome(home);
      sbeanMD.setRemote(remote);
     
      // Define expected values
      String expectedRemote = "base/testResolvedJndiNamesWithKnownIfaces2x-ejb";
      String expectedHome = "base/testResolvedJndiNamesWithKnownIfaces2x-ejb";
      String expectedLocalHome = "local/" + sbeanMD.getEjbName() + '@' + System.identityHashCode(sbeanMD.getEjbName());
     
      // Resolve
      String resolvedRemote = sbeanMD.getJndiName();
      String resolvedHome = sbeanMD.getHomeJndiName();
      String resolvedLocal = sbeanMD.getLocalJndiName();
      String resolvedLocalHome = sbeanMD.getLocalHomeJndiName();
     
      // Test
      assertEquals(expectedRemote, resolvedRemote);
      assertEquals(expectedHome, resolvedHome);
      assertEquals(resolvedRemote, resolvedHome);
      assertEquals(expectedLocalHome, resolvedLocal);
      assertEquals(resolvedLocal, resolvedLocalHome);
     
      // Test Deprecated, backwards-compat behavior (may be removed when these methods no longer exist, JBMETA-68)
      String resolvedJndiNameD = sbeanMD.determineJndiName();
      assertEquals(expectedRemote, resolvedJndiNameD);
      String resolvedJndiNameHomeD = sbeanMD.determineResolvedJndiName(home, null);
      assertEquals(expectedHome, resolvedJndiNameHomeD);
      assertEquals(expectedLocalHome, sbeanMD.determineLocalJndiName());
      String resolvedJndiNameLocalHomeD = sbeanMD.determineResolvedJndiName(localHome, null);
      assertEquals(sbeanMD.determineLocalJndiName(), resolvedJndiNameLocalHomeD);
   }

   /**
    * Test resolved jndi name for an entity bean
    */
   @SuppressWarnings(value="deprecation")
   public void testResolvedJndiNamesWithKnownIfacesEntity()
   {
      // Obtain MD
      JBossEntityBeanMetaData beanMD = getEntityMetaData();
     
      // Declare Interfaces
      String local = "org.jboss.ifaces.LocalIF";
      String localHome = "org.jboss.ifaces.LocalHomeIF";
      String home = "org.jboss.ifaces.HomeIF";
      String remote = "org.jboss.ifaces.RemoteIF";
      String randomInterface = "org.jboss.test.some.IFace";

      // Manually set interfaces on MD
      beanMD.setLocal(local);
      beanMD.setLocalHome(localHome);
      beanMD.setHome(home);
      beanMD.setRemote(remote);
     
      // Define expected results
      String expectedRemote = "base/testResolvedJndiNamesWithKnownIfacesEntity-jndi-name";
      String expectedHome = "base/testResolvedJndiNamesWithKnownIfacesEntity-jndi-name/home";
      String expectedLocalHome = "base/testResolvedJndiNamesWithKnownIfacesEntity-jndi-name/localHome";
      String expectedRandomInterface = "base/testResolvedJndiNamesWithKnownIfacesEntity-jndi-name/" + randomInterface;
     
      // Resolve
      String resolvedDefault = JbossEnterpriseBeanJndiNameResolver.resolveJndiName(beanMD, null);
      String resolvedHomeUsingInterface = JbossEnterpriseBeanJndiNameResolver.resolveJndiName(beanMD, home);
      String resolvedHomeUsingType = JbossEnterpriseBeanJndiNameResolver.resolveJndiName(beanMD, KnownInterfaces.HOME);
      String resolvedLocalHomeUsingInterface = JbossEnterpriseBeanJndiNameResolver.resolveJndiName(beanMD, localHome);
      String resolvedLocalHomeUsingType = JbossEnterpriseBeanJndiNameResolver.resolveJndiName(beanMD, KnownInterfaces.LOCAL_HOME);
      String resolvedInterfaceSpecific = JbossEnterpriseBeanJndiNameResolver.resolveJndiName(beanMD, randomInterface);
     
      // Test
      assertEquals(expectedRemote, resolvedDefault);
      assertEquals(expectedHome, resolvedHomeUsingInterface);
      assertEquals(expectedHome, resolvedHomeUsingType);
      assertEquals(expectedLocalHome, resolvedLocalHomeUsingInterface);
      assertEquals(expectedLocalHome, resolvedLocalHomeUsingType);
      assertEquals(expectedRandomInterface, resolvedInterfaceSpecific);

      // Test Deprecated, backwards-compat behavior (may be removed when these methods no longer exist, JBMETA-68)
      String resolvedJndiNameD = beanMD.determineResolvedJndiName(null, null);
      assertEquals(expectedRemote, resolvedJndiNameD);
      String resolvedJndiNameHomeD = beanMD.determineResolvedJndiName(home, null);
      assertEquals(expectedHome, resolvedJndiNameHomeD);
      String resolvedJndiNameLocalHomeD = beanMD.determineResolvedJndiName(localHome, null);
      assertEquals(expectedLocalHome, resolvedJndiNameLocalHomeD);
      String resolvedJndiNameIfaceD = beanMD.determineResolvedJndiName(randomInterface, null);
      assertEquals(expectedRandomInterface, resolvedJndiNameIfaceD);
   }

   /**
    * Test the determineResolvedJndiName with a jndiBindingPolicy on the
    * JBossSessionPolicyDecorator
    *
    */
   @SuppressWarnings(value="deprecation")
   public void testResolvedJndiNamesWithMDPolicy()
   {
      // Get Metadata
      JBossSessionBeanMetaData beanMD = this.getEjbMetaData();
     
      // Manually Decorate
      beanMD = new JBossSessionPolicyDecorator(beanMD,new EjbNameJndiBindingPolicy());
     
      // Define Expected Results
      String expectedRemote  = "testResolvedJndiNamesWithMDPolicy-ejbRemote";
      String expectedHome  = "testResolvedJndiNamesWithMDPolicy-ejbHome";
      String expectedLocal = "testResolvedJndiNamesWithMDPolicy-ejbLocal";
      String expectedLocalHome = "testResolvedJndiNamesWithMDPolicy-ejbLocalHome";
     
      // Resolve
      String resolvedJndiNameRemoteUsingResolver = JbossSessionBeanJndiNameResolver.resolveRemoteBusinessDefaultJndiName(beanMD);
      String resolvedJndiNameRemoteUsingResolverType = JbossSessionBeanJndiNameResolver.resolveJndiName(beanMD,KnownInterfaces.REMOTE);
      String resolvedJndiNameHomeUsingResolver = JbossSessionBeanJndiNameResolver.resolveRemoteHomeJndiName(beanMD);
      String resolvedJndiNameHomeUsingResolverType = JbossSessionBeanJndiNameResolver.resolveJndiName(beanMD,KnownInterfaces.HOME);
      String resolvedJndiNameLocalUsingResolver = JbossSessionBeanJndiNameResolver.resolveLocalBusinessDefaultJndiName(beanMD);
      String resolvedJndiNameLocalUsingResolverType = JbossSessionBeanJndiNameResolver.resolveJndiName(beanMD,KnownInterfaces.LOCAL);     
      String resolvedJndiNameLocalHomeUsingResolver = JbossSessionBeanJndiNameResolver.resolveLocalHomeJndiName(beanMD);
      String resolvedJndiNameLocalHomeUsingResolverType = JbossSessionBeanJndiNameResolver.resolveJndiName(beanMD,KnownInterfaces.LOCAL_HOME);
     
      // Test
      assertEquals(expectedRemote,resolvedJndiNameRemoteUsingResolver);
      assertEquals(expectedRemote,resolvedJndiNameRemoteUsingResolverType);
      assertEquals(expectedHome,resolvedJndiNameHomeUsingResolver);
      assertEquals(expectedHome,resolvedJndiNameHomeUsingResolverType);
      assertEquals(expectedLocal,resolvedJndiNameLocalUsingResolver);
      assertEquals(expectedLocal,resolvedJndiNameLocalUsingResolverType);
      assertEquals(expectedLocalHome,resolvedJndiNameLocalHomeUsingResolver);
      assertEquals(expectedLocalHome,resolvedJndiNameLocalHomeUsingResolverType);
     
      // Test Deprecated, backwards-compat behavior (may be removed when these methods no longer exist, JBMETA-68)
      String resolvedJndiNameRemoteD = beanMD.determineResolvedJndiName(KnownInterfaces.REMOTE, null);
      assertEquals(expectedRemote, resolvedJndiNameRemoteD);
      String resolvedJndiNameHomeD = beanMD.determineResolvedJndiName(KnownInterfaces.HOME, null);
      assertEquals(expectedHome, resolvedJndiNameHomeD);
      String resolvedJndiNameLocalD = beanMD.determineResolvedJndiName(KnownInterfaces.LOCAL, null);
      assertEquals(expectedLocal, resolvedJndiNameLocalD);
      String resolvedJndiNameLocalHomeD = beanMD.determineResolvedJndiName(KnownInterfaces.LOCAL_HOME, null);
      assertEquals(expectedLocalHome, resolvedJndiNameLocalHomeD);
   }

   /*
    * This test has been removed, as specifying a Policy by the caller when looking for
    * a Resolved JNDI Name is beyond scope of the Object Model.  This should be done
    * when the Object is decorated, as exhibited by "testResolvedJndiNamesWithMDPolicy"
    */
//   /**
//    * Test the determineResolvedJndiName with a jndiBindingPolicy passed into
//    * determineResolvedJndiName
//    *
//    */
//   public void testResolvedJndiNamesWithExternalPolicy()
//   {
//      JBossEnterpriseBeanMetaData beanMD = getDecoratedEjbMetaData();
//      EjbNameJndiBindingPolicy policy = new EjbNameJndiBindingPolicy();
//      String resolvedJndiNameRemote = beanMD.determineResolvedJndiName(KnownInterfaces.REMOTE, policy);
//      assertEquals("testResolvedJndiNamesWithExternalPolicy-ejbRemote", resolvedJndiNameRemote);
//      String resolvedJndiNameHome = beanMD.determineResolvedJndiName(KnownInterfaces.HOME, policy);
//      assertEquals("testResolvedJndiNamesWithExternalPolicy-ejbHome", resolvedJndiNameHome);
//      String resolvedJndiNameLocal = beanMD.determineResolvedJndiName(KnownInterfaces.LOCAL, policy);
//      assertEquals("testResolvedJndiNamesWithExternalPolicy-ejbLocal", resolvedJndiNameLocal);
//      String resolvedJndiNameLocalHome = beanMD.determineResolvedJndiName(KnownInterfaces.LOCAL_HOME, policy);
//      assertEquals("testResolvedJndiNamesWithExternalPolicy-ejbLocalHome", resolvedJndiNameLocalHome);
//   }
  
   /**
    * Decorates the specified metadata with a Basic JNDI Binding Policy
    */
   protected JBossSessionBeanMetaData decorateEjbMetaData(JBossSessionBeanMetaData smd)
   {
      return this.decorateEjbMetaData(smd, new BasicJndiBindingPolicy());
   }

   /**
    * Decorates the specified metadata with the specified Default JNDI
    * Binding Policy
    *
    * @param smd
    * @param policy
    * @return
    */
   protected JBossSessionBeanMetaData decorateEjbMetaData(JBossSessionBeanMetaData smd, DefaultJndiBindingPolicy policy)
   {
      return new JBossSessionPolicyDecorator(smd, policy);
   }

   /**
    * Creates a JBossSessionBeanMetaData decorated with a BasicJndiBindingPolicy
    */
   protected JBossSessionBeanMetaData getDecoratedEjbMetaData()
   {
      // Get MD
      JBossSessionBeanMetaData sbeanMD = this.getEjbMetaData();

      // We want the meta data decorated with the JNDI binding policy.
      sbeanMD =  this.decorateEjbMetaData(sbeanMD);
     
      // Return
      return sbeanMD;
   }
  
   /**
    * Creates a JBossSessionBeanMetaData with associated JBossMetaData with:
    * ejbName = getName() + "-ejb"
    * ejbClass = "org.jboss.ejb."+ getName()
    * jndiName = getName() + "-jndi-name"
    * @return JBossSessionBeanMetaData
    */
   protected JBossSessionBeanMetaData getEjbMetaData()
   {
      String name = super.getName();
      JBossMetaData jbossMetaData = new JBossMetaData();
      jbossMetaData.setEjbVersion("3.0");
      DeploymentSummary deploymentSummary = new DeploymentSummary();
      deploymentSummary.setDeploymentName(name);
      deploymentSummary.setDeploymentScopeBaseName("base");
      deploymentSummary.setPackagingType(PackagingType.EAR);
      jbossMetaData.setDeploymentSummary(deploymentSummary);
      JBossSessionBeanMetaData sbeanMD = new JBossSessionBeanMetaData();
      sbeanMD.setEjbName(name + "-ejb");
      sbeanMD.setEjbClass("org.jboss.ejb." + name);
      JBossEnterpriseBeansMetaData beans = new JBossEnterpriseBeansMetaData();
      beans.setEjbJarMetaData(jbossMetaData);
      beans.add(sbeanMD);
      jbossMetaData.setEnterpriseBeans(beans);
     
      // Return
      return sbeanMD;
   }
  
   /**
    * Creates a JBossSessionBeanMetaData with associated JBossMetaData with:
    * ejbName = getName() + "-ejb"
    * ejbClass = "org.jboss.ejb."+ getName()
    * jndiName = getName() + "-jndi-name"
    * @return JBossSessionBeanMetaData
    */
   protected JBossServiceBeanMetaData getServiceBeanMetaData()
   {
      String name = super.getName();
      JBossMetaData jbossMetaData = new JBossMetaData();
      jbossMetaData.setEjbVersion("3.0");
      DeploymentSummary deploymentSummary = new DeploymentSummary();
      deploymentSummary.setDeploymentName(name);
      deploymentSummary.setDeploymentScopeBaseName("base");
      deploymentSummary.setPackagingType(PackagingType.EAR);
      jbossMetaData.setDeploymentSummary(deploymentSummary);
      JBossServiceBeanMetaData sbeanMD = new JBossServiceBeanMetaData();
      sbeanMD.setEjbName(name + "-ejb");
      sbeanMD.setEjbClass("org.jboss.ejb." + name);
      JBossEnterpriseBeansMetaData beans = new JBossEnterpriseBeansMetaData();
      beans.setEjbJarMetaData(jbossMetaData);
      beans.add(sbeanMD);
      jbossMetaData.setEnterpriseBeans(beans);
     
      // Return
      return sbeanMD;
   }

   /**
    * Creates a JBossEntityBeanMetaData with associated JBossMetaData with:
    * ejbName = getName() + "-ejb"
    * ejbClass = "org.jboss.ejb."+ getName()
    * jndiName = getName() + "-jndi-name"
    * @return JBossEntityBeanMetaData
    */
   protected JBossEntityBeanMetaData getEntityMetaData()
   {
      String name = super.getName();
      JBossMetaData jbossMetaData = new JBossMetaData();
      jbossMetaData.setEjbVersion("3.0");
      DeploymentSummary deploymentSummary = new DeploymentSummary();
      deploymentSummary.setDeploymentName(name);
      deploymentSummary.setDeploymentScopeBaseName("base");
      deploymentSummary.setPackagingType(PackagingType.EAR);
      jbossMetaData.setDeploymentSummary(deploymentSummary);
      JBossEntityBeanMetaData sbeanMD = new JBossEntityBeanMetaData();
      sbeanMD.setEjbName(name + "-ejb");
      sbeanMD.setEjbClass("org.jboss.ejb." + name);
      sbeanMD.setJndiName(name + "-jndi-name");
      JBossEnterpriseBeansMetaData beans = new JBossEnterpriseBeansMetaData();
      beans.setEjbJarMetaData(jbossMetaData);
      beans.add(sbeanMD);
      jbossMetaData.setEnterpriseBeans(beans);
     
      // Decorate
      sbeanMD = new JbossEntityPolicyDecorator(sbeanMD,new BasicJndiBindingPolicy());
     
      return sbeanMD;
   }
}
TOP

Related Classes of org.jboss.test.metadata.ejb.ResolveJndiNameDecoratorUnitTestCase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.