无法在 JBoss EAP 6 中解包 TmesTen 数据源 JDBC 对象



我试图从JBoss EAP 6.4上的JNDI循环中获取TimesTenDataSource。我为时间配置了独立数据库.xml以示支持。如果我使用标准Jdbc对象,即数据源,连接,准备语句,那么它都可以工作。出于某种原因,我想使用来自ttjdbc8.jar的TimesTen specific TimesTenDataSource,TimesTenConnection和TimesTenCallableStatement对象。这个 jar 文件放在 JBoss 模块目录中。

InitialContext ic = new InitialContext();
TimesTenDataSource ds = null;
DataSource ods = (DataSource) ic.lookup(databaseJDNIName);
log.info("Original data source is " + ods);
/*** above line prints -- Original data source is org.jboss.jca.adapters.jdbc.WrapperDataSource@16174fbf ***/
TimesTenDataSource ds =  ods.unwrap(com.timesten.jdbc.TimesTenDataSource.class);
/** ds is null here **/
TimesTenConnection tconn = ds.getConnection(); // throws null pointer exception

作为对这个线程的引用,我调用解包来获取底层的 TimesTen 连接。

上面的代码调试表明,WrapperDataSource没有实现扩展类JBossWrapper中的getWrappedObject()方法。

/**
 * Get the wrapped object - override in sub-classes
 * @return The object
 * @exception SQLException Thrown if an error occurs
 */
protected Object getWrappedObject() throws SQLException
{
   return null;
}

这是 JbossWrapper 类中的解包方法

if (iface == null)
   throw new IllegalArgumentException("Null interface");
if (iface.isAssignableFrom(getClass()))
   return iface.cast(this);
Object wrapped = unwrapInnerMost(**getWrappedObject()**, iface);

由于getWrappedObject()返回null,所以一切都失败了。

也不能直接将 WrapperDataSource 强制转换为 TimesTenDataSource,这样做会导致 ClassCastException。

您是否查看了Oracle TimesTen关于对象关系映射的白皮书,其中包含使用JBoss EAP 6.2的示例?

我假设 EAP 6.4 的配置与 6.2 的配置相似。

最新更新