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);
>         }
> 

Reply via email to