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