Java 和 SQL - XADataSource

问题描述 投票:0回答:1

我们正在为 Java Web 应用程序运行 glassfish 4,并且遇到了计时器问题。普通 servlet 调用可以享受任意数量的不同连接,这使得集成变得更加容易。然而,一旦我们添加计时器,数据源就需要是“XA”数据源。我们设置如下:

public XADataSource getNewConnection() {
    Encapsulations encap = new Encapsulations();
    XADataSource ds = null;
    try {
        Context ctx = new InitialContext();
        if(!encap.getDataSource().equals("Production")){
              ds = (XADataSource) ctx.lookup("jdbc/XA_TEST");
        }else{
              ds = (XADataSource) ctx.lookup("jdbc/XA");
        }

    } catch (Exception e) {
        CatchException.logException(null, e);
        String error = e.toString();
    }
    return ds;
} 

问题是,当 ds = (XADataSource) ctx.lookup("jdbc/XA_TEST") 行运行时,我们收到此错误:

java.lang.ClassCastException:com.sun.gjc.spi.jdbc40.DataSource40 无法转换为 javax.sql.XADataSource

我们使用 sqljdbc42 jar 进行正常连接,因此在其中看到 40 有点奇怪。有人知道问题是什么吗?我们使用的数据源被设置为 XADataSource,除了下载不同的 jar 之外,我不知道缺少什么。

java sql-server connection
1个回答
0
投票

我已经有一段时间没有使用 Glassfish 了,但据我记得,您应该为具有 XADataSource 接口实现的数据库提供程序安装 jar。在 MS SQL Server 中,我使用了 jTDS 驱动程序。

代码片段中要考虑的另一件事是,您应该有不同的 glassfish 配置用于开发和生产,您应该将此类事情留给应用程序服务器,而不是放在代码中。 Glassfish 是一个完整的 JavaEE 应用服务器,它具有包括数据库连接池在内的所有优点。

© www.soinside.com 2019 - 2024. All rights reserved.