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

Posted

技术标签:

【中文标题】无法在 JBoss EAP 6 中解包 TmesTen 数据源 JDBC 对象【英文标题】:Cannot unwrap TmesTen datasource JDBC object in JBoss EAP 6 【发布时间】:2016-05-27 13:17:14 【问题描述】:

我试图从 JBoss EAP 6.4 上的 JNDI loopup 获取 TimesTenDataSource。我在standalone.xml 中为timesten 配置了数据库。如果我使用标准 Jdbc 对象,即 DataSource、Connection、PreparedStatement,那么一切正常。出于某种原因,我想使用来自 ttjdbc8.jar 的 TimesTen 特定的 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

作为对this thread 的引用,我调用 unwrap 来获取底层 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 类中的 unwrap 方法

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。

【问题讨论】:

@AlexPoole 感谢您的编辑,您可以添加 jboss7.x 标签吗?它需要我没有的 1500 声望。 不确定您的意思,that tag already exists。您可以自己将标签添加到此问题中。不过,您只能有五个标签,因此不确定要删除哪个标签;如果您只能拥有jboss 或jboss7.x,那么更通用的可能会更好。也许可以将 [tab:oracle] 删除,因为它是 TimesTen 特有的? 我添加了 oracle,因为 timesten 遵循大多数 oracle 概念。 【参考方案1】:

您是否查看过 Oracle TimesTen white paper 关于对象关系映射的内容,其中包含使用 JBoss EAP 6.2 的示例?

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

【讨论】:

以上是关于无法在 JBoss EAP 6 中解包 TmesTen 数据源 JDBC 对象的主要内容,如果未能解决你的问题,请参考以下文章

JBOSS EAP 6.4 无法加载拓扑

在 JBoss EAP 6.2 中无法通过 SSL 连接到 SOAP 服务

无法将 Jvisual Vm 与 Jboss EAP 6.1 集成

MQJCA1011:无法分配与 JBOSS EAP 6.2.0 的 JMS 连接

Jboss EAP 6.4 无法在模块中定义类 org.springframework.web.servlet.DispatcherServlet

JBOSS EAP 6.4:无法在生成的 WSDL 中的“soap:address”中使用 HTTPS 模式