You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by am...@apache.org on 2008/12/10 09:59:42 UTC

svn commit: r725032 - in /webservices/axis2/trunk/java/modules/kernel: ./ src/org/apache/axis2/ src/org/apache/axis2/deployment/ src/org/apache/axis2/engine/ src/org/apache/axis2/transaction/

Author: amilas
Date: Wed Dec 10 00:59:41 2008
New Revision: 725032

URL: http://svn.apache.org/viewvc?rev=725032&view=rev
Log:
applied the patch for AXIS2-4138

Added:
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transaction/
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transaction/TransactionConfiguration.java
Modified:
    webservices/axis2/trunk/java/modules/kernel/pom.xml
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/AxisConfigBuilder.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentConstants.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java

Modified: webservices/axis2/trunk/java/modules/kernel/pom.xml
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/pom.xml?rev=725032&r1=725031&r2=725032&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/pom.xml (original)
+++ webservices/axis2/trunk/java/modules/kernel/pom.xml Wed Dec 10 00:59:41 2008
@@ -49,6 +49,10 @@
             <groupId>org.apache.geronimo.specs</groupId>
             <artifactId>geronimo-ws-metadata_2.0_spec</artifactId>
         </dependency>
+	  <dependency>
+            <groupId>org.apache.geronimo.specs</groupId>
+            <artifactId>geronimo-jta_1.1_spec</artifactId>
+        </dependency>
         <dependency>
             <groupId>javax.servlet</groupId>
             <artifactId>servlet-api</artifactId>

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java?rev=725032&r1=725031&r2=725032&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/Constants.java Wed Dec 10 00:59:41 2008
@@ -298,6 +298,14 @@
     public static final String JMS_COORELATION_ID = "JMS_COORELATION_ID";
 
     public static final String MODULE_VERSION ="version";
+
+    /**
+     * Following constant are used for JTA transaction supporyt in Axis2
+     */
+    public static final String USER_TRANSACTION = "UserTransaction";
+    public static final String TRANSACTION_MANAGER = "TransactionManager";
+    public static final String SUSPENDED_TRANSACTION = "SuspendedTransaction";
+
     
     public static interface Configuration {
         public static final String ENABLE_REST = "enableREST";
@@ -420,5 +428,7 @@
 
         public static final String GENERATE_ABSOLUTE_LOCATION_URIS = "generateAbsoluteLocationURIs";
 
+
+
     }
 }

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/AxisConfigBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/AxisConfigBuilder.java?rev=725032&r1=725031&r2=725032&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/AxisConfigBuilder.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/AxisConfigBuilder.java Wed Dec 10 00:59:41 2008
@@ -26,6 +26,7 @@
 import org.apache.axiom.soap.RolePlayer;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.Constants;
+import org.apache.axis2.transaction.TransactionConfiguration;
 import org.apache.axis2.builder.ApplicationXMLBuilder;
 import org.apache.axis2.builder.Builder;
 import org.apache.axis2.builder.MIMEBuilder;
@@ -35,11 +36,7 @@
 import org.apache.axis2.dataretrieval.DRConstants;
 import org.apache.axis2.deployment.util.PhasesInfo;
 import org.apache.axis2.deployment.util.Utils;
-import org.apache.axis2.description.HandlerDescription;
-import org.apache.axis2.description.ModuleConfiguration;
-import org.apache.axis2.description.ParameterInclude;
-import org.apache.axis2.description.TransportInDescription;
-import org.apache.axis2.description.TransportOutDescription;
+import org.apache.axis2.description.*;
 import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.axis2.engine.AxisObserver;
 import org.apache.axis2.engine.MessageReceiver;
@@ -186,6 +183,24 @@
                 clusterBuilder.buildCluster(clusterElement);
             }
 
+            //Add jta transaction  configuration
+            OMElement transactionElement = config_element
+                    .getFirstChildWithName(new QName(TAG_TRANSACTION));
+            if (transactionElement != null) {
+                ParameterInclude transactionParameters = new ParameterIncludeImpl();
+                Iterator parameters = transactionElement.getChildrenWithName(new QName(TAG_PARAMETER));
+                processParameters(parameters, transactionParameters, null);
+                TransactionConfiguration txcfg = new TransactionConfiguration(transactionParameters);
+
+                OMAttribute timeoutAttribute = transactionElement.getAttribute(new QName(TAG_TIMEOUT));
+                if(timeoutAttribute != null) {
+                    txcfg.setTransactionTimeout(Integer.parseInt(timeoutAttribute.getAttributeValue()));
+                }
+
+                axisConfig.setTransactionConfig(txcfg);
+            }
+
+                    
             /*
             * Add Axis2 default builders if they are not overidden by the config
             */

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentConstants.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentConstants.java?rev=725032&r1=725031&r2=725032&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentConstants.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentConstants.java Wed Dec 10 00:59:41 2008
@@ -71,6 +71,8 @@
     String TAG_MEP = "mep";
     String TAG_DEFAULT_MODULE_VERSION = "defaultModuleVersions";
     String TAG_CLUSTER = "cluster";
