Hi, just added the parameter "IgnoreDefaultValues" for datasources (at least that's explicit for datasources) to be allowed to skip our default values. The issue i had was our default values can't be null and for some DS we want null parameters (for user/password for instance).
any feedback? other experiences? - Romain ---------- Forwarded message ---------- From: <[email protected]> Date: 2012/6/7 Subject: svn commit: r1347695 - in /openejb/trunk/openejb: container/openejb-core/src/main/java/org/apache/openejb/config/ container/openejb-core/src/main/resources/META-INF/org.apache.openejb.embedded/ container/openejb-core/src/main/resources/META-INF/org.apa... To: [email protected] Author: rmannibucau Date: Thu Jun 7 16:00:01 2012 New Revision: 1347695 URL: http://svn.apache.org/viewvc?rev=1347695&view=rev Log: sometimes default values are just not what we want so allow to skip them Added: openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/IgnoreDefaultTest.java Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java openejb/trunk/openejb/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.embedded/service-jar.xml openejb/trunk/openejb/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml openejb/trunk/openejb/tomee/tomee-embedded/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml openejb/trunk/openejb/tomee/tomee-embedded/src/main/resources/META-INF/org.apache.tomee/service-jar.xml openejb/trunk/openejb/tomee/tomee-webapp/src/main/resources/META-INF/org.apache.tomee/service-jar.xml 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=1347695&r1=1347694&r2=1347695&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 Thu Jun 7 16:00:01 2012 @@ -114,6 +114,8 @@ public class ConfigurationFactory implem private static final Logger logger = Logger.getInstance(LogCategory.OPENEJB_STARTUP_CONFIG, ConfigurationFactory.class); private static final Messages messages = new Messages(ConfigurationFactory.class); + private static final String IGNORE_DEFAULT_VALUES_PROP = "IgnoreDefaultValues"; + private String configLocation; private OpenEjbConfiguration sys; private Openejb openejb; @@ -956,10 +958,17 @@ public class ConfigurationFactory implem } final Properties props = new SuperProperties(); - props.putAll(provider.getProperties()); + + // weird hack but sometimes we don't want default values when we want null for instance + if (service.getProperties() == null || "false".equals(service.getProperties().getProperty(IGNORE_DEFAULT_VALUES_PROP, "false"))) { + props.putAll(provider.getProperties()); + } + props.putAll(service.getProperties()); props.putAll(overrides); + props.remove(IGNORE_DEFAULT_VALUES_PROP); + if (providerType != null && !provider.getService().equals(providerType)) { throw new OpenEJBException(messages.format("configureService.wrongProviderType", service.getId(), providerType)); } Modified: openejb/trunk/openejb/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.embedded/service-jar.xml URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.embedded/service-jar.xml?rev=1347695&r1=1347694&r2=1347695&view=diff ============================================================================== --- openejb/trunk/openejb/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.embedded/service-jar.xml (original) +++ openejb/trunk/openejb/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.embedded/service-jar.xml Thu Jun 7 16:00:01 2012 @@ -714,6 +714,10 @@ # original logical connection wrapper. AccessToUnderlyingConnectionAllowed false + + # use only all set values in this config + # will need a lot of properties but allow to not set some values + IgnoreDefaultValues = false </ServiceProvider> <ServiceProvider Modified: openejb/trunk/openejb/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml?rev=1347695&r1=1347694&r2=1347695&view=diff ============================================================================== --- openejb/trunk/openejb/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml (original) +++ openejb/trunk/openejb/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml Thu Jun 7 16:00:01 2012 @@ -748,6 +748,10 @@ # original logical connection wrapper. AccessToUnderlyingConnectionAllowed false + + # use only all set values in this config + # will need a lot of properties but allow to not set some values + IgnoreDefaultValues = false </ServiceProvider> <ServiceProvider Added: openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/IgnoreDefaultTest.java URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/IgnoreDefaultTest.java?rev=1347695&view=auto ============================================================================== --- openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/IgnoreDefaultTest.java (added) +++ openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/IgnoreDefaultTest.java Thu Jun 7 16:00:01 2012 @@ -0,0 +1,49 @@ +package org.apache.openejb.resource.jdbc; + +import javax.naming.NamingException; +import javax.sql.DataSource; +import org.apache.openejb.OpenEJBException; +import org.apache.openejb.assembler.classic.Assembler; +import org.apache.openejb.assembler.classic.ResourceInfo; +import org.apache.openejb.config.ConfigurationFactory; +import org.apache.openejb.config.sys.Resource; +import org.hsqldb.jdbcDriver; +import org.junit.Test; + +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; + +public class IgnoreDefaultTest { + private static Assembler assembler = new Assembler(); + private static ConfigurationFactory configurationFactory = new ConfigurationFactory(); + + @Test + public void createNormalDs() throws OpenEJBException, NamingException { + final Resource resource = new Resource(IgnoreDefaultTest.class.getName() + "#normal"); + resource.setType(DataSource.class.getName()); + final ResourceInfo info = configurationFactory.configureService(resource, ResourceInfo.class); + assembler.createResource(info); + + check(resource.getId(), "sa", ""); + } + + @Test + public void createWithoutDefaultDs() throws OpenEJBException, NamingException { + final Resource resource = new Resource(IgnoreDefaultTest.class.getName() + "#without-default"); + resource.setType(DataSource.class.getName()); + resource.getProperties().setProperty("IgnoreDefaultValues", "true"); + resource.getProperties().setProperty("JdbcDriver", jdbcDriver.class.getName()); + final ResourceInfo info = configurationFactory.configureService(resource, ResourceInfo.class); + assembler.createResource(info); + + check(resource.getId(), null, null); + } + + private void check(String id, String user, String password) throws NamingException { + final DataSource ds = (DataSource) assembler.getContainerSystem().getJNDIContext().lookup("openejb/Resource/" + id); + assertThat(ds, instanceOf(org.apache.commons.dbcp.BasicDataSource.class)); + assertEquals(user, ((org.apache.commons.dbcp.BasicDataSource) ds).getUsername()); + assertEquals(password, ((org.apache.commons.dbcp.BasicDataSource) ds).getPassword()); + } +} Modified: openejb/trunk/openejb/tomee/tomee-embedded/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-embedded/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml?rev=1347695&r1=1347694&r2=1347695&view=diff ============================================================================== --- openejb/trunk/openejb/tomee/tomee-embedded/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml (original) +++ openejb/trunk/openejb/tomee/tomee-embedded/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml Thu Jun 7 16:00:01 2012 @@ -721,6 +721,10 @@ # original logical connection wrapper. AccessToUnderlyingConnectionAllowed false + + # use only all set values in this config + # will need a lot of properties but allow to not set some values + IgnoreDefaultValues = false </ServiceProvider> <ServiceProvider Modified: openejb/trunk/openejb/tomee/tomee-embedded/src/main/resources/META-INF/org.apache.tomee/service-jar.xml URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-embedded/src/main/resources/META-INF/org.apache.tomee/service-jar.xml?rev=1347695&r1=1347694&r2=1347695&view=diff ============================================================================== --- openejb/trunk/openejb/tomee/tomee-embedded/src/main/resources/META-INF/org.apache.tomee/service-jar.xml (original) +++ openejb/trunk/openejb/tomee/tomee-embedded/src/main/resources/META-INF/org.apache.tomee/service-jar.xml Thu Jun 7 16:00:01 2012 @@ -721,6 +721,10 @@ # original logical connection wrapper. AccessToUnderlyingConnectionAllowed false + + # use only all set values in this config + # will need a lot of properties but allow to not set some values + IgnoreDefaultValues = false </ServiceProvider> <ServiceProvider Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/resources/META-INF/org.apache.tomee/service-jar.xml URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/resources/META-INF/org.apache.tomee/service-jar.xml?rev=1347695&r1=1347694&r2=1347695&view=diff ============================================================================== --- openejb/trunk/openejb/tomee/tomee-webapp/src/main/resources/META-INF/org.apache.tomee/service-jar.xml (original) +++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/resources/META-INF/org.apache.tomee/service-jar.xml Thu Jun 7 16:00:01 2012 @@ -726,6 +726,10 @@ # original logical connection wrapper. AccessToUnderlyingConnectionAllowed false + + # use only all set values in this config + # will need a lot of properties but allow to not set some values + IgnoreDefaultValues = false </ServiceProvider> <ServiceProvider
