Author: rmannibucau
Date: Mon Dec 17 13:02:04 2012
New Revision: 1422917

URL: http://svn.apache.org/viewvc?rev=1422917&view=rev
Log:
TOMEE-662 alias support for resources

Added:
    
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/resource/AliasesFromXmlTest.java
    
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/resource/AliasesTest.java
Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceInfo.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/JaxbOpenejb.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Resource.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/SaxOpenejb.java
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/StackHandler.java
    
openejb/trunk/openejb/container/openejb-core/src/main/resources/org/apache/openejb/assembler/classic/Messages.properties
    
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/persistence/DataSourceInitialSizeAdjustingTest.java

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java?rev=1422917&r1=1422916&r2=1422917&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java
 Mon Dec 17 13:02:04 2012
@@ -46,6 +46,7 @@ public class AppInfo extends InfoObject 
     public final List<String> libs = new ArrayList<String>();
     public final Set<String> watchedResources = new TreeSet<String>();
     public final Set<String> resourceIds = new TreeSet<String>();
+    public final Set<String> resourceAliases = new TreeSet<String>();
     public final JndiEncInfo globalJndiEnc = new JndiEncInfo();
     public final JndiEncInfo appJndiEnc = new JndiEncInfo();
     public String cmpMappingsXml;

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1422917&r1=1422916&r2=1422917&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
 Mon Dec 17 13:02:04 2012
@@ -98,6 +98,7 @@ import org.apache.openejb.util.AsmParame
 import org.apache.openejb.util.Contexts;
 import org.apache.openejb.util.EventHelper;
 import org.apache.openejb.util.JndiTreeBrowser;
+import org.apache.openejb.util.Join;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
 import org.apache.openejb.util.Messages;
@@ -1443,6 +1444,14 @@ public class Assembler extends Assembler
                 logger.warning("can't unbind resource '{0}'", id);
             }
         }
+        for (final String id : appInfo.resourceAliases) {
+            final String name = OPENEJB_RESOURCE_JNDI_PREFIX + id;
+            try {
+                globalContext.unbind(name);
+            } catch (NamingException e) {
+                logger.warning("can't unbind resource '{0}'", id);
+            }
+        }
 
         containerSystem.removeAppContext(appInfo.appId);
 
@@ -1852,7 +1861,19 @@ public class Assembler extends Assembler
             logUnusedProperties(serviceRecipe, serviceInfo);
         }
 
