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();
+ }
+ }
+}