You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by gn...@apache.org on 2012/07/31 19:09:35 UTC

svn commit: r1367679 - in /aries/trunk/transaction/transaction-jdbc: ./ src/main/java/org/apache/aries/transaction/jdbc/ src/main/java/org/apache/aries/transaction/jdbc/internal/ src/main/resources/OSGI-INF/ src/main/resources/OSGI-INF/blueprint/ src/m...

Author: gnodet
Date: Tue Jul 31 17:09:34 2012
New Revision: 1367679

URL: http://svn.apache.org/viewvc?rev=1367679&view=rev
Log:
[ARIES-890] Add support for recovery of JDBC XA transactions

Added:
    aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/RecoverableDataSource.java
    aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/
    aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/Activator.java
      - copied, changed from r1367678, aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/Activator.java
    aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/ConnectionKey.java
      - copied, changed from r1367678, aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/ConnectionKey.java
    aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/ConnectionWrapper.java
      - copied, changed from r1367678, aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/ConnectionWrapper.java
    aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/GenericResourceManager.java
    aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/NLS.java
      - copied, changed from r1367678, aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/NLS.java
    aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/XADatasourceEnlistingWrapper.java
      - copied, changed from r1367678, aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/XADatasourceEnlistingWrapper.java
    aries/trunk/transaction/transaction-jdbc/src/main/resources/OSGI-INF/
    aries/trunk/transaction/transaction-jdbc/src/main/resources/OSGI-INF/blueprint/
    aries/trunk/transaction/transaction-jdbc/src/main/resources/OSGI-INF/blueprint/transaction-jdbc.xml
    aries/trunk/transaction/transaction-jdbc/src/main/resources/org/apache/aries/transaction/jdbc/internal/
    aries/trunk/transaction/transaction-jdbc/src/main/resources/org/apache/aries/transaction/jdbc/internal/jdbcWrappers.properties
      - copied, changed from r1367678, aries/trunk/transaction/transaction-jdbc/src/main/resources/org/apache/aries/transaction/jdbc/jdbcWrappers.properties
Removed:
    aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/Activator.java
    aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/ConnectionKey.java
    aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/ConnectionWrapper.java
    aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/NLS.java
    aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/XADatasourceEnlistingWrapper.java
    aries/trunk/transaction/transaction-jdbc/src/main/resources/org/apache/aries/transaction/jdbc/jdbcWrappers.properties
Modified:
    aries/trunk/transaction/transaction-jdbc/pom.xml

Modified: aries/trunk/transaction/transaction-jdbc/pom.xml
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-jdbc/pom.xml?rev=1367679&r1=1367678&r2=1367679&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-jdbc/pom.xml (original)
+++ aries/trunk/transaction/transaction-jdbc/pom.xml Tue Jul 31 17:09:34 2012
@@ -39,13 +39,17 @@
 
   <properties>
     <aries.osgi.export.pkg>
-      !org.apache.aries.transaction.jdbc
+      org.apache.aries.transaction.jdbc;-noimport:=true
     </aries.osgi.export.pkg>
+    <aries.osgi.import>
+      org.osgi.service.blueprint;resolution:=optional,
+      *
+    </aries.osgi.import>
     <aries.osgi.private.pkg>
-      org.apache.aries.transaction.jdbc
+      org.apache.aries.transaction.jdbc.internal
     </aries.osgi.private.pkg>
     <aries.osgi.activator>
-      org.apache.aries.transaction.jdbc.Activator
+      org.apache.aries.transaction.jdbc.internal.Activator
     </aries.osgi.activator>
   </properties>
 
@@ -58,7 +62,7 @@
         <dependency>
             <groupId>org.apache.aries</groupId>
             <artifactId>org.apache.aries.util</artifactId>
-            <version>1.0.0</version>
+            <version>0.3</version>
         </dependency>
         <dependency>
             <groupId>org.osgi</groupId>
@@ -75,7 +79,19 @@
             <artifactId>slf4j-api</artifactId>
             <scope>provided</scope>
         </dependency>
-        <dependency>
+      <dependency>
+          <groupId>org.apache.aries.blueprint</groupId>
+          <artifactId>org.apache.aries.blueprint.core</artifactId>
+          <version>1.0.0</version>
+          <optional>true</optional>
+      </dependency>
+      <dependency>
+          <groupId>org.apache.xbean</groupId>
+          <artifactId>xbean-blueprint</artifactId>
+          <version>3.7</version>
+          <optional>true</optional>
+      </dependency>
+      <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-simple</artifactId>
             <scope>test</scope>