-        final String name = OPENEJB_RESOURCE_JNDI_PREFIX + serviceInfo.id;
+        bindResource(serviceInfo.id, service);
+        for (String alias : serviceInfo.aliases) {
+            bindResource(alias, service);
+        }
+
+        // Update the config tree
+        config.facilities.resources.add(serviceInfo);
+
+        logger.getChildLogger("service").debug("createService.success", 
serviceInfo.service, serviceInfo.id, serviceInfo.className);
+    }
+
+    private void bindResource(final String id, final Object service) throws 
OpenEJBException {
+        final String name = OPENEJB_RESOURCE_JNDI_PREFIX + id;
         try {
             containerSystem.getJNDIContext().bind(name, service);
         } catch (NameAlreadyBoundException nabe) {
@@ -1861,16 +1882,11 @@ public class Assembler extends Assembler
                 containerSystem.getJNDIContext().unbind(name);
                 containerSystem.getJNDIContext().bind(name, service);
             } catch (NamingException e) {
-                throw new OpenEJBException("Cannot bind resource adapter with 
id " + serviceInfo.id, e);
+                throw new OpenEJBException("Cannot bind resource adapter with 
id " + id, e);
             }
         } catch (NamingException e) {
-            throw new OpenEJBException("Cannot bind resource adapter with id " 
+ serviceInfo.id, e);
+            throw new OpenEJBException("Cannot bind resource adapter with id " 
+ id, e);
         }
-
-        // Update the config tree
-        config.facilities.resources.add(serviceInfo);
-
-        logger.getChildLogger("service").debug("createService.success", 
serviceInfo.service, serviceInfo.id, serviceInfo.className);
     }
 
     private static String extractHost(final String url) { // can be enhanced
@@ -2079,7 +2095,19 @@ public class Assembler extends Assembler
 
     private ObjectRecipe createRecipe(final ServiceInfo info) {
         final Logger serviceLogger = logger.getChildLogger("service");
-        serviceLogger.info("createService", info.service, info.id, 
info.className);
+
+        if (info instanceof ResourceInfo) {
+            final List<String> aliasesList = ((ResourceInfo) info).aliases;
+            if (!aliasesList.isEmpty()) {
+                String aliases = Join.join(", ", aliasesList);
+                serviceLogger.info("createServiceWithAliases", info.service, 
info.id, aliases);
+            } else {
+                serviceLogger.info("createService", info.service, info.id);
+            }
+        } else {
+            serviceLogger.info("createService", info.service, info.id);
+        }
+
         final ObjectRecipe serviceRecipe = prepareRecipe(info);
         serviceRecipe.setAllProperties(info.properties);
 

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceInfo.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceInfo.java?rev=1422917&r1=1422916&r2=1422917&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceInfo.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ResourceInfo.java
 Mon Dec 17 13:02:04 2012
@@ -16,7 +16,11 @@
  */
 package org.apache.openejb.assembler.classic;
 
+import java.util.ArrayList;
+import java.util.List;
+
 public class ResourceInfo extends ServiceInfo {
     public String jndiName = "";
     public String originAppName = null; // if define by an app
+    public List<String> aliases = new ArrayList<String>();
 }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java?rev=1422917&r1=1422916&r2=1422917&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
 Mon Dec 17 13:02:04 2012
@@ -329,6 +329,7 @@ class AppInfoBuilder {
             // so we skip the undeployement skipping the id
             if (!def.getProperties().containsKey("ApplicationWide")) {
                 info.resourceIds.add(def.getId());
+                info.resourceAliases.addAll(def.getAliases());
             }
         }
     }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java?rev=1422917&r1=1422916&r2=1422917&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
 Mon Dec 17 13:02:04 2012
@@ -1503,6 +1503,7 @@ public class AutoConfig implements Dynam
                         configureImplicitDataSource(nonJtaResourceInfo);
                         nonJtaResourceInfo.id = jtaResourceInfo.id + "NonJta";
                         nonJtaResourceInfo.originAppName = 
jtaResourceInfo.originAppName;
+                        suffixAliases(nonJtaResourceInfo, "NonJta");
 
                         Properties overrides = 
ConfigurationFactory.getSystemProperties(nonJtaResourceInfo.id, 
nonJtaResourceInfo.service);
                         nonJtaResourceInfo.properties.putAll(overrides);
@@ -1558,6 +1559,7 @@ public class AutoConfig implements Dynam
                         ResourceInfo jtaResourceInfo = 
copy(nonJtaResourceInfo);
                         configureImplicitDataSource(jtaResourceInfo);
                         jtaResourceInfo.id = nonJtaResourceInfo.id + "Jta";
+                        suffixAliases(jtaResourceInfo, "Jta");
 
                         Properties overrides = 
ConfigurationFactory.getSystemProperties(jtaResourceInfo.id, 
jtaResourceInfo.service);
                         jtaResourceInfo.properties.putAll(overrides);
@@ -1597,6 +1599,15 @@ public class AutoConfig implements Dynam
         }
     }
 