+    String TAG_TRANSACTION = "transaction";
+    String TAG_TIMEOUT = "timeout";
     String TAG_MESSAGE_BUILDERS =
             "messageBuilders"; //used to add pluggable support for diffrent wire formats
     String TAG_MESSAGE_BUILDER = "messageBuilder";

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java?rev=725032&r1=725031&r2=725032&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/engine/AxisConfiguration.java Wed Dec 10 00:59:41 2008
@@ -34,6 +34,7 @@
 import javax.xml.namespace.QName;
 
 import org.apache.axis2.AxisFault;
+import org.apache.axis2.transaction.TransactionConfiguration;
 import org.apache.axis2.builder.Builder;
 import org.apache.axis2.builder.unknowncontent.UnknownContentBuilder;
 import org.apache.axis2.clustering.ClusterManager;
@@ -148,6 +149,8 @@
 
     private AxisConfigurator configurator;
 
+    private TransactionConfiguration transactionConfiguration;
+
     /**
      * Constructor AxisConfiguration.
      */
@@ -1023,6 +1026,14 @@
         this.clusterManager = clusterManager;
     }
 
+     public TransactionConfiguration getTransactionConfiguration() {
+        return transactionConfiguration;
+    }
+
+    public void setTransactionConfig(TransactionConfiguration transactionConfiguration) {
+        this.transactionConfiguration = transactionConfiguration;
+    }
+
     public Object getKey() {
         return toString();
     }

Added: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transaction/TransactionConfiguration.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transaction/TransactionConfiguration.java?rev=725032&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transaction/TransactionConfiguration.java (added)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transaction/TransactionConfiguration.java Wed Dec 10 00:59:41 2008
@@ -0,0 +1,120 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.axis2.transaction;
+
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.deployment.AxisConfigBuilder;
+import org.apache.axis2.deployment.DeploymentException;
+import org.apache.axis2.description.ParameterInclude;
+import org.apache.axis2.description.Parameter;
+import org.apache.axis2.description.ParameterIncludeImpl;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.axiom.om.OMElement;
+
+import javax.transaction.TransactionManager;
+import javax.transaction.UserTransaction;
+import javax.naming.InitialContext;
+import javax.naming.Context;
+import javax.naming.NamingException;
+import javax.xml.namespace.QName;
+import java.util.Hashtable;
+import java.util.Iterator;
+
+public class TransactionConfiguration {
+
+    private static final Log log = LogFactory.getLog(TransactionConfiguration.class);
+
+    public static final int DEFAULT_TX_TIME_OUT = 300000 ; //30s
+    public static final String TX_MANAGER_JNDI_NAME = "TransactionManagerJNDIName";
+
+    private int transactionTimeout = DEFAULT_TX_TIME_OUT;
+    private ThreadLocal threadTransactionManager = null;
+    private Hashtable<String, String> jndiProperties = new Hashtable<String, String>();
+    private String transactionManagerJNDIName = null;
+
+
+
+    public TransactionConfiguration(ParameterInclude transactionParameters) throws DeploymentException {
+       Iterator it = transactionParameters.getParameters().iterator();
+        while (it.hasNext()) {
+            Parameter parameter = (Parameter) it.next();
+            jndiProperties.put(parameter.getName(), (String) parameter.getValue());
+        }         
+     
+        transactionManagerJNDIName = (String) transactionParameters.getParameter(TX_MANAGER_JNDI_NAME).getValue();
+
+        if(transactionManagerJNDIName == null){
+             throw new DeploymentException("Required transaction parameter " + TX_MANAGER_JNDI_NAME + " missing");
+        }
+
+        threadTransactionManager = new ThreadLocal();     
+    }
+
+    public int getTransactionTimeout(){
+        return transactionTimeout;
+    }
+
+    public void setTransactionTimeout(int transactionTimeout){
+        this.transactionTimeout = transactionTimeout;
+    }
+
+    public synchronized TransactionManager getTransactionManager() throws AxisFault {
+        TransactionManager transactionManager = (TransactionManager) threadTransactionManager.get();
+        if (transactionManager == null) {
+            transactionManager = lookupTransactionManager();
+            threadTransactionManager.set(transactionManager);
+            if (log.isDebugEnabled()) log.debug("JNDI lookup TransactionManager");
+        } else {
+            if (log.isDebugEnabled()) log.debug("Re-use previously JNDI lookup TransactionManager");
+        }
+        try{
+            transactionManager.setTransactionTimeout(transactionTimeout);
+        } catch(Exception ignore) {}
+
+        return transactionManager;
+    }
+
+    private synchronized TransactionManager lookupTransactionManager() throws AxisFault {
+
+        try {
+
+            Context context = new InitialContext(jndiProperties);
+            Object transactionManager = context.lookup( transactionManagerJNDIName );
+            if (transactionManager != null && transactionManager instanceof TransactionManager) {
+                return (TransactionManager) transactionManager;
+            } else {
+                log.error("TransactionManager : " + transactionManagerJNDIName + " not found when looking up" +
+                        " using JNDI properties : " + context.getEnvironment());
+                throw new AxisFault("TransactionManager : " + transactionManagerJNDIName + " not found when looking up" +
+                        " using JNDI properties : " + context.getEnvironment());
+            }
+
+        } catch (NamingException e) {
+
+            log.error(new StringBuilder().append("Error looking up TransactionManager ")
+                    .append(" using JNDI properties : ").append(jndiProperties));
+            throw new AxisFault("TransactionManager not found when looking up" +
+                    " using JNDI properties : " + jndiProperties);
+        }
+    }
+
+
+}