我们正在为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外,我不知道丢失了什么。
答案 0 :(得分:0)
已经有一段时间了,因为我不使用Glassfish,但是据我所记得,您应该为具有XADataSource接口实现的数据库提供程序安装jar。在MS SQL Server中,我使用了jTDS驱动程序。
代码段中需要考虑的另一件事是,您应该为开发和生产使用不同的Glassfish配置,您应该将这类东西留给应用程序服务器而不是代码内部。 Glassfish是完整的JavaEE Application Server,它具有所有优点,包括数据库连接池。