@@ -88,4 +104,24 @@
         </dependency>
   </dependencies>
 
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.xbean</groupId>
+                <artifactId>maven-xbean-plugin</artifactId>
+                <version>3.11</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>mapping</goal>
+                        </goals>
+                        <configuration>
+                            <namespace>http://aries.apache.org/xmlns/transaction-jdbc/1.0</namespace>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>

Added: aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/RecoverableDataSource.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/RecoverableDataSource.java?rev=1367679&view=auto
==============================================================================
--- aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/RecoverableDataSource.java (added)
+++ aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/RecoverableDataSource.java Tue Jul 31 17:09:34 2012
@@ -0,0 +1,57 @@
+/*
+ * 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.aries.transaction.jdbc;
+
+import org.apache.aries.transaction.jdbc.internal.GenericResourceManager;
+import org.apache.aries.transaction.jdbc.internal.XADatasourceEnlistingWrapper;
+
+/**
+ * Defines a JDBC DataSource that will auto-enlist into existing XA transactions.
+ * The DataSource will also be registered with the Aries/Geronimo transaction
+ * manager in order to provide proper transaction recovery at startup.
+ * Other considerations such as connection pooling and error handling are
+ * completely ignored.
+ *
+ * @org.apache.xbean.XBean
+ */
+public class RecoverableDataSource extends XADatasourceEnlistingWrapper {
+
+    private String name;
+
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * The unique name for this managed XAResource.  This name will be used
+     * by the transaction manager to recover transactions.
+     *
+     * @param name
+     */
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    /**
+     * @org.apache.xbean.InitMethod
+     */
+    public void start() {
+        new GenericResourceManager(getName(), getTransactionManager(), getDataSource()).recoverResource();
+    }
+}

Copied: aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/Activator.java (from r1367678, aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/Activator.java)
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/Activator.java?p2=aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/Activator.java&p1=aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/Activator.java&r1=1367678&r2=1367679&rev=1367679&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/Activator.java (original)
+++ aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/Activator.java Tue Jul 31 17:09:34 2012
@@ -16,9 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.aries.transaction.jdbc;
+package org.apache.aries.transaction.jdbc.internal;
+
+import java.util.Hashtable;
+import javax.sql.DataSource;
+import javax.sql.XADataSource;
+import javax.transaction.TransactionManager;
 
-import org.apache.aries.util.AriesFrameworkUtil;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
@@ -29,10 +33,6 @@ import org.osgi.framework.ServiceReferen
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.util.tracker.ServiceTracker;
 import org.osgi.util.tracker.ServiceTrackerCustomizer;
-import java.util.Hashtable;
-import javax.sql.DataSource;
-import javax.sql.XADataSource;
-import javax.transaction.TransactionManager;
 
 public class Activator implements BundleActivator, ServiceTrackerCustomizer, ServiceListener
 {
@@ -94,7 +94,7 @@ public class Activator implements Bundle
     map.put(Constants.SERVICE_RANKING, ranking);
 
     XADatasourceEnlistingWrapper wrapper = new XADatasourceEnlistingWrapper();
-    wrapper.setTxManager(tm);
+    wrapper.setTransactionManager(tm);
     wrapper.setDataSource((XADataSource) ctx.getService(ref));
 
     ServiceRegistration reg = ctx.registerService(DataSource.class.getName(), wrapper, map); 
@@ -117,7 +117,7 @@ public class Activator implements Bundle
 
   public void removedService(ServiceReference ref, Object service)
   {
-    AriesFrameworkUtil.safeUnregisterService((ServiceRegistration)service);
+    safeUnregisterService((ServiceRegistration)service);
   }
 
   public void serviceChanged(ServiceEvent event)
@@ -136,4 +136,15 @@ public class Activator implements Bundle
       tm = null;
     }
   }
+
+  static void safeUnregisterService(ServiceRegistration reg)
+  {
+    if(reg != null) {
+      try {
+        reg.unregister();
+      } catch (IllegalStateException e) {
+        //This can be safely ignored
+      }
+    }
+  }
 }

Copied: aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/ConnectionKey.java (from r1367678, aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/ConnectionKey.java)
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/ConnectionKey.java?p2=aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/ConnectionKey.java&p1=aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/ConnectionKey.java&r1=1367678&r2=1367679&rev=1367679&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/ConnectionKey.java (original)
+++ aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/ConnectionKey.java Tue Jul 31 17:09:34 2012
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.aries.transaction.jdbc;
+package org.apache.aries.transaction.jdbc.internal;
 
 import javax.transaction.Transaction;
 

