Author: rmannibucau
Date: Fri Jan 11 16:11:03 2013
New Revision: 1432125
URL: http://svn.apache.org/viewvc?rev=1432125&view=rev
Log:
TOMEE-726 eagerInit of managedconnection pool
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/GeronimoConnectionManagerFactory.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1432125&r1=1432124&r2=1432125&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
Fri Jan 11 16:11:03 2013
@@ -141,6 +141,8 @@ import javax.naming.InitialContext;
import javax.naming.NameAlreadyBoundException;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
+import javax.resource.cci.Connection;
+import javax.resource.cci.ConnectionFactory;
import javax.resource.spi.BootstrapContext;
import javax.resource.spi.ConnectionManager;
import javax.resource.spi.ManagedConnectionFactory;
@@ -1885,18 +1887,32 @@ public class Assembler extends Assembler
if (unsetB.containsKey(entry.getKey()))
unset.put(entry.getKey(), entry.getValue());
}
- logUnusedProperties(unset, serviceInfo);
- if (connectionManager instanceof AbstractConnectionManager) {
+ // service becomes a ConnectorReference which merges connection
manager and mcf
+ service = new ConnectorReference(connectionManager,
managedConnectionFactory);
+
+ // init cm if needed
+ final Object eagerInit = unset.remove("eagerInit");
+ if (eagerInit != null && eagerInit instanceof String &&
"true".equalsIgnoreCase((String) eagerInit)
+ && connectionManager instanceof
AbstractConnectionManager) {
try {
((AbstractConnectionManager) connectionManager).doStart();
+ try {
+ final Object cf =
managedConnectionFactory.createConnectionFactory(connectionManager);
+ if (cf instanceof ConnectionFactory) {
+ final Connection connection = ((ConnectionFactory)
cf).getConnection();
+ connection.getMetaData();
+ connection.close();
+ }
+ } catch (Exception e) {
+ // no-op: just to force eager init of pool
+ }
} catch (Exception e) {
logger.warning("Can't start connection manager", e);
}
}
- // service becomes a ConnectorReference which merges connection
manager and mcf
- service = new ConnectorReference(connectionManager,
managedConnectionFactory);
+ logUnusedProperties(unset, serviceInfo);
} else if (service instanceof DataSource) {
ClassLoader classLoader =
Thread.currentThread().getContextClassLoader();
if (classLoader == null) {
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/GeronimoConnectionManagerFactory.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/GeronimoConnectionManagerFactory.java?rev=1432125&r1=1432124&r2=1432125&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/GeronimoConnectionManagerFactory.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/resource/GeronimoConnectionManagerFactory.java
Fri Jan 11 16:11:03 2013
@@ -382,27 +382,39 @@ public class GeronimoConnectionManagerFa
final ConnectionInterceptor stack = interceptors.getStack();
ReadWriteLock foundLock = null;
- if (stack instanceof AbstractSinglePoolConnectionInterceptor) {
+ ConnectionInterceptor current = stack;
+ do {
+ if (current instanceof
AbstractSinglePoolConnectionInterceptor) {
+ try {
+ foundLock = (ReadWriteLock)
AbstractSinglePoolConnectionInterceptor.class.getField("resizeLock").get(current);
+ } catch (IllegalAccessException e) {
+ // no-op
+ } catch (NoSuchFieldException e) {
+ // no-op
+ }
+ break;
+ }
+
+ // look next
try {
- foundLock = (ReadWriteLock)
AbstractSinglePoolConnectionInterceptor.class.getField("resizeLock").get(stack);
- } catch (IllegalAccessException e) {
- // no-op
- } catch (NoSuchFieldException e) {
- // no-op
+ current = (ConnectionInterceptor) Reflections.get(current,
"next");
+ } catch (Exception e) {
+ current = null;
}
- }
+ } while (current != null);
+
this.lock = foundLock;
Object foundPool = null;
- if (stack instanceof AbstractSinglePoolConnectionInterceptor) {
+ if (current instanceof AbstractSinglePoolConnectionInterceptor) {
foundPool = Reflections.get(stack, "pool");
- } else if (stack instanceof MultiPoolConnectionInterceptor) {
+ } else if (current instanceof MultiPoolConnectionInterceptor) {
log.warn("validation on stack " + stack + " not supported");
}
this.pool = foundPool;
if (pool != null) {
- validatingTask = new ValidatingTask(stack, lock, pool);
+ validatingTask = new ValidatingTask(current, lock, pool);
} else {
validatingTask = null;
}