You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2008/03/20 04:29:58 UTC
svn commit: r639137 - in /openejb/branches/openejb-3.0: ./
assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/
container/openejb-core/
container/openejb-core/src/main/java/org/apache/openejb/core/mdb/ co...
Author: dblevins
Date: Wed Mar 19 20:29:54 2008
New Revision: 639137
URL: http://svn.apache.org/viewvc?rev=639137&view=rev
Log:
Merging r637548 - http://svn.apache.org/viewvc?rev=637548&view=rev
svn merge -r 637547:637548 https://svn.apache.org/repos/asf/openejb/trunk/openejb3 .
------------------------------------------------------------------------
r637548 | djencks | 2008-03-15 23:48:50 -0700 (Sat, 15 Mar 2008) | 1 line
OPENEJB-777 OPENEJB-702. Introduce NamedXAResource wrapping for DBCP datasources, and supply a TxRecovery parameter to turn this on and off for DBCP pools and for mdbs. Also introduce a factory bean to create the transaction manager together with XidFactory and HOWLLog so standalone openejb has transaction recovery possibilities. These are all turned off in embedded as the tests do not shut down the log sufficiently for it to be restarted in the same vm. The DBCP pool code is hacky but appears to work.
------------------------------------------------------------------------
Added:
openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/resource/GeronimoTransactionManagerFactory.java
- copied unchanged from r637548, openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/resource/GeronimoTransactionManagerFactory.java
openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/ManagedDataSourceWithRecovery.java
- copied unchanged from r637548, openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/ManagedDataSourceWithRecovery.java
Modified:
openejb/branches/openejb-3.0/assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml
openejb/branches/openejb-3.0/container/openejb-core/pom.xml
openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/EndpointFactory.java
openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java
openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/BasicManagedDataSource.java
openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/DataSourceFactory.java
openejb/branches/openejb-3.0/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.embedded/service-jar.xml
openejb/branches/openejb-3.0/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml
openejb/branches/openejb-3.0/pom.xml
Modified: openejb/branches/openejb-3.0/assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-3.0/assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml?rev=639137&r1=639136&r2=639137&view=diff
==============================================================================
--- openejb/branches/openejb-3.0/assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml (original)
+++ openejb/branches/openejb-3.0/assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml Wed Mar 19 20:29:54 2008
@@ -178,7 +178,7 @@
id="Default MDB Container"
service="Container"
types="MESSAGE"
- constructor="id, transactionManager, securityService, ResourceAdapter, MessageListenerInterface, ActivationSpecClass, InstanceLimit"
+ constructor="id, transactionManager, securityService, ResourceAdapter, MessageListenerInterface, ActivationSpecClass, InstanceLimit, TxRecovery"
class-name="org.apache.openejb.core.mdb.MdbContainer">
# The resource adapter delivers messages to the container
@@ -198,6 +198,11 @@
InstanceLimit 10
+ # Specifies whether to use NamedXAResource wrappers to allow the geronimo tm
+ # to log and recover in doubt transactions.
+ TxRecovery true
+
+
</ServiceProvider>
<!--
@@ -240,11 +245,28 @@
# Default Transaction Manager implementation
# ================================================
-->
- <ServiceProvider
- id="Default Transaction Manager"
- service="TransactionManager"
- types="TransactionManager"
- class-name="org.apache.geronimo.transaction.manager.GeronimoTransactionManager"/>
+ <ServiceProvider
+ id="Default Transaction Manager"
+ service="TransactionManager"
+ types="TransactionManager"
+ factory-name="create"
+ constructor="defaultTransactionTimeoutSeconds, tmId, bufferClassName, bufferSizeKb, checksumEnabled, adler32Checksum, flushSleepTimeMilliseconds, logFileDir, logFileExt, logFileName, maxBlocksPerFile, maxBuffers, maxLogFiles, minBuffers, threadsWaitingForceThreshold"
+ class-name="org.apache.openejb.resource.GeronimoTransactionManagerFactory">
+ defaultTransactionTimeoutSeconds 600
+ bufferSizeKb 32
+ checksumEnabled true
+ adler32Checksum true
+ flushSleepTimeMilliseconds 50
+ logFileDir txlog
+ logFileExt log
+ logFileName howl
+ maxBlocksPerFile -1
+ maxBuffers 0
+ # set to 0 or less to disable transaction logging and recovery
+ maxLogFiles 2
+ minBuffers 4
+ threadsWaitingForceThreshold -1
+ </ServiceProvider>
<!--
# ================================================
@@ -256,7 +278,7 @@
service="Resource"
types="javax.sql.DataSource, DataSource"
factory-name="create"
- constructor="JtaManaged"
+ constructor="JtaManaged,TxRecovery"
class-name="org.apache.openejb.resource.jdbc.DataSourceFactory">
# Determines wether or not this data source should be JTA managed
@@ -271,6 +293,10 @@
JtaManaged = true
+ # Specifies whether to use NamedXAResource wrappers to allow the geronimo tm
+ # to log and recover in doubt transactions.
+ TxRecovery true
+
# Driver class name
JdbcDriver org.hsqldb.jdbcDriver
@@ -450,10 +476,11 @@
service="Resource"
types="javax.sql.DataSource, DataSource"
factory-name="create"
- constructor="JtaManaged"
+ constructor="JtaManaged,TxRecovery"
class-name="org.apache.openejb.resource.jdbc.DataSourceFactory">
JtaManaged = false
+ TxRecovery = false
# Driver class name
@@ -648,7 +675,8 @@
BrokerXmlConfig broker:(tcp://localhost:61616)?useJmx=false
# Broker address
- ServerUrl vm://localhost?async=true
+ # ServerUrl vm://localhost?async=true
+ ServerUrl tcp://localhost:61616
# DataSource for persistence messages
DataSource Default Unmanaged JDBC Database
Modified: openejb/branches/openejb-3.0/container/openejb-core/pom.xml
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-3.0/container/openejb-core/pom.xml?rev=639137&r1=639136&r2=639137&view=diff
==============================================================================
--- openejb/branches/openejb-3.0/container/openejb-core/pom.xml (original)
+++ openejb/branches/openejb-3.0/container/openejb-core/pom.xml Wed Mar 19 20:29:54 2008
@@ -275,6 +275,10 @@
<groupId>org.apache.geronimo.components</groupId>
<artifactId>geronimo-transaction</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.objectweb.howl</groupId>
+ <artifactId>howl</artifactId>
+ </dependency>
<!-- JavaMail -->
<dependency>
<groupId>org.apache.geronimo.javamail</groupId>
Modified: openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/EndpointFactory.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/EndpointFactory.java?rev=639137&r1=639136&r2=639137&view=diff
==============================================================================
--- openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/EndpointFactory.java (original)
+++ openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/EndpointFactory.java Wed Mar 19 20:29:54 2008
@@ -37,14 +37,16 @@
private final MdbInstanceFactory instanceFactory;
private final ClassLoader classLoader;
private final Class[] interfaces;
+ private final boolean txRecovery;
- public EndpointFactory(ActivationSpec activationSpec, MdbContainer container, CoreDeploymentInfo deploymentInfo, MdbInstanceFactory instanceFactory) {
+ public EndpointFactory(ActivationSpec activationSpec, MdbContainer container, CoreDeploymentInfo deploymentInfo, MdbInstanceFactory instanceFactory, boolean txRecovery) {
this.activationSpec = activationSpec;
this.container = container;
this.deploymentInfo = deploymentInfo;
this.instanceFactory = instanceFactory;
classLoader = container.getMessageListenerInterface().getClassLoader();
interfaces = new Class[]{container.getMessageListenerInterface(), MessageEndpoint.class};
+ this.txRecovery = txRecovery;
}
public ActivationSpec getActivationSpec() {
@@ -56,8 +58,10 @@
}
public MessageEndpoint createEndpoint(XAResource xaResource) throws UnavailableException {
- NamedXAResource wrapper = new WrapperNamedXAResource(xaResource, container.getContainerID().toString());
- EndpointHandler endpointHandler = new EndpointHandler(container, deploymentInfo, instanceFactory, wrapper);
+ if (txRecovery) {
+ xaResource = new WrapperNamedXAResource(xaResource, container.getContainerID().toString());
+ }
+ EndpointHandler endpointHandler = new EndpointHandler(container, deploymentInfo, instanceFactory, xaResource);
MessageEndpoint messageEndpoint = (MessageEndpoint) Proxy.newProxyInstance(classLoader, interfaces, endpointHandler);
return messageEndpoint;
}
Modified: openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java?rev=639137&r1=639136&r2=639137&view=diff
==============================================================================
--- openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java (original)
+++ openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java Wed Mar 19 20:29:54 2008
@@ -67,10 +67,11 @@
private final Class messageListenerInterface;
private final Class activationSpecClass;
private final int instanceLimit;
+ private final boolean txRecovery;
private final ConcurrentMap<Object, CoreDeploymentInfo> deployments = new ConcurrentHashMap<Object, CoreDeploymentInfo>();
- public MdbContainer(Object containerID, TransactionManager transactionManager, SecurityService securityService, ResourceAdapter resourceAdapter, Class messageListenerInterface, Class activationSpecClass, int instanceLimit) {
+ public MdbContainer(Object containerID, TransactionManager transactionManager, SecurityService securityService, ResourceAdapter resourceAdapter, Class messageListenerInterface, Class activationSpecClass, int instanceLimit, boolean txRecovery) {
this.containerID = containerID;
this.transactionManager = transactionManager;
this.securityService = securityService;
@@ -78,6 +79,7 @@
this.messageListenerInterface = messageListenerInterface;
this.activationSpecClass = activationSpecClass;
this.instanceLimit = instanceLimit;
+ this.txRecovery = txRecovery;
}
public DeploymentInfo [] deployments() {
@@ -122,7 +124,7 @@
// create the message endpoint
MdbInstanceFactory instanceFactory = new MdbInstanceFactory(deploymentInfo, transactionManager, securityService, instanceLimit);
- EndpointFactory endpointFactory = new EndpointFactory(activationSpec, this, deploymentInfo, instanceFactory);
+ EndpointFactory endpointFactory = new EndpointFactory(activationSpec, this, deploymentInfo, instanceFactory, txRecovery);
// update the data structures
// this must be done before activating the endpoint since the ra may immedately begin delivering messages
Modified: openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/BasicManagedDataSource.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/BasicManagedDataSource.java?rev=639137&r1=639136&r2=639137&view=diff
==============================================================================
--- openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/BasicManagedDataSource.java (original)
+++ openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/BasicManagedDataSource.java Wed Mar 19 20:29:54 2008
@@ -17,13 +17,14 @@
*/
package org.apache.openejb.resource.jdbc;
-import org.apache.openejb.loader.SystemInstance;
-
-import javax.sql.DataSource;
import java.io.File;
import java.sql.SQLException;
import java.util.Properties;
+import javax.sql.DataSource;
+
+import org.apache.openejb.loader.SystemInstance;
+
public class BasicManagedDataSource extends org.apache.commons.dbcp.managed.BasicManagedDataSource {
public synchronized String getUserName() {
return super.getUsername();
@@ -54,7 +55,7 @@
int level = IsolationLevels.getIsolationLevel(s);
super.setDefaultTransactionIsolation(level);
}
-
+
protected synchronized DataSource createDataSource() throws SQLException {
if (dataSource != null) {
return dataSource;
@@ -68,7 +69,8 @@
helper.configure(this);
}
- // creat the data source
+ wrapTransactionManager();
+ // create the data source
if (helper == null || !helper.enableUserDirHack()) {
return super.createDataSource();
} else {
@@ -86,4 +88,8 @@
}
}
}
+
+ protected void wrapTransactionManager() {
+ }
+
}
Modified: openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/DataSourceFactory.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/DataSourceFactory.java?rev=639137&r1=639136&r2=639137&view=diff
==============================================================================
--- openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/DataSourceFactory.java (original)
+++ openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/DataSourceFactory.java Wed Mar 19 20:29:54 2008
@@ -22,9 +22,13 @@
* @version $Rev$ $Date$
*/
public class DataSourceFactory {
- public static DataSource create(boolean managed){
+ public static DataSource create(boolean managed, boolean txRecovery){
if (managed){
- return new BasicManagedDataSource();
+ if (txRecovery) {
+ return new ManagedDataSourceWithRecovery();
+ } else {
+ return new BasicManagedDataSource();
+ }
} else {
return new BasicDataSource();
}
Modified: openejb/branches/openejb-3.0/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.embedded/service-jar.xml
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-3.0/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.embedded/service-jar.xml?rev=639137&r1=639136&r2=639137&view=diff
==============================================================================
--- openejb/branches/openejb-3.0/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.embedded/service-jar.xml (original)
+++ openejb/branches/openejb-3.0/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.embedded/service-jar.xml Wed Mar 19 20:29:54 2008
@@ -176,7 +176,7 @@
id="Default MDB Container"
service="Container"
types="MESSAGE"
- constructor="id, transactionManager, securityService, ResourceAdapter, MessageListenerInterface, ActivationSpecClass, InstanceLimit"
+ constructor="id, transactionManager, securityService, ResourceAdapter, MessageListenerInterface, ActivationSpecClass, InstanceLimit, TxRecovery"
class-name="org.apache.openejb.core.mdb.MdbContainer">
# The resource adapter delivers messages to the container
@@ -196,6 +196,10 @@
InstanceLimit 10
+ # Specifies whether to use NamedXAResource wrappers to allow the geronimo tm
+ # to log and recover in doubt transactions.
+ TxRecovery false
+
</ServiceProvider>
<!--
@@ -235,7 +239,24 @@
id="Default Transaction Manager"
service="TransactionManager"
types="TransactionManager"
- class-name="org.apache.geronimo.transaction.manager.GeronimoTransactionManager"/>
+ factory-name="create"
+ constructor="defaultTransactionTimeoutSeconds, tmId, bufferClassName, bufferSizeKb, checksumEnabled, adler32Checksum, flushSleepTimeMilliseconds, logFileDir, logFileExt, logFileName, maxBlocksPerFile, maxBuffers, maxLogFiles, minBuffers, threadsWaitingForceThreshold"
+ class-name="org.apache.openejb.resource.GeronimoTransactionManagerFactory">
+ defaultTransactionTimeoutSeconds 600
+ bufferSizeKb 32
+ checksumEnabled true
+ adler32Checksum true
+ flushSleepTimeMilliseconds 50
+ logFileDir txlog
+ logFileExt log
+ logFileName howl
+ maxBlocksPerFile -1
+ maxBuffers 0
+ # set to 0 or less to disable transaction logging and recovery
+ maxLogFiles 0
+ minBuffers 4
+ threadsWaitingForceThreshold -1
+ </ServiceProvider>
<!--
# ================================================
@@ -247,7 +268,7 @@
service="Resource"
types="javax.sql.DataSource, DataSource"
factory-name="create"
- constructor="JtaManaged"
+ constructor="JtaManaged, TxRecovery"
class-name="org.apache.openejb.resource.jdbc.DataSourceFactory">
# Determines wether or not this data source should be JTA managed
@@ -262,6 +283,10 @@
JtaManaged = true
+ # Specifies whether to use NamedXAResource wrappers to allow the geronimo tm
+ # to log and recover in doubt transactions.
+ TxRecovery false
+
# Driver class name
JdbcDriver org.hsqldb.jdbcDriver
@@ -441,10 +466,11 @@
service="Resource"
types="javax.sql.DataSource, DataSource"
factory-name="create"
- constructor="JtaManaged"
+ constructor="JtaManaged, TxRecovery"
class-name="org.apache.openejb.resource.jdbc.DataSourceFactory">
JtaManaged = false
+ TxRecovery = false
# Driver class name
@@ -638,9 +664,9 @@
# Broker configuration
BrokerXmlConfig broker:(tcp://localhost:61616)?useJmx=false
- # Broker address
- # ServerUrl vm://localhost?async=true
- ServerUrl tcp://localhost:61616
+ # Broker address (vm transport may not work with TxRecovery on)
+ ServerUrl vm://localhost?async=true
+ # ServerUrl tcp://localhost:61616
# DataSource for persistence messages
Modified: openejb/branches/openejb-3.0/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-3.0/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml?rev=639137&r1=639136&r2=639137&view=diff
==============================================================================
--- openejb/branches/openejb-3.0/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml (original)
+++ openejb/branches/openejb-3.0/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml Wed Mar 19 20:29:54 2008
@@ -181,7 +181,7 @@
id="Default MDB Container"
service="Container"
types="MESSAGE"
- constructor="id, transactionManager, securityService, ResourceAdapter, MessageListenerInterface, ActivationSpecClass, InstanceLimit"
+ constructor="id, transactionManager, securityService, ResourceAdapter, MessageListenerInterface, ActivationSpecClass, InstanceLimit, TxRecovery"
class-name="org.apache.openejb.core.mdb.MdbContainer">
# The resource adapter delivers messages to the container
@@ -201,6 +201,10 @@
InstanceLimit 10
+ # Specifies whether to use NamedXAResource wrappers to allow the geronimo tm
+ # to log and recover in doubt transactions.
+ TxRecovery true
+
</ServiceProvider>
<!--
@@ -236,11 +240,28 @@
# Default Transaction Manager implementation
# ================================================
-->
- <ServiceProvider
- id="Default Transaction Manager"
- service="TransactionManager"
- types="TransactionManager"
- class-name="org.apache.geronimo.transaction.manager.GeronimoTransactionManager"/>
+ <ServiceProvider
+ id="Default Transaction Manager"
+ service="TransactionManager"
+ types="TransactionManager"
+ factory-name="create"
+ constructor="defaultTransactionTimeoutSeconds, tmId, bufferClassName, bufferSizeKb, checksumEnabled, adler32Checksum, flushSleepTimeMilliseconds, logFileDir, logFileExt, logFileName, maxBlocksPerFile, maxBuffers, maxLogFiles, minBuffers, threadsWaitingForceThreshold"
+ class-name="org.apache.openejb.resource.GeronimoTransactionManagerFactory">
+ defaultTransactionTimeoutSeconds 600
+ bufferSizeKb 32
+ checksumEnabled true
+ adler32Checksum true
+ flushSleepTimeMilliseconds 50
+ logFileDir txlog
+ logFileExt log
+ logFileName howl
+ maxBlocksPerFile -1
+ maxBuffers 0
+ # set to 0 or less to disable transaction logging and recovery
+ maxLogFiles 2
+ minBuffers 4
+ threadsWaitingForceThreshold -1
+ </ServiceProvider>
<!--
# ================================================
@@ -252,7 +273,7 @@
service="Resource"
types="javax.sql.DataSource, DataSource"
factory-name="create"
- constructor="JtaManaged"
+ constructor="JtaManaged,TxRecovery"
class-name="org.apache.openejb.resource.jdbc.DataSourceFactory">
# Determines wether or not this data source should be JTA managed
@@ -267,6 +288,10 @@
JtaManaged = true
+ # Specifies whether to use NamedXAResource wrappers to allow the geronimo tm
+ # to log and recover in doubt transactions.
+ TxRecovery true
+
# Driver class name
JdbcDriver org.hsqldb.jdbcDriver
@@ -446,10 +471,12 @@
service="Resource"
types="javax.sql.DataSource, DataSource"
factory-name="create"
- constructor="JtaManaged"
+ constructor="JtaManaged,TxRecovery"
class-name="org.apache.openejb.resource.jdbc.DataSourceFactory">
JtaManaged = false
+ TxRecovery true
+
# Driver class name
Modified: openejb/branches/openejb-3.0/pom.xml
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-3.0/pom.xml?rev=639137&r1=639136&r2=639137&view=diff
==============================================================================
--- openejb/branches/openejb-3.0/pom.xml (original)
+++ openejb/branches/openejb-3.0/pom.xml Wed Mar 19 20:29:54 2008
@@ -643,6 +643,11 @@
</exclusions>
</dependency>
<dependency>
+ <groupId>org.objectweb.howl</groupId>
+ <artifactId>howl</artifactId>
+ <version>1.0.1-1</version>
+ </dependency>
+ <dependency>
<groupId>org.apache.geronimo.javamail</groupId>
<artifactId>geronimo-javamail_1.4_mail</artifactId>
<version>1.2</version>