Author: rmannibucau
Date: Tue May 28 06:53:03 2013
New Revision: 1486777
URL: http://svn.apache.org/r1486777
Log:
OPENEJB-2027 datasource definition properties wringly parsed
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DefaultDataSourceCreator.java
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DataSourceDefinitionPlaceHolderTest.java
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DataSourceDefinitionTest.java
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1486777&r1=1486776&r2=1486777&view=diff
==============================================================================
---
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
(original)
+++
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
Tue May 28 06:53:03 2013
@@ -116,6 +116,7 @@ import org.apache.openejb.util.Propertie
import org.apache.openejb.util.PropertyPlaceHolderHelper;
import org.apache.openejb.util.References;
import org.apache.openejb.util.SafeToolkit;
+import org.apache.openejb.util.SuperProperties;
import org.apache.openejb.util.URLs;
import org.apache.openejb.util.proxy.ProxyFactory;
import org.apache.openejb.util.proxy.ProxyManager;
@@ -2046,19 +2047,17 @@ public class Assembler extends Assembler
if (serviceInfo.properties.containsKey("Definition")) {
try { // we catch classcast etc..., if it fails it is not important
final InputStream is = new
ByteArrayInputStream(serviceInfo.properties.getProperty("Definition").getBytes());
- final Properties p = new Properties();
+ final Properties p = new SuperProperties();
IO.readProperties(is, p);
for (final Map.Entry<Object, Object> entry : p.entrySet()) {
final String key = entry.getKey().toString();
if (!props.containsKey(key)
// never override from Definition, just use it to
complete the properties set
- &&
- !(key.equalsIgnoreCase("url") &&
- props.containsKey("JdbcUrl"))) { // with
@DataSource we can get both, see
org.apache.openejb.config.ConvertDataSourceDefinitions.rawDefinition()
+ && !(key.equalsIgnoreCase("url") &&
props.containsKey("JdbcUrl"))) { // with @DataSource we can get both, see
org.apache.openejb.config.ConvertDataSourceDefinitions.rawDefinition()
props.put(key, entry.getValue());
}
}
- } catch (Exception e) {
+ } catch (final Exception e) {
// ignored
}
}
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?rev=1486777&r1=1486776&r2=1486777&view=diff
==============================================================================
---
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
(original)
+++
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
Tue May 28 06:53:03 2013
@@ -118,6 +118,7 @@ import org.apache.openejb.util.Classes;
import org.apache.openejb.util.Join;
import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
+import org.apache.openejb.util.SuperProperties;
import org.apache.openejb.util.proxy.DynamicProxyImplFactory;
import org.apache.xbean.finder.Annotated;
import org.apache.xbean.finder.AnnotationFinder;
@@ -209,7 +210,9 @@ import javax.xml.ws.WebServiceRefs;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
+import java.io.ByteArrayInputStream;
import java.io.File;
+import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
@@ -4431,11 +4434,25 @@ public class AnnotationDeployer implemen
if (!d.url().isEmpty()) dataSource.setUrl(d.url());
if (!d.user().isEmpty()) dataSource.setUser(d.user());
- for (String s : d.properties()) {
- final String key = s.substring(0, s.indexOf('='));
- final String value = s.substring(s.indexOf('='));
-
- dataSource.property(key, value);
+ for (final String s : d.properties()) {
+ final int equal = s.indexOf('=');
+ if (equal < s.length() - 1) {
+ final SuperProperties props = new SuperProperties();
+ try {
+ props.load(new ByteArrayInputStream(s.getBytes()));
+ for (final String key : props.stringPropertyNames()) {
+ if (!key.isEmpty()) {
+ dataSource.property(key,
props.getProperty(key));
+ }
+ }
+ } catch (final IOException e) {
+ final String key = s.substring(0, equal).trim();
+ final String value = s.substring(equal + 1).trim();
+ dataSource.property(key, value);
+ }
+ } else {
+ dataSource.property(s.trim(), "");
+ }
}
consumer.getDataSource().add(dataSource);
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DefaultDataSourceCreator.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DefaultDataSourceCreator.java?rev=1486777&r1=1486776&r2=1486777&view=diff
==============================================================================
---
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DefaultDataSourceCreator.java
(original)
+++
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DefaultDataSourceCreator.java
Tue May 28 06:53:03 2013
@@ -37,13 +37,14 @@ public class DefaultDataSourceCreator ex
@Override
public DataSource poolManaged(final String name, final DataSource ds,
final Properties properties) {
- return new DbcpManagedDataSource(name, ds);
+ return build(DbcpManagedDataSource.class, new
DbcpManagedDataSource(name, ds), properties);
}
@Override
public DataSource poolManaged(final String name, final String driver,
final Properties properties) {
final BasicManagedDataSource ds = new BasicManagedDataSource(name);
ds.setDriverClassName(driver);
+ build(BasicManagedDataSource.class, ds, properties);
return ds;
}
@@ -51,18 +52,20 @@ public class DefaultDataSourceCreator ex
public DataSource poolManagedWithRecovery(final String name, final
XAResourceWrapper xaResourceWrapper, final String driver, final Properties
properties) {
final BasicManagedDataSource ds = new
ManagedDataSourceWithRecovery(name, xaResourceWrapper);
ds.setDriverClassName(driver);
+ build(BasicManagedDataSource.class, ds, properties);
return ds;
}
@Override
public DataSource pool(final String name, final DataSource ds, final
Properties properties) {
- return new DbcpDataSource(name, ds);
+ return build(DbcpDataSource.class, new DbcpDataSource(name, ds),
properties);
}
@Override
public DataSource pool(final String name, final String driver, final
Properties properties) {
final BasicDataSource ds = new BasicDataSource(name);
ds.setDriverClassName(driver);
+ build(BasicManagedDataSource.class, ds, properties);
return ds;
}
@@ -75,9 +78,4 @@ public class DefaultDataSourceCreator ex
protected void doDestroy(final DataSource dataSource) throws Throwable {
((org.apache.commons.dbcp.BasicDataSource) dataSource).close();
}
-
- @Override
- public ObjectRecipe clearRecipe(final Object object) {
- return null; // no recipe here
- }
}
Modified:
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DataSourceDefinitionPlaceHolderTest.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DataSourceDefinitionPlaceHolderTest.java?rev=1486777&r1=1486776&r2=1486777&view=diff
==============================================================================
---
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DataSourceDefinitionPlaceHolderTest.java
(original)
+++
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DataSourceDefinitionPlaceHolderTest.java
Tue May 28 06:53:03 2013
@@ -101,8 +101,7 @@ public class DataSourceDefinitionPlaceHo
@Test
public void checkLookup() throws Exception {
- final DataSource ds = (DataSource)
SystemInstance.get().getComponent(ContainerSystem.class)
- .getJNDIContext().lookup("java:comp/env/superDS");
+ final DataSource ds = (DataSource)
SystemInstance.get().getComponent(ContainerSystem.class).getJNDIContext().lookup("java:comp/env/superDS");
check(ds);
}
}
Modified:
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DataSourceDefinitionTest.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DataSourceDefinitionTest.java?rev=1486777&r1=1486776&r2=1486777&view=diff
==============================================================================
---
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DataSourceDefinitionTest.java
(original)
+++
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/DataSourceDefinitionTest.java
Tue May 28 06:53:03 2013
@@ -17,6 +17,8 @@
package org.apache.openejb.assembler.classic;
import org.apache.openejb.junit.ApplicationComposer;
+import org.apache.openejb.resource.jdbc.dbcp.DbcpManagedDataSource;
+import org.apache.openejb.resource.jdbc.managed.local.ManagedDataSource;
import org.apache.openejb.testing.Module;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -38,6 +40,7 @@ import java.util.List;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertTrue;
/**
* Note: to make this test work under JavaSE 6 you should add
geronimo-annotation_1.1_spec in your endorsed dir.
@@ -54,7 +57,7 @@ public class DataSourceDefinitionTest {
@Module
public Class<?>[] app() throws Exception {
- return new Class<?>[]{DatasourceDefinitionBean.class,
DatasourceDefinitionsBean.class};
+ return new Class<?>[]{ DatasourceDefinitionBean.class,
DatasourceDefinitionsBean.class };
}
@DataSourceDefinition(
@@ -62,7 +65,8 @@ public class DataSourceDefinitionTest {
className = "org.hsqldb.jdbc.JDBCDataSource",
user = "sa",
password = "",
- url = "jdbc:hsqldb:mem:superDS"
+ url = "jdbc:hsqldb:mem:superDS",
+ properties = { "poolPreparedStatements = true", "minIdle = 2",
"maxOpenPreparedStatements = 20" }
)
@Singleton
public static class DatasourceDefinitionBean {
@@ -72,6 +76,12 @@ public class DataSourceDefinitionTest {
public DataSource getDs() {
return ds;
}
+
+ public void validProperties() {
+ final DbcpManagedDataSource dbcp =
DbcpManagedDataSource.class.cast(ds);
+ assertEquals(2, dbcp.getMinIdle());
+ assertTrue(dbcp.isPoolPreparedStatements());
+ }
}
@DataSourceDefinitions({
@@ -88,6 +98,7 @@ public class DataSourceDefinitionTest {
user = "sa",
password = "",
url = "jdbc:hsqldb:mem:superDS"
+
)
})
@Stateless
@@ -109,6 +120,7 @@ public class DataSourceDefinitionTest {
@Test
public void assertDataSourceDefinition() throws Exception {
assertDataSourceDefinitionValues(uniqueDataSource.getDs(),
"org.hsqldb.jdbc.JDBCDataSource", "sa", "");
+ uniqueDataSource.validProperties();
}
@Test
@@ -165,20 +177,23 @@ public class DataSourceDefinitionTest {
public Movies(DataSource movieDatabase) throws SQLException {
this.movieDatabase = movieDatabase;
- Connection connection = movieDatabase.getConnection();
- PreparedStatement stmt = connection.prepareStatement("CREATE TABLE
movie ( director VARCHAR(255), title VARCHAR(255), year integer)");
+ final Connection connection = movieDatabase.getConnection();
+ final PreparedStatement stmt = connection.prepareStatement("CREATE
TABLE movie ( director VARCHAR(255), title VARCHAR(255), year integer)");
stmt.execute();
+ stmt.close();
+ connection.close();
}
public void addMovie(Movie movie) throws Exception {
Connection conn = movieDatabase.getConnection();
try {
- PreparedStatement sql = conn.prepareStatement("INSERT into
movie (director, title, year) values (?, ?, ?)");
+ final PreparedStatement sql = conn.prepareStatement("INSERT
into movie (director, title, year) values (?, ?, ?)");
sql.setString(1, movie.getDirector());
sql.setString(2, movie.getTitle());
sql.setInt(3, movie.getYear());
sql.execute();
+ sql.close();
} finally {
conn.close();
}
@@ -193,6 +208,7 @@ public class DataSourceDefinitionTest {
sql.setString(2, movie.getTitle());
sql.setInt(3, movie.getYear());
sql.execute();
+ sql.close();
} finally {
conn.close();
}