+    private static void suffixAliases(final ResourceInfo ri, final String 
suffix) {
+        final Collection<String> aliases = ri.aliases;
+        final List<String> newAliases = new ArrayList<String>();
+        for (String alias : aliases) {
+            newAliases.add(alias + suffix);
+        }
+        ri.aliases = newAliases;
+    }
+
     private static void configureImplicitDataSource(final ResourceInfo copy) {
         if (copy != null && copy.properties != null) {
             for (String key : copy.properties.stringPropertyNames()) {
@@ -1660,7 +1671,8 @@ public class AutoConfig implements Dynam
     }
 
     private ResourceInfo copy(ResourceInfo a) {
-        ResourceInfo b = new ResourceInfo();
+        final ResourceInfo b = new ResourceInfo();
+
         b.id = a.id;
         b.service = a.service;
         b.className = a.className;
@@ -1673,6 +1685,7 @@ public class AutoConfig implements Dynam
         b.types.addAll(a.types);
         b.properties = new SuperProperties();
         b.properties.putAll(a.properties);
+        //b.aliases.addAll(a.aliases);
 
         return b;
     }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java?rev=1422917&r1=1422916&r2=1422917&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
 Mon Dec 17 13:02:04 2012
@@ -654,6 +654,14 @@ public class ConfigurationFactory implem
                 service.setClassName(map.remove("class-name"));
                 service.setConstructor(map.remove("constructor"));
                 service.setFactoryName(map.remove("factory-name"));
+
+                if (object instanceof Resource) {
+                    final String aliases = map.remove("aliases");
+                    if (aliases != null) {
+                        ((Resource) 
object).getAliases().addAll(Arrays.asList(aliases.split(",")));
+                    }
+                }
+
                 service.getProperties().putAll(map);
             } else if (object instanceof Deployments) {
                 final Deployments deployments = (Deployments) object;
@@ -1031,6 +1039,7 @@ public class ConfigurationFactory implem
             info.constructorArgs.addAll(parseConstructorArgs(provider));
             if (info instanceof ResourceInfo && service instanceof Resource) {
                 ((ResourceInfo) info).jndiName = ((Resource) 
service).getJndi();
+                ((ResourceInfo) info).aliases.addAll(((Resource) 
service).getAliases());
             }
 
             specialProcessing(info);
@@ -1254,6 +1263,7 @@ public class ConfigurationFactory implem
             for (final ResourceInfo resourceInfo : 
runningConfig.facilities.resources) {
                 if (isResourceType(resourceInfo.service, resourceInfo.types, 
type) && implies(required, resourceInfo.properties)) {
                     resourceIds.add(resourceInfo.id);
+                    resourceIds.addAll(resourceInfo.aliases);
                 }
             }
         }
@@ -1262,6 +1272,7 @@ public class ConfigurationFactory implem
             for (final ResourceInfo resourceInfo : sys.facilities.resources) {
                 if (isResourceType(resourceInfo.service, resourceInfo.types, 
type) && implies(required, resourceInfo.properties)) {
                     resourceIds.add(resourceInfo.id);
+                    resourceIds.addAll(resourceInfo.aliases);
                 }
             }
 
@@ -1275,6 +1286,7 @@ public class ConfigurationFactory implem
                     }
                     if (isResourceType("Resource", types, type) && 
implies(required, resource.getProperties())) {
                         resourceIds.add(resource.getId());
+                        resourceIds.addAll(resource.getAliases());
                     }
                 }
             }
@@ -1289,6 +1301,11 @@ public class ConfigurationFactory implem
                 if (id.equals(resourceInfo.id)) {
                     return resourceInfo;
                 }
+                for (String alias : resourceInfo.aliases) {
+                    if (alias.equals(id)) {
+                        return resourceInfo;
+                    }
+                }
             }
         }
 
@@ -1297,6 +1314,11 @@ public class ConfigurationFactory implem
                 if (id.equals(resourceInfo.id)) {
                     return resourceInfo;
                 }
+                for (String alias : resourceInfo.aliases) {
+                    if (alias.equals(id)) {
+                        return resourceInfo;
+                    }
+                }
             }
         }
         return null;

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/JaxbOpenejb.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/JaxbOpenejb.java?rev=1422917&r1=1422916&r2=1422917&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/JaxbOpenejb.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/JaxbOpenejb.java
 Mon Dec 17 13:02:04 2012
@@ -245,7 +245,7 @@ public abstract class JaxbOpenejb {
             } else {
                 in = IO.read(new File(configFile));
             }
-            return SaxOpenejb.parse(new InputSource(in));
+            return readConfig(new InputSource(in));
         } catch (MalformedURLException e) {
             throw new OpenEJBException("Unable to resolve location " + 
configFile, e);
         } catch (Exception e) {
@@ -255,6 +255,10 @@ public abstract class JaxbOpenejb {
         }
     }
 
+    public static Openejb readConfig(final InputSource in) throws IOException, 
SAXException, ParserConfigurationException {
+        return SaxOpenejb.parse(in);
+    }
+
     public static void writeConfig(String configFile, Openejb openejb) throws 
