Return-Path: Delivered-To: apmail-geronimo-scm-archive@www.apache.org Received: (qmail 60291 invoked from network); 26 Mar 2009 09:26:47 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 26 Mar 2009 09:26:47 -0000 Received: (qmail 66892 invoked by uid 500); 26 Mar 2009 09:26:46 -0000 Delivered-To: apmail-geronimo-scm-archive@geronimo.apache.org Received: (qmail 66826 invoked by uid 500); 26 Mar 2009 09:26:46 -0000 Mailing-List: contact scm-help@geronimo.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: dev@geronimo.apache.org List-Id: Delivered-To: mailing list scm@geronimo.apache.org Received: (qmail 66817 invoked by uid 99); 26 Mar 2009 09:26:46 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 26 Mar 2009 09:26:46 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 26 Mar 2009 09:26:44 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 9833323888EB; Thu, 26 Mar 2009 09:26:22 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r758570 - in /geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src: main/java/org/apache/geronimo/naming/deployment/ main/xsd/ test/java/org/apache/geronimo/naming/deployment/ Date: Thu, 26 Mar 2009 09:26:14 -0000 To: scm@geronimo.apache.org From: djencks@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20090326092622.9833323888EB@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: djencks Date: Thu Mar 26 09:25:50 2009 New Revision: 758570 URL: http://svn.apache.org/viewvc?rev=758570&view=rev Log: GERONIMO-3954 allow overrides of env-entry values in geronimo plan Modified: geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/main/java/org/apache/geronimo/naming/deployment/EnvironmentEntryBuilder.java geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/main/xsd/geronimo-naming-1.2.xsd geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/test/java/org/apache/geronimo/naming/deployment/EnvironmentEntryBuilderTest.java Modified: geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/main/java/org/apache/geronimo/naming/deployment/EnvironmentEntryBuilder.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/main/java/org/apache/geronimo/naming/deployment/EnvironmentEntryBuilder.java?rev=758570&r1=758569&r2=758570&view=diff ============================================================================== --- geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/main/java/org/apache/geronimo/naming/deployment/EnvironmentEntryBuilder.java (original) +++ geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/main/java/org/apache/geronimo/naming/deployment/EnvironmentEntryBuilder.java Thu Mar 26 09:25:50 2009 @@ -22,8 +22,10 @@ import java.util.List; import java.util.Map; import java.util.HashMap; +import java.util.ArrayList; import javax.annotation.Resource; +import javax.xml.namespace.QName; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -36,6 +38,8 @@ import org.apache.geronimo.j2ee.deployment.annotation.ResourceAnnotationHelper; import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory; import org.apache.geronimo.naming.reference.KernelReference; +import org.apache.geronimo.xbeans.geronimo.naming.GerEnvEntryDocument; +import org.apache.geronimo.xbeans.geronimo.naming.GerEnvEntryType; import org.apache.geronimo.xbeans.javaee.DescriptionType; import org.apache.geronimo.xbeans.javaee.EnvEntryType; import org.apache.geronimo.xbeans.javaee.EnvEntryTypeValuesType; @@ -58,6 +62,8 @@ NAMESPACE_UPDATES.put("http://geronimo.apache.org/xml/ns/naming-1.1", "http://geronimo.apache.org/xml/ns/naming-1.2"); } + private static final QName GER_ENV_ENTRY_QNAME = GerEnvEntryDocument.type.getDocumentElementName(); + private static final QNameSet GER_ENV_ENTRY_QNAME_SET = QNameSet.singleton(GER_ENV_ENTRY_QNAME); private final QNameSet envEntryQNameSet; public EnvironmentEntryBuilder(String[] eeNamespaces) { @@ -91,10 +97,15 @@ } List envEntriesUntyped = convert(specDD.selectChildren(envEntryQNameSet), JEE_CONVERTER, EnvEntryType.class, EnvEntryType.type); + XmlObject[] gerEnvEntryUntyped = plan == null ? NO_REFS : plan.selectChildren(GER_ENV_ENTRY_QNAME_SET); + Map envEntryMap = mapEnvEntries(gerEnvEntryUntyped); for (EnvEntryType envEntry: envEntriesUntyped) { String name = getStringValue(envEntry.getEnvEntryName()); String type = getStringValue(envEntry.getEnvEntryType()); - String text = getStringValue(envEntry.getEnvEntryValue()); + String text = envEntryMap.remove(name); + if (text == null) { + text = getStringValue(envEntry.getEnvEntryValue()); + } try { Object value; if (text == null) { @@ -134,9 +145,22 @@ throw new DeploymentException("Invalid env-entry value for name: " + name, e); } } + if (!envEntryMap.isEmpty()) { + throw new DeploymentException("Unknown env-entry elements in geronimo plan: " + envEntryMap); + } } + private Map mapEnvEntries(XmlObject[] refs) { + Map envEntryMap = new HashMap(); + if (refs != null) { + for (XmlObject ref1 : refs) { + GerEnvEntryType ref = (GerEnvEntryType) ref1.copy().changeType(GerEnvEntryType.type); + envEntryMap.put(ref.getEnvEntryName().trim(), ref.getEnvEntryValue().trim()); + } + } + return envEntryMap; + } public QNameSet getSpecQNameSet() { return envEntryQNameSet; } Modified: geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/main/xsd/geronimo-naming-1.2.xsd URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/main/xsd/geronimo-naming-1.2.xsd?rev=758570&r1=758569&r2=758570&view=diff ============================================================================== --- geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/main/xsd/geronimo-naming-1.2.xsd (original) +++ geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/main/xsd/geronimo-naming-1.2.xsd Thu Mar 26 09:25:50 2009 @@ -49,6 +49,16 @@ + + + + The element env-entry is used to override env-entry + values supplied in the JavaEE deployment descriptor + or annotations. There must be an env-entry with the + same name in the deployment descriptor. + + + @@ -126,6 +136,17 @@ + + + + The element env-entry is used to override env-entry + values supplied in the JavaEE deployment descriptor + or annotations. There must be an env-entry with the + same name in the deployment descriptor. + + + @@ -207,6 +228,33 @@ + + + + + + The element env-entry-name is used to identify this env-entry. + This name should be unique in a module and + will be used by application as a part of JNDI name for + the environment entry. The JNDI name used will be + "java:/comp/env/env-entry-name. It must be identical to the + "env-entry-name" provided in the deployment descriptor. + + + + + + + The element env-entry-value supplies the value + for the environment entry to be used instead of + the value provided in the deployment descriptor + or annotation. + + + + + + Modified: geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/test/java/org/apache/geronimo/naming/deployment/EnvironmentEntryBuilderTest.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/test/java/org/apache/geronimo/naming/deployment/EnvironmentEntryBuilderTest.java?rev=758570&r1=758569&r2=758570&view=diff ============================================================================== --- geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/test/java/org/apache/geronimo/naming/deployment/EnvironmentEntryBuilderTest.java (original) +++ geronimo/server/trunk/plugins/j2ee/geronimo-naming-builder/src/test/java/org/apache/geronimo/naming/deployment/EnvironmentEntryBuilderTest.java Thu Mar 26 09:25:50 2009 @@ -96,6 +96,52 @@ "TRUE" + "" + ""; + private static final String TEST_PLAN = "" + + "" + + "string" + + "Goodbye World" + + "" + + + "" + + "char" + + "K" + + "" + + + "" + + "byte" + + "21" + + "" + + + "" + + "short" + + "4321" + + "" + + + "" + + "int" + + "87654321" + + "" + + + "" + + "long" + + "6543210987654321" + + "" + + + "" + + "float" + + "654.321" + + "" + + + "" + + "double" + + "9876.54321" + + "" + + + "" + + "boolean" + + "FALSE" + + "" + + ""; public void testEnvEntries() throws Exception { @@ -137,6 +183,54 @@ assertEquals(booleanVal, context.lookup("env/boolean")); } + public void testEnvEntriesOverride() throws Exception { + + String stringVal = "Goodbye World"; + Character charVal = new Character('K'); + Byte byteVal = new Byte((byte) 21); + Short shortVal = new Short((short) 4321); + Integer intVal = new Integer(87654321); + Long longVal = new Long(6543210987654321L); + Float floatVal = new Float(654.321); + Double doubleVal = new Double(9876.54321); + Boolean booleanVal = Boolean.FALSE; + + XmlObject doc = XmlObject.Factory.parse(TEST); + XmlCursor cursor = doc.newCursor(); + try { + cursor.toFirstChild(); + doc = cursor.getObject(); + } finally { + cursor.dispose(); + } + XmlObject plan = XmlObject.Factory.parse(TEST_PLAN); + cursor = plan.newCursor(); + try { + cursor.toFirstChild(); + plan = cursor.getObject(); + } finally { + cursor.dispose(); + } + environmentEntryBuilder.buildNaming(doc, plan, null, componentContext); + Context context = EnterpriseNamingContext.createEnterpriseNamingContext(NamingBuilder.JNDI_KEY.get(componentContext)); + Set actual = new HashSet(); + for (NamingEnumeration e = context.listBindings("env"); e.hasMore();) { + NameClassPair pair = (NameClassPair) e.next(); + actual.add(pair.getName()); + } + Set expected = new HashSet(Arrays.asList(new String[]{"string", "char", "byte", "short", "int", "long", "float", "double", "boolean"})); + assertEquals(expected, actual); + assertEquals(stringVal, context.lookup("env/string")); + assertEquals(charVal, context.lookup("env/char")); + assertEquals(byteVal, context.lookup("env/byte")); + assertEquals(shortVal, context.lookup("env/short")); + assertEquals(intVal, context.lookup("env/int")); + assertEquals(longVal, context.lookup("env/long")); + assertEquals(floatVal, context.lookup("env/float")); + assertEquals(doubleVal, context.lookup("env/double")); + assertEquals(booleanVal, context.lookup("env/boolean")); + } + public void xtestEmptyEnvironment() throws NamingException { Context context = EnterpriseNamingContext.createEnterpriseNamingContext(componentContext); try {