It's just in term of display in the datasources list, it doesn't really use the datasources.

Regards
JB

On 02/13/2014 11:32 PM, David Jencks wrote:
when is this going to be useful rather than misleading?  There's no transaction 
manager support that i can see.

david jencks

On Feb 13, 2014, at 2:29 PM, [email protected] wrote:

Updated Branches:
  refs/heads/karaf-2.3.x 56239e9cb -> c56e9c5ce


[KARAF-2729] Add support of XA datasources


Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/c56e9c5c
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/c56e9c5c
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/c56e9c5c

Branch: refs/heads/karaf-2.3.x
Commit: c56e9c5cef621134b48e9d2981da71b82c432403
Parents: 56239e9
Author: Jean-Baptiste Onofré <[email protected]>
Authored: Thu Feb 13 23:15:37 2014 +0100
Committer: Jean-Baptiste Onofré <[email protected]>
Committed: Thu Feb 13 23:19:18 2014 +0100

----------------------------------------------------------------------
.../karaf/jdbc/internal/JdbcServiceImpl.java    | 45 +++++++++++++++-----
1 file changed, 35 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/karaf/blob/c56e9c5c/jdbc/core/src/main/java/org/apache/karaf/jdbc/internal/JdbcServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/jdbc/core/src/main/java/org/apache/karaf/jdbc/internal/JdbcServiceImpl.java 
b/jdbc/core/src/main/java/org/apache/karaf/jdbc/internal/JdbcServiceImpl.java
index 5cd41d5..8395067 100644
--- 
a/jdbc/core/src/main/java/org/apache/karaf/jdbc/internal/JdbcServiceImpl.java
+++ 
b/jdbc/core/src/main/java/org/apache/karaf/jdbc/internal/JdbcServiceImpl.java
@@ -22,6 +22,7 @@ import org.osgi.framework.Constants;
import org.osgi.framework.ServiceReference;

import javax.sql.DataSource;
+import javax.sql.XADataSource;
import java.io.*;
import java.sql.*;
import java.util.*;
@@ -152,7 +153,8 @@ public class JdbcServiceImpl implements JdbcService {

     public List<String> datasources() throws Exception {
         List<String> datasources = new ArrayList<String>();
-        ServiceReference[] references = 
bundleContext.getServiceReferences(DataSource.class.getName(), null);
+        ServiceReference[] references = bundleContext.getServiceReferences((String) null, "(|(" + 
Constants.OBJECTCLASS + "=" + DataSource.class.getName() + ")("
+                + Constants.OBJECTCLASS + "=" + XADataSource.class.getName() + 
"))");
         if (references != null) {
             for (ServiceReference reference : references) {
                 if (reference.getProperty("osgi.jndi.service.name") != null) {
@@ -189,8 +191,13 @@ public class JdbcServiceImpl implements JdbcService {
         Connection connection = null;
         Statement statement = null;
         try {
-            DataSource ds = (DataSource) bundleContext.getService(reference);
-            connection = ds.getConnection();
+            Object ds = bundleContext.getService(reference);
+            if (ds instanceof DataSource) {
+                connection = ((DataSource) ds).getConnection();
+            }
+            if (ds instanceof XADataSource) {
+                connection = ((XADataSource) 
ds).getXAConnection().getConnection();
+            }
             statement = connection.createStatement();
             ResultSet resultSet = statement.executeQuery(query);
             ResultSetMetaData metaData = resultSet.getMetaData();
@@ -222,8 +229,13 @@ public class JdbcServiceImpl implements JdbcService {
         Connection connection = null;
         Statement statement = null;
         try {
-            DataSource ds = (DataSource) bundleContext.getService(reference);
-            connection = ds.getConnection();
+            Object ds = bundleContext.getService(reference);
+            if (ds instanceof DataSource) {
+                connection = ((DataSource) ds).getConnection();
+            }
+            if (ds instanceof XADataSource) {
+                connection = ((XADataSource) 
ds).getXAConnection().getConnection();
+            }
             statement = connection.createStatement();
             statement.execute(command);
         } finally {
@@ -244,8 +256,13 @@ public class JdbcServiceImpl implements JdbcService {
         ServiceReference reference = this.lookupDataSource(datasource);
         Connection connection = null;
         try {
-            DataSource ds = (DataSource) bundleContext.getService(reference);
-            connection = ds.getConnection();
+            Object ds = bundleContext.getService(reference);
+            if (ds instanceof DataSource) {
+                connection = ((DataSource) ds).getConnection();
+            }
+            if (ds instanceof XADataSource) {
+                connection = ((XADataSource) 
ds).getXAConnection().getConnection();
+            }
             DatabaseMetaData dbMetaData = connection.getMetaData();
             ResultSet resultSet = dbMetaData.getTables(null, null, null, null);
             ResultSetMetaData metaData = resultSet.getMetaData();
@@ -274,8 +291,13 @@ public class JdbcServiceImpl implements JdbcService {
         ServiceReference reference = this.lookupDataSource(datasource);
         Connection connection = null;
         try {
-            DataSource ds = (DataSource) bundleContext.getService(reference);
-            connection = ds.getConnection();
+            Object ds = bundleContext.getService(reference);
+            if (ds instanceof DataSource) {
+                connection = ((DataSource) ds).getConnection();
+            }
+            if (ds instanceof XADataSource) {
+                connection = ((XADataSource) 
ds).getXAConnection().getConnection();
+            }
             DatabaseMetaData dbMetaData = connection.getMetaData();
             map.put("db.product", dbMetaData.getDatabaseProductName());
             map.put("db.version", dbMetaData.getDatabaseProductVersion());
@@ -295,7 +317,10 @@ public class JdbcServiceImpl implements JdbcService {
     }

     private ServiceReference lookupDataSource(String name) throws Exception {
-        ServiceReference[] references = bundleContext.getServiceReferences(DataSource.class.getName(), 
"(|(osgi.jndi.service.name=" + name + ")(datasource=" + name + ")(name=" + name + 
")(service.id=" + name + "))");
+        ServiceReference[] references = 
bundleContext.getServiceReferences((String) null,
+                "(&(|(" + Constants.OBJECTCLASS + "=" + DataSource.class.getName() + 
")"
+                        + "(" + Constants.OBJECTCLASS + "=" + 
XADataSource.class.getName() + "))"
+                        + "(|(osgi.jndi.service.name=" + name + ")(datasource=" + name + ")(name=" 
+ name + ")(service.id=" + name + ")))");
         if (references == null || references.length == 0) {
             throw new IllegalArgumentException("No JDBC datasource found for " 
+ name);
         }



--
Jean-Baptiste Onofré
[email protected]
http://blog.nanthrax.net
Talend - http://www.talend.com

Reply via email to