Author: rmannibucau
Date: Wed Nov 14 11:11:16 2012
New Revision: 1409157

URL: http://svn.apache.org/viewvc?rev=1409157&view=rev
Log:
OPENEJB-1933 setting 5 by default to initial size when copying a datasource to 
add non-jta or jta datasource to a persistence unit

Added:
    
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/persistence/DataSourceInitialSizeAdjustingTest.java
      - copied, changed from r1409127, 
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/persistence/ReloadableEntityManagerFactoryTest.java
Modified:
    
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java

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=1409157&r1=1409156&r2=1409157&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
 Wed Nov 14 11:11:16 2012
@@ -107,6 +107,8 @@ public class AutoConfig implements Dynam
 
     public static Logger logger = 
Logger.getInstance(LogCategory.OPENEJB_STARTUP_CONFIG, AutoConfig.class);
 
+    private static final int MAX_IMPLICIT_POOL_SIZE = 5;
+
     private static Set<String> ignoredReferenceTypes = new TreeSet<String>();
     public static final String AUTOCREATE_JTA_DATASOURCE_FROM_NON_JTA_ONE_KEY 
= "openejb.autocreate.jta-datasource-from-non-jta-one";
 
@@ -1359,7 +1361,7 @@ public class AutoConfig implements Dynam
             required.put("JtaManaged", ANY);
             String possibleJta = 
findResourceId(replaceJavaAndSlash(unit.getJtaDataSource()), "DataSource", 
required, null);
             String possibleNonJta = 
