Java和SQL-XADataSource

时间:2018-07-03 19:55:02

标签: java sql-server connection

我们正在为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外,我不知道丢失了什么。

1 个答案:

答案 0 :(得分:0)

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

代码段中需要考虑的另一件事是,您应该为开发和生产使用不同的Glassfish配置,您应该将这类东西留给应用程序服务器而不是代码内部。 Glassfish是完整的JavaEE Application Server,它具有所有优点,包括数据库连接池。