You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/11/14 12:11:17 UTC

svn commit: r1409157 - in /openejb/trunk/openejb/container/openejb-core/src: main/java/org/apache/openejb/config/AutoConfig.java test/java/org/apache/openejb/persistence/DataSourceInitialSizeAdjustingTest.java

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