findResourceId(replaceJavaAndSlash(unit.getNonJtaDataSource()), "DataSource", 
required, null);
-            if (possibleJta != null && possibleJta == possibleNonJta){
+            if (possibleJta != null && possibleJta.equals(possibleNonJta)) {
                 ResourceInfo dataSource = 
configFactory.getResourceInfo(possibleJta);
 
                 String jtaManaged = (String) 
dataSource.properties.get("JtaManaged");
@@ -1527,6 +1529,7 @@ public class AutoConfig implements Dynam
 
                     if (nonJtaDataSourceId == null) {
                         ResourceInfo nonJtaResourceInfo = 
copy(jtaResourceInfo);
+                        configureImplicitDataSource(nonJtaResourceInfo);
                         nonJtaResourceInfo.id = jtaResourceInfo.id + "NonJta";
                         nonJtaResourceInfo.originAppName = 
jtaResourceInfo.originAppName;
 
@@ -1582,6 +1585,7 @@ public class AutoConfig implements Dynam
 
                     if (jtaDataSourceId == null) {
                         ResourceInfo jtaResourceInfo = 
copy(nonJtaResourceInfo);
+                        configureImplicitDataSource(jtaResourceInfo);
                         jtaResourceInfo.id = nonJtaResourceInfo.id + "Jta";
 
                         Properties overrides = 
ConfigurationFactory.getSystemProperties(jtaResourceInfo.id, 
jtaResourceInfo.service);
@@ -1622,6 +1626,26 @@ public class AutoConfig implements Dynam
         }
     }
 
+    private static void configureImplicitDataSource(final ResourceInfo copy) {
+        if (copy != null && copy.properties != null) {
+            for (String key : copy.properties.stringPropertyNames()) {
+                if ("InitialSize".equalsIgnoreCase(key)) {
+                    try {
+                        final int value = 
Integer.parseInt(copy.properties.getProperty("InitialSize"));
+                        if (MAX_IMPLICIT_POOL_SIZE < value) {
+                            copy.properties.setProperty(key, 
Integer.toString(MAX_IMPLICIT_POOL_SIZE));
+                            logger.warning("Adjusting " + key + " to " + 
MAX_IMPLICIT_POOL_SIZE + " for " + copy.id
+                                                + " DataSource to avoid too 
much network bandwidth usage."
+                                                + " If you want to keep it 
please define the DataSource explicitely.");
+                        }
+                    } catch (NumberFormatException nfe) {
+                        // no-op
+                    }
+                }
+            }
+        }
+    }
+
     private String replaceJavaAndSlash(final String name) {
         if (name == null) {
             return null;

Copied: 
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/persistence/DataSourceInitialSizeAdjustingTest.java
 (from r1409127, 
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/persistence/ReloadableEntityManagerFactoryTest.java)
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/persistence/DataSourceInitialSizeAdjustingTest.java?p2=openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/persistence/DataSourceInitialSizeAdjustingTest.java&p1=openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/persistence/ReloadableEntityManagerFactoryTest.java&r1=1409127&r2=1409157&rev=1409157&view=diff
==============================================================================
--- 
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/persistence/ReloadableEntityManagerFactoryTest.java
 (original)
+++ 
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/persistence/DataSourceInitialSizeAdjustingTest.java
 Wed Nov 14 11:11:16 2012
@@ -17,84 +17,55 @@
 
 package org.apache.openejb.persistence;
 
-import org.apache.openejb.assembler.classic.ReloadableEntityManagerFactory;
+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;
 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.apache.openejb.loader.SystemInstance;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-import javax.persistence.Entity;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
+import javax.annotation.Resource;
+import javax.sql.DataSource;
 import java.util.Properties;
 
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertNotSame;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
 
 @RunWith(ApplicationComposer.class)
-public class ReloadableEntityManagerFactoryTest {
-    @javax.persistence.PersistenceUnit
-    private EntityManagerFactory emf;
-
+public class DataSourceInitialSizeAdjustingTest {
     @Module
     public Persistence persistence() throws Exception {
-        PersistenceUnit unit = new PersistenceUnit("foo-unit");
-        unit.addClass(MyEntity.class);
-        unit.setProperty("openjpa.jdbc.SynchronizeMappings", 
"buildSchema(ForeignKeys=true)");
-        unit.getProperties().setProperty("openjpa.RuntimeUnenhancedClasses", 
"supported");
-        unit.getProperties().setProperty("openjpa.DatCache", "false");
-        unit.setExcludeUnlistedClasses(true);
-
-        Persistence persistence = new 
org.apache.openejb.jee.jpa.unit.Persistence(unit);
-        persistence.setVersion("2.0");
-        return persistence;
+        final PersistenceUnit unit = new PersistenceUnit("foo-unit");
+        unit.setJtaDataSource("DataSourceInitialSizeAdjustingTest");
+        return new Persistence(unit);
     }
 
     @Configuration
     public Properties config() {
+        final String prefix = getClass().getSimpleName();
         final Properties p = new Properties();
-        p.put("ReloadableEntityManagerFactoryTest", 
"new://Resource?type=DataSource");
-        p.put("ReloadableEntityManagerFactoryTest.JdbcDriver", 
"org.hsqldb.jdbcDriver");
-        p.put("ReloadableEntityManagerFactoryTest.JdbcUrl", 
"jdbc:hsqldb:mem:bval");
+        p.setProperty(prefix, "new://Resource?type=DataSource");
+        p.setProperty(prefix + ".JdbcDriver", "org.hsqldb.jdbcDriver");
+        p.setProperty(prefix + ".JdbcUrl", "jdbc:hsqldb:mem:bval");
+        p.setProperty(prefix + ".InitialSize", "15");
+        p.setProperty(prefix + ".JtaManaged", "true");
         return p;
     }
 
-    @Test public void reload() {
-        final ReloadableEntityManagerFactory remft = 
(ReloadableEntityManagerFactory) emf;
-        final EntityManagerFactory originalEmf = remft.getDelegate();
-        assertEquals("false", emf.getProperties().get("openjpa.DataCache"));
-        select();
-
-        remft.setProperty("openjpa.DataCache", "true(Types=" + 
MyEntity.class.getName() + ")");
-        remft.reload();
-        select();
-        assertEquals("true(Types=" + MyEntity.class.getName() + ")", 
emf.getProperties().get("openjpa.DataCache"));
-
-        final EntityManagerFactory reloadedEmf = remft.getDelegate();
-        assertNotSame(originalEmf, reloadedEmf);
-    }
-
-    private void select() {
-        emf.createEntityManager()
-            .createQuery("select m from 
ReloadableEntityManagerFactoryTest$MyEntity m")
-            .getResultList();
-    }
-
-    @Entity
-    public static class MyEntity {
-        @Id @GeneratedValue
-        private long id;
-
-        public long getId() {
-            return id;
-        }
-
-        public void setId(long id) {
-            this.id = id;
+    @Test
+    public void checkNonJtaPoolSizeWasCorrected() {
+        final String prefix = getClass().getSimpleName();
+        for (ResourceInfo info : 
SystemInstance.get().getComponent(OpenEjbConfiguration.class).facilities.resources)
 {
+            if ((prefix + "NonJta").equals(info.id)) {
+                assertEquals("5", info.properties.getProperty("InitialSize"));
+                return;
+            }
         }
+        fail("DataSource not found");
     }
 }


Reply via email to