jboss默认持久化db是用hsql存到server\default\data\hypersonic\下。配置文件是server\default\deploy\jms\hsqldb-jdbc2-service.xml。
我们可以在这里把它换成oracle,以避免在loadbalance环境下,一个Jboss挂掉了,它的message就全丢了。
改动其实很简单,在docs\examples\jms\目录下有oracle-jdbc2-service.xml定义的oracle的datasource,修改它定义的
<depends optional-attribute-name="ConnectionManager">jboss.jca:service=DataSourceBinding,name=OracleDS</depends>
把OracleDS换成你自己定义的ds文件中的名字,然后把它丢到server\default\deploy\jms\下去,删除hsqldb-jdbc2-service.xml!
项目上遇到一个问题,想要两个queue存到同一个db。在研究过程中,发现jboss mq实现存oracle,创建表是写在oracle-jdbc2-service.xml里面的。两个不同的queue会产生相同的table —— JMS_TRANSACTION表。该表中Transaction_ID和Message_ID决定了message的次序。本来想看看这两个ID会不会是oracle db的sequence,结果发现不是……而是源代码中的自增。PersistenceManager.createPersistentTx()方法中有Tx id = new Tx(nextTransactionId.increment());
悲剧……………………
这样以来,唯一的解决方案就只有改表名,或者给不同的queue创建不同的schema……囧
本来还想研究下jboss MQ的cluster方案,后来被同事提醒——mq的cluster必然要求jboss cluster……汗~那就玩大了……会破坏已有系统……
就这样吧……唉~
我们可以在这里把它换成oracle,以避免在loadbalance环境下,一个Jboss挂掉了,它的message就全丢了。
改动其实很简单,在docs\examples\jms\目录下有oracle-jdbc2-service.xml定义的oracle的datasource,修改它定义的
<depends optional-attribute-name="ConnectionManager">jboss.jca:service=DataSourceBinding,name=OracleDS</depends>
把OracleDS换成你自己定义的ds文件中的名字,然后把它丢到server\default\deploy\jms\下去,删除hsqldb-jdbc2-service.xml!
项目上遇到一个问题,想要两个queue存到同一个db。在研究过程中,发现jboss mq实现存oracle,创建表是写在oracle-jdbc2-service.xml里面的。两个不同的queue会产生相同的table —— JMS_TRANSACTION表。该表中Transaction_ID和Message_ID决定了message的次序。本来想看看这两个ID会不会是oracle db的sequence,结果发现不是……而是源代码中的自增。PersistenceManager.createPersistentTx()方法中有Tx id = new Tx(nextTransactionId.increment());
悲剧……………………
这样以来,唯一的解决方案就只有改表名,或者给不同的queue创建不同的schema……囧
本来还想研究下jboss MQ的cluster方案,后来被同事提醒——mq的cluster必然要求jboss cluster……汗~那就玩大了……会破坏已有系统……
就这样吧……唉~