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