Copied: aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/ConnectionWrapper.java (from r1367678, aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/ConnectionWrapper.java)
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/ConnectionWrapper.java?p2=aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/ConnectionWrapper.java&p1=aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/ConnectionWrapper.java&r1=1367678&r2=1367679&rev=1367679&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/ConnectionWrapper.java (original)
+++ aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/ConnectionWrapper.java Tue Jul 31 17:09:34 2012
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.aries.transaction.jdbc;
+package org.apache.aries.transaction.jdbc.internal;
 
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
@@ -37,10 +37,10 @@ import java.sql.Statement;
 import java.sql.Struct;
 import java.util.Map;
 import java.util.Properties;
-import org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement;
-
+import java.util.concurrent.Executor;
 import javax.transaction.xa.XAResource;
 
+import org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -373,7 +373,32 @@ public class ConnectionWrapper implement
     	
     }
 
-	private Method getMethod(String methodName, Class<?> ...paramTypes) {
+    public void setSchema(String schema) throws SQLException {
+        Method method= getMethod("setSchema", String.class);
+        invokeByReflection(method, schema);
+    }
+
+    public String getSchema() throws SQLException {
+        Method method= getMethod("getSchema");
+        return (String) invokeByReflection(method);
+    }
+
+    public void abort(Executor executor) throws SQLException {
+        Method method= getMethod("abort", Executor.class);
+        invokeByReflection(method, executor);
+    }
+
+    public void setNetworkTimeout(Executor executor, int milliseconds) throws SQLException {
+        Method method= getMethod("setNetworkTimeout", int.class);
+        invokeByReflection(method, executor, milliseconds);
+    }
+
+    public int getNetworkTimeout() throws SQLException {
+        Method method= getMethod("getNetworkTimeout");
+        return (Integer) invokeByReflection(method);
+    }
+
+    private Method getMethod(String methodName, Class<?> ...paramTypes) {
 		Method method = null;
 		try {
 			method = getClass().getMethod(methodName, paramTypes);

Added: aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/GenericResourceManager.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/GenericResourceManager.java?rev=1367679&view=auto
==============================================================================
--- aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/GenericResourceManager.java (added)
+++ aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/GenericResourceManager.java Tue Jul 31 17:09:34 2012
@@ -0,0 +1,152 @@
+/*
+ * 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.aries.transaction.jdbc.internal;
+
+import java.io.IOException;
+import javax.sql.XAConnection;
+import javax.sql.XADataSource;
+import javax.transaction.SystemException;
+import javax.transaction.TransactionManager;
+import javax.transaction.xa.XAResource;
+
+import org.apache.geronimo.transaction.manager.NamedXAResource;
+import org.apache.geronimo.transaction.manager.NamedXAResourceFactory;
+import org.apache.geronimo.transaction.manager.RecoverableTransactionManager;
+import org.apache.geronimo.transaction.manager.WrapperNamedXAResource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class GenericResourceManager {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(GenericResourceManager.class);
+
+    private String resourceName;
+
+    private TransactionManager transactionManager;
+
+    private XADataSource dataSource;
+
+    public GenericResourceManager() {
+    }
+
+    public GenericResourceManager(String resourceName, TransactionManager transactionManager, XADataSource dataSource) {
+        this.resourceName = resourceName;
+        this.transactionManager = transactionManager;
+        this.dataSource = dataSource;
+    }
+
+    public void recoverResource() {
+        try {
+            if (!Recovery.recover(this)) {
+                LOGGER.info("Resource manager is unrecoverable");
+            }
+        } catch (NoClassDefFoundError e) {
+            LOGGER.info("Resource manager is unrecoverable due to missing classes: " + e);
+        } catch (Throwable e) {
+            LOGGER.warn("Error while recovering resource manager", e);
+        }
+    }
+
+    public String getResourceName() {
+        return resourceName;
+    }
+
+    public void setResourceName(String resourceName) {
+        this.resourceName = resourceName;
+    }
+
+    public TransactionManager getTransactionManager() {
+        return transactionManager;
+    }
+
+    public void setTransactionManager(TransactionManager transactionManager) {
+        this.transactionManager = transactionManager;
+    }
+
+    public XADataSource getDataSource() {
+        return dataSource;
+    }
+
+    public void setDataSource(XADataSource dataSource) {
+        this.dataSource = dataSource;
+    }
+
+    /**
+     * This class will ensure the broker is properly recovered when wired with
+     * the Geronimo transaction manager.
+     */
+    public static class Recovery {
+
+        public static boolean isRecoverable(GenericResourceManager rm) {
+            return  rm.getTransactionManager() instanceof RecoverableTransactionManager &&
+                    rm.getResourceName() != null && !"".equals(rm.getResourceName());
+        }
+
+        public static boolean recover(final GenericResourceManager rm) throws IOException {
+            if (isRecoverable(rm)) {
+                final XADataSource dataSource = (XADataSource) rm.getDataSource();
+
+                RecoverableTransactionManager rtxManager = (RecoverableTransactionManager) rm.getTransactionManager();
+                rtxManager.registerNamedXAResourceFactory(new NamedXAResourceFactory() {
+
+                    public String getName() {
+                        return rm.getResourceName();
+                    }
+
+                    public NamedXAResource getNamedXAResource() throws SystemException {
+                        try {
+                            final XAConnection connection = (XAConnection) dataSource.getXAConnection();
+                            LOGGER.debug("new namedXAResource's connection: " + connection);
+
+                            return new ConnectionAndWrapperNamedXAResource(connection.getXAResource(), getName(), connection);
+                        } catch (Exception e) {
+                            SystemException se =  new SystemException("Failed to create ConnectionAndWrapperNamedXAResource, " + e.getLocalizedMessage());
+                            se.initCause(e);
+                            LOGGER.error(se.getLocalizedMessage(), se);
+                            throw se;
+                        }
+                    }
+
+                    public void returnNamedXAResource(NamedXAResource namedXaResource) {
+                        if (namedXaResource instanceof ConnectionAndWrapperNamedXAResource) {
+                            try {
+                                LOGGER.debug("closing returned namedXAResource's connection: " + ((ConnectionAndWrapperNamedXAResource)namedXaResource).connection);
+                                ((ConnectionAndWrapperNamedXAResource)namedXaResource).connection.close();
+                            } catch (Exception ignored) {
+                                LOGGER.debug("failed to close returned namedXAResource: " + namedXaResource, ignored);
+                            }
+                        }
+                    }
+                });
+                return true;
+            } else {
+                return false;
+            }
+        }
+    }
+
+    public static class ConnectionAndWrapperNamedXAResource extends WrapperNamedXAResource {
+
+        final XAConnection connection;
+
+        public ConnectionAndWrapperNamedXAResource(XAResource xaResource, String name, XAConnection connection) {
+            super(xaResource, name);
+            this.connection = connection;
+        }
+    }
+}

Copied: aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/NLS.java (from r1367678, aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/NLS.java)
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/NLS.java?p2=aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/NLS.java&p1=aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/NLS.java&r1=1367678&r2=1367679&rev=1367679&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/NLS.java (original)
+++ aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/NLS.java Tue Jul 31 17:09:34 2012
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.aries.transaction.jdbc;
+package org.apache.aries.transaction.jdbc.internal;
 
 import org.apache.aries.util.nls.MessageUtil;
 
 public class NLS
 {
-  public static final MessageUtil MESSAGES = MessageUtil.createMessageUtil(NLS.class, "org.apache.aries.transaction.jdbc.jdbcWrappers");
+  public static final MessageUtil MESSAGES = MessageUtil.createMessageUtil(NLS.class, "org.apache.aries.transaction.jdbc.internal.jdbcWrappers");
 }

Copied: aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/XADatasourceEnlistingWrapper.java (from r1367678, aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/XADatasourceEnlistingWrapper.java)
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/XADatasourceEnlistingWrapper.java?p2=aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/XADatasourceEnlistingWrapper.java&p1=aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/XADatasourceEnlistingWrapper.java&r1=1367678&r2=1367679&rev=1367679&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/XADatasourceEnlistingWrapper.java (original)
+++ aries/trunk/transaction/transaction-jdbc/src/main/java/org/apache/aries/transaction/jdbc/internal/XADatasourceEnlistingWrapper.java Tue Jul 31 17:09:34 2012
@@ -16,14 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.aries.transaction.jdbc;
+package org.apache.aries.transaction.jdbc.internal;
 
 import java.io.PrintWriter;
 import java.io.Serializable;
 import java.sql.Connection;
 import java.sql.SQLException;
+import java.sql.SQLFeatureNotSupportedException;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Logger;
 
 import javax.sql.DataSource;
 import javax.sql.XAConnection;
@@ -35,9 +37,11 @@ import javax.transaction.Transaction;
 import javax.transaction.TransactionManager;
 import javax.transaction.xa.XAResource;
 
+import org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement;
+
 /**
  * This class allows JDBC XA data sources to participate in global transactions,
- * via the {@link ConnectionWrapper} that is returned. The only service provided
+ * via the {@link org.apache.aries.transaction.jdbc.internal.ConnectionWrapper} that is returned. The only service provided
  * is enlistment/delistment of the associated {@link XAResource} in transactions.
  * Important consideration such as connection pooling and error handling are
  * completely ignored.
@@ -135,7 +139,7 @@ public class XADatasourceEnlistingWrappe
         }
         
     }
-    
+
     public PrintWriter getLogWriter() throws SQLException
     {
       return wrappedDS.getLogWriter();
@@ -146,11 +150,17 @@ public class XADatasourceEnlistingWrappe
       return wrappedDS.getLoginTimeout();
     }
 
+    /**
+     * @org.apache.xbean.Property hidden=true
+     */
     public void setLogWriter(PrintWriter out) throws SQLException
     {
       wrappedDS.setLogWriter(out);
     }
 
+    /**
+     * @org.apache.xbean.Property hidden=true
+     */
     public void setLoginTimeout(int seconds) throws SQLException
     {
       wrappedDS.setLoginTimeout(seconds);
@@ -161,13 +171,32 @@ public class XADatasourceEnlistingWrappe
         return new ConnectionWrapper(connection, enlisted);
     }
 
+    public XADataSource getDataSource()
+    {
+      return wrappedDS;
+    }
+
+    /**
+     * The XADataSource object to wrap.
+     *
+     * @org.apache.xbean.Property required=true
+     */
     public void setDataSource(XADataSource dsToWrap)
     {
       wrappedDS = dsToWrap;
     }
 
+    public TransactionManager getTransactionManager()
+    {
+      return tm;
+    }
 
-    public void setTxManager(TransactionManager txMgr)
+    /**
+     * The XA TransactionManager to use to enlist the JDBC connections into.
+     *
+     * @org.apache.xbean.Property required=true
+     */
+    public void setTransactionManager(TransactionManager txMgr)
     {
       tm = txMgr;
     }
@@ -200,4 +229,10 @@ public class XADatasourceEnlistingWrappe
     {
       return null;
     }
+
+    @IgnoreJRERequirement
+    public Logger getParentLogger() throws SQLFeatureNotSupportedException
+    {
+      throw new SQLFeatureNotSupportedException();
+    }
 }

Added: aries/trunk/transaction/transaction-jdbc/src/main/resources/OSGI-INF/blueprint/transaction-jdbc.xml
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-jdbc/src/main/resources/OSGI-INF/blueprint/transaction-jdbc.xml?rev=1367679&view=auto
==============================================================================
--- aries/trunk/transaction/transaction-jdbc/src/main/resources/OSGI-INF/blueprint/transaction-jdbc.xml (added)
+++ aries/trunk/transaction/transaction-jdbc/src/main/resources/OSGI-INF/blueprint/transaction-jdbc.xml Tue Jul 31 17:09:34 2012
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+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.
+-->
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
+
+    <service interface="org.apache.aries.blueprint.NamespaceHandler">
+        <service-properties>
+            <entry key="osgi.service.blueprint.namespace" value="http://aries.apache.org/xmlns/transaction-jdbc/1.0"/>
+        </service-properties>
+        <bean class="org.apache.xbean.blueprint.context.impl.XBeanNamespaceHandler">
+            <argument value="http://aries.apache.org/xmlns/transaction-jdbc/1.0"/>
+            <argument value="org.apache.aries.transaction.jdbc.xsd"/>
+            <argument ref="blueprintBundle"/>
+            <argument value="META-INF/services/org/apache/xbean/spring/http/aries.apache.org/xmlns/transaction-jdbc/1.0"/>
+        </bean>
+    </service>
+
+</blueprint>

Copied: aries/trunk/transaction/transaction-jdbc/src/main/resources/org/apache/aries/transaction/jdbc/internal/jdbcWrappers.properties (from r1367678, aries/trunk/transaction/transaction-jdbc/src/main/resources/org/apache/aries/transaction/jdbc/jdbcWrappers.properties)
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-jdbc/src/main/resources/org/apache/aries/transaction/jdbc/internal/jdbcWrappers.properties?p2=aries/trunk/transaction/transaction-jdbc/src/main/resources/org/apache/aries/transaction/jdbc/internal/jdbcWrappers.properties&p1=aries/trunk/transaction/transaction-jdbc/src/main/resources/org/apache/aries/transaction/jdbc/jdbcWrappers.properties&r1=1367678&r2=1367679&rev=1367679&view=diff
==============================================================================
    (empty)