【问题标题】:Java & SQL - XADataSourceJava 和 SQL - XADataSource
【发布时间】:2018-07-03 19:55:02
【问题描述】:

我们正在为我们的 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】:

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

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

    【讨论】:

    • 我们当前的 jar 有 XADataSource。我们可以导入它。转换错误很奇怪。
    • 该类是否实现了 XADataSource 接口?
    • 另外,在 JavaEE 环境中,您应该使用类似这样的东西来使用数据库 @PersistenceContext(unitName = "YourAwesome-pu") private EntityManager em;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 2017-10-27
    • 2019-03-13
    • 2012-10-12
    • 1970-01-01
    相关资源
    最近更新 更多