Hi! > In ConnectionManagerDataSource, method isWrapperFor currently returns > false. Perhaps it should throw UnsupportedOperationException instead? And what about a solution using reflection? Maybe the most correct solution could be:
public Object unwrap(Class iface) throws SQLException { try { if (iface.isAssignableFrom(dataSource.getClass())) { return dataSource; } Method method = dataSource.getClass().getMethod("unwrap", new Class[]{Class.class}); return method.invoke(dataSource, new Object[] { iface }); } catch (NoSuchMethodException e) { throw new UnsupportedOperationException(); } catch (IllegalAccessException e) { throw new SQLException(e); } catch (InvocationTargetException e) { throw new SQLException(e); } } public boolean isWrapperFor(Class iface) throws SQLException { try { if (iface.isAssignableFrom(dataSource.getClass())) { return true; } Method method = dataSource.getClass().getMethod("isWrapperFor", new Class[]{Class.class}); return Boolean.TRUE.equals(method.invoke(dataSource, new Object[] { iface })); } catch (NoSuchMethodException e) { throw new UnsupportedOperationException(); } catch (IllegalAccessException e) { throw new SQLException(e); } catch (InvocationTargetException e) { throw new SQLException(e); } } What do you think? If you don't like it, simply change the "return false" to the Exception you proposed. Ciao, Mario