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


Reply via email to