OpenEJBException {
         OutputStream out = null;
         try {

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Resource.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Resource.java?rev=1422917&r1=1422916&r2=1422917&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Resource.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Resource.java
 Mon Dec 17 13:02:04 2012
@@ -19,8 +19,11 @@ package org.apache.openejb.config.sys;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
+import java.util.ArrayList;
+import java.util.List;
 
 
 /**
@@ -48,6 +51,9 @@ public class Resource extends AbstractSe
     @XmlAttribute
     protected String jndi;
 
+    @XmlElement(name = "aliases")
+    protected List<String> aliases = new ArrayList<String>();
+
     public Resource(String id) {
         super(id);
     }
@@ -83,6 +89,9 @@ public class Resource extends AbstractSe
         this.jndi = value;
     }
 
+    public List<String> getAliases() {
+        return aliases;
+    }
 
     @Override
     public boolean equals(Object o) {

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/SaxOpenejb.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/SaxOpenejb.java?rev=1422917&r1=1422916&r2=1422917&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/SaxOpenejb.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/SaxOpenejb.java
 Mon Dec 17 13:02:04 2012
@@ -32,6 +32,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -129,7 +130,7 @@ class SaxOpenejb extends StackHandler {
 
         @Override
         protected List<String> getAttributes() {
-            final List<String> attributes = super.getAttributes();
+            final List<String> attributes = new 
ArrayList<String>(super.getAttributes());
             attributes.add("ctype");
             return attributes;
         }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/StackHandler.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/StackHandler.java?rev=1422917&r1=1422916&r2=1422917&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/StackHandler.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/StackHandler.java
 Mon Dec 17 13:02:04 2012
@@ -42,7 +42,7 @@ public class StackHandler extends Defaul
     }
 
     protected void checkAttributes(Attributes attributes, String... allowed) 
throws SAXException {
-        checkAttributes(attributes, new ArrayList(Arrays.asList(allowed)));
+        checkAttributes(attributes, Arrays.asList(allowed));
     }
 
     protected void checkAttributes(Attributes attributes, List<String> 
allowed) throws SAXException {
@@ -174,6 +174,11 @@ public class StackHandler extends Defaul
         public void startElement(String uri, String localName, String qName, 
Attributes attributes) throws SAXException {
             super.startElement(uri, localName, qName, attributes);
             service.setJndi(attributes.getValue("jndi"));
+
+            final String aliases = attributes.getValue("aliases");
+            if (aliases != null) {
+                service.getAliases().addAll(Arrays.asList(aliases.split(",")));
+            }
         }
 
         @Override
@@ -186,6 +191,7 @@ public class StackHandler extends Defaul
         protected List<String> getAttributes() {
             final List<String> attributes = super.getAttributes();
             attributes.add("jndi");
+            attributes.add("aliases");
             return attributes;
         }
     }

Modified: 
openejb/trunk/openejb/container/openejb-core/src/main/resources/org/apache/openejb/assembler/classic/Messages.properties
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/resources/org/apache/openejb/assembler/classic/Messages.properties?rev=1422917&r1=1422916&r2=1422917&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/main/resources/org/apache/openejb/assembler/classic/Messages.properties
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/main/resources/org/apache/openejb/assembler/classic/Messages.properties
 Mon Dec 17 13:02:04 2012
@@ -79,6 +79,7 @@ createApplication.failed = Creating appl
 # createExternalContext(JndiContextInfo)
 # info("createService", contextInfo.service, contextInfo.id, 
contextInfo.className);
 createService = Creating {0}(id={1})
+createServiceWithAliases = Creating {0}(id={1}, aliases={2})
 
 createService.props = {0}={1}
 

Modified: 
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/persistence/DataSourceInitialSizeAdjustingTest.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/persistence/DataSourceInitialSizeAdjustingTest.java?rev=1422917&r1=1422916&r2=1422917&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/persistence/DataSourceInitialSizeAdjustingTest.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/persistence/DataSourceInitialSizeAdjustingTest.java
 Mon Dec 17 13:02:04 2012
@@ -17,7 +17,6 @@
 
 package org.apache.openejb.persistence;
 
-import org.apache.openejb.assembler.classic.Assembler;
 import org.apache.openejb.assembler.classic.OpenEjbConfiguration;
 import org.apache.openejb.assembler.classic.ResourceInfo;
 import org.apache.openejb.jee.jpa.unit.Persistence;
@@ -29,8 +28,6 @@ import org.apache.openejb.loader.SystemI
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-import javax.annotation.Resource;
-import javax.sql.DataSource;
 import java.util.Properties;
 
 import static org.junit.Assert.assertEquals;

Added: 
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/resource/AliasesFromXmlTest.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/resource/AliasesFromXmlTest.java?rev=1422917&view=auto
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/resource/AliasesFromXmlTest.java
 (added)
+++ 
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/resource/AliasesFromXmlTest.java
 Mon Dec 17 13:02:04 2012
@@ -0,0 +1,48 @@
+/*
+ * 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.openejb.resource;
+
+import org.apache.openejb.config.sys.JaxbOpenejb;
+import org.apache.openejb.config.sys.Openejb;
+import org.apache.openejb.config.sys.Resource;
+import org.junit.Test;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+
+import static org.junit.Assert.assertEquals;
+
+public class AliasesFromXmlTest {
+    @Test
+    public void ensureAliasesAreParsed() throws IOException, SAXException, 
ParserConfigurationException {
+        final String xml = "<?xml version=\"1.0\"?>" +
+                "<openejb>" +
+                "   <Resource id=\"foo\" aliases=\"bar\" type=\"DataSource\" 
/>" +
+                "</openejb>";
+
+        final Openejb openejb = JaxbOpenejb.readConfig(new InputSource(new 
ByteArrayInputStream(xml.getBytes())));
+        assertEquals(1, openejb.getResource().size());
+
+        final Resource resource = openejb.getResource().iterator().next();
+        assertEquals(1, resource.getAliases().size());
+        assertEquals("foo", resource.getId());
+        assertEquals("bar", resource.getAliases().iterator().next());
+    }
+}

Added: 
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/resource/AliasesTest.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/resource/AliasesTest.java?rev=1422917&view=auto
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/resource/AliasesTest.java
 (added)
+++ 
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/resource/AliasesTest.java
 Mon Dec 17 13:02:04 2012
@@ -0,0 +1,123 @@
+/*
+ * 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.openejb.resource;
+
+import org.apache.openejb.assembler.classic.ReloadableEntityManagerFactory;
+import org.apache.openejb.jee.EnterpriseBean;
+import org.apache.openejb.jee.SingletonBean;
+import org.apache.openejb.jee.jpa.unit.Persistence;
+import org.apache.openejb.jee.jpa.unit.PersistenceUnit;
+import org.apache.openejb.junit.ApplicationComposer;
+import org.apache.openejb.junit.Configuration;
+import org.apache.openejb.junit.Module;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.annotation.Resource;
+import javax.ejb.EJB;
+import javax.persistence.EntityManagerFactory;
+import javax.sql.DataSource;
+import java.util.Properties;
+
+import static org.junit.Assert.assertTrue;
+
+@RunWith(ApplicationComposer.class)
+public class AliasesTest {
+    @EJB
+    private BeanWithAliasesInjections bean;
+
+    @Test
+    public void validAliases() {
+        assertTrue(bean.isDs0Ds2());
+        assertTrue(bean.isDs0Short());
+        assertTrue(bean.isDs0NotDs1());
+        assertTrue(bean.checkEm0());
+        assertTrue(bean.checkEm1());
+    }
+
+    @Module
+    public EnterpriseBean bean() {
+        return new SingletonBean(BeanWithAliasesInjections.class).localBean();
+    }
+
+    @Module
+    public Persistence persistence0() throws Exception {
+        final PersistenceUnit unit = new PersistenceUnit("AliasesTest-unit-0");
+        unit.setJtaDataSource("aliased-2");
+        return new Persistence(unit);
+    }
+
+    @Module
+    public Persistence persistence1() throws Exception {
+        final PersistenceUnit unit = new PersistenceUnit("AliasesTest-unit-1");
+        unit.setJtaDataSource("aliased-1");
+        return new Persistence(unit);
+    }
+
+    @Configuration
+    public Properties config() {
+        final Properties p = new Properties();
+
+        p.put("aliased-0", 
"new://Resource?type=DataSource&aliases=aliased-2,short");
+        p.put("aliased-0.JdbcUrl", "jdbc:hsqldb:mem:aliased0");
+
+        p.put("aliased-1", "new://Resource?type=DataSource");
+        p.put("aliased-1.JdbcUrl", "jdbc:hsqldb:mem:aliased1");
+
+        return p;
+    }
+
+    public static class BeanWithAliasesInjections {
+        @Resource(name = "aliased-0")
+        private DataSource ds0;
+
+        @Resource(name = "aliased-1")
+        private DataSource ds1;
+
+        @Resource(name = "aliased-2")
+        private DataSource ds2;
+
+        @Resource(name = "short")
+        private DataSource shortNameDs;
+
+        @javax.persistence.PersistenceUnit(unitName = "AliasesTest-unit-0")
+        private EntityManagerFactory emf0;
+
+        @javax.persistence.PersistenceUnit(unitName = "AliasesTest-unit-1")
+        private EntityManagerFactory emf1;
+
+        public boolean isDs0Ds2() {
+            return ds0 == ds2;
+        }
+
+        public boolean isDs0Short() {
+            return ds0 == shortNameDs;
+        }
+
+        public boolean isDs0NotDs1() {
+            return ds0 != ds1;
+        }
+
+        public boolean checkEm0() {
+            return ds0 == 
ReloadableEntityManagerFactory.class.cast(emf0).info().getJtaDataSource();
+        }
+
+        public boolean checkEm1() {
+            return ds1 == 
ReloadableEntityManagerFactory.class.cast(emf1).info().getJtaDataSource();
+        }
+    }
+}


Reply via email to