websphere集群环境下使用sqlserver XA存储EJB Timer的 xa_rollback异常处理
2015-10-13 15:05
639 查看
感觉国内还是Tomcat用的多啊,自从跳槽,接触的都是JBoss,WebSphere,weblogic什么的,看来环境不一样,用的东西真是差太多了。
记录下来到这里后遇到的第一个问题。
问题描述:公司产品使用的EJB Timer实现任务调度(我X),结果在WAS集群环境发现EJB Timer启动出现异常,异常信息(红毛儿语言,〇疼):
问题背景和解决方案:
首先,集群环境为了保证各节点的Timer同步,舍弃了WAS自带的Timer持久化,而使用我们自己的数据库作为WAS存储Timer数据的地方。WAS存储Timer的四张表:"LMGR","LMPR","TASK","TREG"。
其次,因为不同的节点,所以要使用分布式事务(XA),SQLServer在2012之前默认是不启用这个功能的,需要手动实现,配置方式详见http://guanzhilibai.blog.163.com/blog/static/13587993201171052712887/
记录一下基本步骤:
1.MSDTC中启动XA功能
2.将sqljdbc_xa.dll拷贝到SQLServer的Binn目录
3.执行xa_install.sql存储脚本,会在master表的Programability--Extended Stored Procedures下生成一堆存储过程,并且生成一个新的role:sqlJDBCXAUser。在你要使用的用户设置中,UserMapping-->选中master行-->勾选下面的sqlJDBCXAUser即可。
4.应用中必须使用SQLServer提供的sqljdbc4.jar这个Driver
再次,依据上面所说的,在WAS中创建Scheduler,并且使用这个XA的数据源和sqljdbc4的驱动。
问题出现后,发现数据库中WAS的表已经创建,已经确定XA配置无误。
在WAS的Resources--Schedulers中点击Drop table,报错无法删除。
在数据库中手动Drop table(那四个表),再回到WAS的schedulers中点击Create table,问题解决。
原因不明,估计这四个表是在XA没配置好的时候就创建了,再使用XA导致出现异常。
记录一下供日后使用。
记录下来到这里后遇到的第一个问题。
问题描述:公司产品使用的EJB Timer实现任务调度(我X),结果在WAS集群环境发现EJB Timer启动出现异常,异常信息(红毛儿语言,〇疼):
data(000001473dcb128200000001000000790307be0ccbedc421199f30b5b214d3174ae0cade000001473dcb12820000000 1000000790307be0ccbedc421199f30b5b214d3174ae0cade000000010000000000000000000000000001)} : javax.transaction.xa.XAException: Функция ROLLBACK: завершилась ошибкой. Состояние: -4. Ошибка: "*** SQLJDBC_XA DTC_ERROR Context: xa_rollback, state=1, StatusCode:-4 (0xFFFFFFFC) ***". at com.microsoft.sqlserver.jdbc.SQLServerXAResource.DTC_XA_Interface(SQLServerXAResource.java:550) at com.microsoft.sqlserver.jdbc.SQLServerXAResource.rollback(SQLServerXAResource.java:718) at com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.rollback(WSRdbXaResourceImpl.java:1321) at com.ibm.ejs.j2c.XATransactionWrapper.rollback(XATransactionWrapper.java:1303)
问题背景和解决方案:
首先,集群环境为了保证各节点的Timer同步,舍弃了WAS自带的Timer持久化,而使用我们自己的数据库作为WAS存储Timer数据的地方。WAS存储Timer的四张表:"LMGR","LMPR","TASK","TREG"。
其次,因为不同的节点,所以要使用分布式事务(XA),SQLServer在2012之前默认是不启用这个功能的,需要手动实现,配置方式详见http://guanzhilibai.blog.163.com/blog/static/13587993201171052712887/
记录一下基本步骤:
1.MSDTC中启动XA功能
2.将sqljdbc_xa.dll拷贝到SQLServer的Binn目录
3.执行xa_install.sql存储脚本,会在master表的Programability--Extended Stored Procedures下生成一堆存储过程,并且生成一个新的role:sqlJDBCXAUser。在你要使用的用户设置中,UserMapping-->选中master行-->勾选下面的sqlJDBCXAUser即可。
4.应用中必须使用SQLServer提供的sqljdbc4.jar这个Driver
再次,依据上面所说的,在WAS中创建Scheduler,并且使用这个XA的数据源和sqljdbc4的驱动。
问题出现后,发现数据库中WAS的表已经创建,已经确定XA配置无误。
在WAS的Resources--Schedulers中点击Drop table,报错无法删除。
在数据库中手动Drop table(那四个表),再回到WAS的schedulers中点击Create table,问题解决。
原因不明,估计这四个表是在XA没配置好的时候就创建了,再使用XA导致出现异常。
记录一下供日后使用。
相关文章推荐
- Mysql5.5中设置utf-8编码、大小写、root启动的问题
- MySQL left join快 inner join慢
- ubuntu mysql5.5安装备忘
- 转:中国省/市/县三级联动MySQL数据
- sql记录2
- 树形结构的数据库表Schema设计
- MySQL Front很讨厌的 Row XX doesn't contain data for all columns错误
- spring同时集成redis和mongodb时遇到多个资源文件加载的问题
- PLSQL报无效的窗口句柄的解决办法
- SQL Server编程必知必会 -- (37-57点总结)
- sqlserver trigger
- hibernate 关于date类型的模糊查询解决方法
- MySQL分表方法
- Orlace 数据库连接的那些事儿:客户端(二)
- MongoDB-Replication Replica Set Arbiter
- MySql:操作数据库以及一些常用的命令
- [SQL SERVER 2005]数据库差异备份及还原
- SQL Server ->> CLR存储过程枚举目录文件并返回结果集
- MySQL分表和分区的区别
- Sql Server按树形结构排序查询表记录