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