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