prepared Spring's DataSource and RowSet adapters for forward compatibility with JDBC 4.1
This commit is contained in:
parent
fdeeeac5d0
commit
e1d81e04bc
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2008 the original author or authors.
|
||||
* Copyright 2002-2011 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -16,15 +16,13 @@
|
|||
|
||||
package org.springframework.jndi;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Map;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
import javax.naming.Binding;
|
||||
import javax.naming.Context;
|
||||
import javax.naming.InitialContext;
|
||||
|
|
@ -36,9 +34,12 @@ import javax.naming.spi.InitialContextFactory;
|
|||
import javax.sql.DataSource;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.mock.jndi.SimpleNamingContext;
|
||||
import org.springframework.mock.jndi.SimpleNamingContextBuilder;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
|
||||
/**
|
||||
* @author Juergen Hoeller
|
||||
|
|
@ -250,4 +251,7 @@ class StubDataSource implements DataSource {
|
|||
return null;
|
||||
}
|
||||
|
||||
public Logger getParentLogger() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2008 the original author or authors.
|
||||
* Copyright 2002-2011 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
package org.springframework.jdbc.core;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import javax.sql.rowset.CachedRowSet;
|
||||
|
|
@ -24,6 +25,7 @@ import com.sun.rowset.CachedRowSetImpl;
|
|||
|
||||
import org.springframework.jdbc.support.rowset.ResultSetWrappingSqlRowSet;
|
||||
import org.springframework.jdbc.support.rowset.SqlRowSet;
|
||||
import org.springframework.util.ReflectionUtils;
|
||||
|
||||
/**
|
||||
* ResultSetExtractor implementation that returns a Spring SqlRowSet
|
||||
|
|
@ -31,7 +33,8 @@ import org.springframework.jdbc.support.rowset.SqlRowSet;
|
|||
*
|
||||
* <p>The default implementation uses a standard JDBC CachedRowSet underneath.
|
||||
* This means that JDBC RowSet support needs to be available at runtime:
|
||||
* by default, Sun's <code>com.sun.rowset.CachedRowSetImpl</code> class.
|
||||
* by default, Sun's <code>com.sun.rowset.CachedRowSetImpl</code> class on Java 5 and 6,
|
||||
* or the <code>javax.sql.rowset.RowSetProvider</code> mechanism on Java 7 / JDBC 4.1.
|
||||
*
|
||||
* @author Juergen Hoeller
|
||||
* @since 1.2
|
||||
|
|
@ -42,6 +45,24 @@ import org.springframework.jdbc.support.rowset.SqlRowSet;
|
|||
*/
|
||||
public class SqlRowSetResultSetExtractor implements ResultSetExtractor<SqlRowSet> {
|
||||
|
||||
private static Object rowSetFactory = null;
|
||||
|
||||
private static Method createCachedRowSet = null;
|
||||
|
||||
static {
|
||||
ClassLoader cl = SqlRowSetResultSetExtractor.class.getClassLoader();
|
||||
try {
|
||||
Class rowSetProviderClass = cl.loadClass("javax.sql.rowset.RowSetProvider");
|
||||
Method newFactory = rowSetProviderClass.getMethod("newFactory");
|
||||
rowSetFactory = ReflectionUtils.invokeMethod(newFactory, null);
|
||||
createCachedRowSet = rowSetFactory.getClass().getMethod("createCachedRowSet");
|
||||
}
|
||||
catch (Exception ex) {
|
||||
// JDBC 4.1 API not available - fall back to Sun CachedRowSetImpl
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public SqlRowSet extractData(ResultSet rs) throws SQLException {
|
||||
return createSqlRowSet(rs);
|
||||
}
|
||||
|
|
@ -75,7 +96,13 @@ public class SqlRowSetResultSetExtractor implements ResultSetExtractor<SqlRowSet
|
|||
* @see com.sun.rowset.CachedRowSetImpl
|
||||
*/
|
||||
protected CachedRowSet newCachedRowSet() throws SQLException {
|
||||
return new CachedRowSetImpl();
|
||||
if (createCachedRowSet != null) {
|
||||
// RowSetProvider.newFactory().createCachedRowSet();
|
||||
return (CachedRowSet) ReflectionUtils.invokeJdbcMethod(createCachedRowSet, rowSetFactory);
|
||||
}
|
||||
else {
|
||||
return new CachedRowSetImpl();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2008 the original author or authors.
|
||||
* Copyright 2002-2011 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -18,6 +18,7 @@ package org.springframework.jdbc.datasource;
|
|||
|
||||
import java.io.PrintWriter;
|
||||
import java.sql.SQLException;
|
||||
import java.util.logging.Logger;
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
|
|
@ -90,4 +91,13 @@ public abstract class AbstractDataSource implements DataSource {
|
|||
return DataSource.class.equals(iface);
|
||||
}
|
||||
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
// Implementation of JDBC 4.1's getParentLogger method
|
||||
//---------------------------------------------------------------------
|
||||
|
||||
public Logger getParentLogger() {
|
||||
return Logger.getGlobal();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2008 the original author or authors.
|
||||
* Copyright 2002-2011 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -19,6 +19,7 @@ package org.springframework.jdbc.datasource;
|
|||
import java.io.PrintWriter;
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import java.util.logging.Logger;
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
|
|
@ -117,4 +118,13 @@ public class DelegatingDataSource implements DataSource, InitializingBean {
|
|||
return getTargetDataSource().isWrapperFor(iface);
|
||||
}
|
||||
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
// Implementation of JDBC 4.1's getParentLogger method
|
||||
//---------------------------------------------------------------------
|
||||
|
||||
public Logger getParentLogger() {
|
||||
return Logger.getGlobal();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2010 the original author or authors.
|
||||
* Copyright 2002-2011 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -19,6 +19,7 @@ package org.springframework.jdbc.datasource.embedded;
|
|||
import java.io.PrintWriter;
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
import java.util.logging.Logger;
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
|
|
@ -227,6 +228,10 @@ public class EmbeddedDatabaseFactory {
|
|||
return this.dataSource.isWrapperFor(iface);
|
||||
}
|
||||
|
||||
public Logger getParentLogger() {
|
||||
return Logger.getGlobal();
|
||||
}
|
||||
|
||||
public void shutdown() {
|
||||
shutdownDatabase();
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue